ercircle 发表于 2025-8-12 21:03:34

一个音视频播放例程【USART-SPI==>DMA-P2P==>SPI, +I2S】@AI8051U

917



视频P2P播放,时间计算:

fps20,50ms 周期
刷屏时间:160*80 一帧刷屏时间28.2ms
帧间隔:50ms-28.2ms=21.8ms

音频双缓冲区交叉播放,利用视频播放帧间隔加载下一个缓冲区音频数据,时间计算:
16000采样率 16bit 双声道 一秒32000字节
一个缓冲区播放时间:4K采样点,一通道2K,播放时间2K/16K*1000ms = 125ms
DMA取点时间:3.3V@900B/ms,4*1024/900=4.55ms


视频预处理:

分辨率160*80缩放示例:
ffmpeg -i xxx.mp4 -vf scale=160:80 -c:a copy src.mp4
分辨率加截取示例:
ffmpeg -ss 00:01:13 -i xxx.mp4-t 25 -vf scale=160:80 -c:a copy src.mp4
截取xxx.mp4 1分13秒开始,时长25s

资源生成命令:
ffmpeg -i .\src.mp4 -t 25 -vn -ac 2 -f s16le -ar 16000 -acodec pcm_s16le audio.bin
ffmpeg -i .\src.mp4 -t 25 -vf "fps=20" -pix_fmt rgb565be -f rawvideo video.bin

测试前先使用“QSPI_刷Flash专用_40M”固件,烧录音视频文件到W25Q中:

烧录演示视频:
918



烧录后屏幕正常初始化完毕刷红等待命令,USB-CDC串口发送video字符串开始播放:




参考链接:
SPI / QSPI 编程外部串行Flash | 配合ISP软件中【工具 | 串行Flash编程器】,2/5 - QSPI/3组SPI/I2S/I2C,一线制温湿度传感器 国芯人工智能技术交流网站 - AI32位8051交流社区
Ai8051U实现USB全双工声卡,同时 录音/ 放 音,微信通话/腾讯会议 可用, 重磅开源 - 51 发烧友,UAC,极致音频,大国工匠,艺术人生,乐林漫步 国芯人工智能技术交流网站 - AI32位8051交流社区
基于 Ai8051U 的电子鞭炮设计 - 开源广场及教学视频交流 国芯人工智能技术交流网站 - AI32位8051交流社区
AiCube 图形化自动生成程序,驱动 ST7735S,TFT-彩屏, @Ai8051U, 跟帖问TFT, ST7739 - 第9页 - TFT彩屏,触摸屏,DMA-i8080/M6800并口自动刷屏,DMA-SPI刷屏,外设直接到外设 国芯人工智能技术交流网站 - AI32位8051交流社区






国芯人工智能 发表于 2025-8-12 21:08:00

国芯人工智能技术团队针对您提供的音视频播放例程“USARTSPI-SPI-P2P+I2S@AI8051U”及配套资料,进行如下专业分析与说明:

本例程基于AI8051U平台,实现了通过SPI、I2S等接口完成音视频数据的传输与播放。其中,视频部分采用P2P(点对点)方式传输,并结合帧率控制与刷屏时间计算,确保画面流畅;音频部分则采用双缓冲区交叉播放机制,以充分利用视频帧间隔时间加载下一缓冲区数据,提升播放连续性。

在视频播放方面,设定为20fps,即每帧刷新周期为50ms。实际刷屏时间为282ms,导致帧间隔为218ms。此配置下,需确保系统具备足够的处理能力以维持稳定帧率,避免画面卡顿或丢帧现象。建议进一步优化图像处理算法或调整刷新频率,以提高整体性能。

音频播放采用双缓冲区设计,每个缓冲区包含4K采样点(单通道2K),采样率为16kHz,每秒32,000字节。因此,每个缓冲区播放时间为125ms。同时,DMA取点时间为455ms,表明数据传输速度可能成为瓶颈。建议优化DMA配置或调整缓冲区大小,以减少等待时间,提升音频播放质量。

测试前需使用“QSPI刷Flash专用40M”固件,将音视频文件烧录至W25Q系列Flash中。该过程可通过ISP软件中的“串行Flash编程器”完成,确保数据准确写入并可被AI8051U平台正确读取。

参考链接提供了关于SPI/QSPI编程、I2S音频处理及USB声卡实现的相关信息,有助于深入理解本例程的技术细节与扩展应用。

综上所述,本例程展示了AI8051U平台在音视频处理方面的强大功能,适用于多种嵌入式应用场景。如需进一步优化或扩展功能,建议结合具体需求调整参数配置,并参考相关技术文档与社区资源进行深入开发。

[本文内容由国芯人工智能辅助生成,仅供参考]

C_wolf 发表于 2025-8-12 21:56:06

{:4_250:}{:4_250:}{:4_250:}

没用过I2S,那个抢滩登陆的BGM音效,是双PWM直推WAV,省成本。

这回学习一下I2S。

ercircle 发表于 2025-8-12 22:15:46

C_wolf 发表于 2025-8-12 21:56
没用过I2S,那个抢滩登陆的BGM音效,是双PWM直推WAV,省成本。

这回学习一下I2S。


感谢老铁的鲜花鼓励{:4_197:}{:4_197:}

这个双PWM直推WAV玩法有空开源分享下学习学习

C_wolf 发表于 2025-8-13 11:42:10

ercircle 发表于 2025-8-12 22:15
感谢老铁的鲜花鼓励

这个双PWM直推WAV玩法有空开源分享下学习学习

这阵有点忙,等有时间的,整理一下。

香河英茂工作室 发表于 2025-8-13 17:15:43

硬件不可直接替换:由于引脚定义和指令集不同,基于ST7735开发的模块无法直接替换为S6D02A1,反之亦然。例如,用户反馈称误用S6D02A1代替ST7735会导致功能异常,需修改驱动程序4。    佬 ,我只有st7735,怎么用这个啊?

香河英茂工作室 发表于 2025-8-13 17:19:05

Rebuild target 'demo'
compiling main.c...
src\main.c(78): warning C47: 'dat': unreferenced parameter
src\main.c(107): warning C47: 'i': unreferenced local variable
src\main.c(232): warning C47: 'sz': unreferenced local variable
src\main.c(233): warning C47: 'ptr': unreferenced local variable
src\main.c(304): error C168: interrupt: value not in range 0 ... 31
src\main.c(317): error C168: interrupt: value not in range 0 ... 31
src\main.c(349): error C168: interrupt: value not in range 0 ... 31
compiling LCD.c...
src\LCD.c(69): warning C188: 'parameter 1': value truncated
src\LCD.c(71): warning C188: 'parameter 1': value truncated
src\LCD.c(75): warning C188: 'parameter 1': value truncated
src\LCD.c(77): warning C188: 'parameter 1': value truncated
src\LCD.c(84): warning C188: 'parameter 1': value truncated
src\LCD.c(86): warning C188: 'parameter 1': value truncated
src\LCD.c(90): warning C188: 'parameter 1': value truncated
src\LCD.c(92): warning C188: 'parameter 1': value truncated
src\LCD.c(105): warning C188: 'parameter 1': value truncated
src\LCD.c(106): warning C188: 'parameter 1': value truncated
compiling spi.c...
compiling I2S.c...
src\I2S.c(125): error C168: interrupt: value not in range 0 ... 31
compiling TLV320AIC23.c...
compiling video.c...
compiling flash_spi.c...
src\flash_spi.c(266): warning C47: 'sz': unreferenced local variable
src\flash_spi.c(267): warning C47: 'ptr': unreferenced local variable
Target not created.
Build Time Elapsed:00:00:01 佬,这个怎么解决?

香河英茂工作室 发表于 2025-8-13 17:55:00



佬,这里不理解,这3个.bin在哪里?怎么具体烧录?

ercircle 发表于 2025-8-13 17:55:52

香河英茂工作室 发表于 2025-8-13 17:19
Rebuild target 'demo'
compiling main.c...
src\main.c(78): warning C47: 'dat': unreferenced parameter ...
没配置中断扩展导致的。
https://www.stcaimcu.com/data/download/Tools/%E6%8B%93%E5%B1%95Keil%E7%9A%84C%E4%BB%A3%E7%A0%81%E4%B8%AD%E6%96%AD%E5%8F%B7.zip


ercircle 发表于 2025-8-13 17:56:52

香河英茂工作室 发表于 2025-8-13 17:15
硬件不可直接替换:由于引脚定义和指令集不同,基于ST7735开发的模块无法直接替换为S6D02A1,反之亦然。例 ...

是ST7735驱动
页: [1] 2 3 4 5 6 7
查看完整版本: 一个音视频播放例程【USART-SPI==>DMA-P2P==>SPI, +I2S】@AI8051U