打印

STM32+SD卡+znFAT+VS1003(MP3解码)+TFT实现AVI"音视频"同步播放(流畅)

[复制链接]
8008|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
znmcu|  楼主 | 2014-1-26 01:21 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式


网站 www.znmcu.cn 论坛 www.znmcu.cn/bbs
znFAT技术交流群:145948643


       关注振南网站:http://www.znmcu.cn/bbs/topic.asp?id=229&boardid=44&tb=1

      自从振南发布了使用STM32实现的简易视频播放器实验之后,很多人都表示很有兴趣。这个实验在我诸多的精彩原创实验中也算是关注度比较高的实验。但是不少人都提出了自己的建议,总结起来主要有三点:1、能否放大图像尺寸,比如使用标准的VGAQVGA,同时提高帧速,这样也许能达到更好的播放效果;2、是否能够不使用振南自定义的ZNV文件格式,而直接使用通用的视频文件格式,比如AVIMP4等等;3、能够加入音频的同步播放,这样才能称之为视频播放器。
此实验中对TFT液晶与SD卡驱动进行了优化,从而达到了更高的速度,这是实现第一条建议的根本基础。振南的ZN-X开发板上使用的STM32芯片因为没有FSMC控制器,所以TFT液晶采用IO驱动方式,其刷屏速度主要取决于IO的翻转速度与内存的访问速度。振南通过适当的超频(STM32最高可超频到140MHz)使TFT液晶驱动的性能提升到了新的水平(纯色刷屏帧速达到约15fps)。SD卡扇区读写驱动,仍然使用SPI方式,加入了STM32DMA传输机制,这极大地提升了SD卡的读写速度(读扇区速度可达约2MBps)。至于DMA为什么会对SD卡驱动产生如此大的提升作用,请详见《高性能SD卡驱动的实现》一文。
在前面的实验中,振南确实使用的是一种自定义的视频文件格式,即ZNV。它最大的好处是直接存储了用于显示的原始RGB565数据,而无需解码。如果要使用常见的通用视频格式的话,最大的问题在于:1、文件数据格式也许会比较复杂,需要花时间去仔细研究和解析;2、音视频数据的解码,这部分工作也许难度较大。不过,在此实验中,振南通过一些折中的方法,避开了这些疑难问题。
此实验中使用AVI视频文件,它本身是音视频交错的格式,因此可以实现音频与视频的同步播放。AVI中的音频部分可以使用任何一种编码方式,比如原始PDMADPCMMP3WMA等等。这里我们使用MP3,所以用到VS1003解码器。
至于AVI文件格式的详细介绍请见振南发布的专贴。AVI文件中的音频与视频数据的组织形式还是比较简单,请见下图。

AVI文件中的各帧图像与音频数据相互交织构成了一个数据块(所以它才被称为音视频交错格式),各个数据块是依次顺序存放的。数据块中的音频与视频子数据块分别以4字节标记"01wb""00dc"(数据块ID)开始,紧随其后的是当前子数据块中的实际数据长度。
AVI格式标准并没有对音视频数据的具体编码算法予以限定。从某种意义上来说,AVI文件格式只是定义了一个框架而已,其中的数据到底怎么样,其实它并不关心。这一方面是其灵活之处,但另一方面也使得它可以变得非常复杂而缺乏统一性。比如同样是AVI文件,视频数据有可能是通过H.263编码的,也可能是MPEG4,还可能是JPEGRLE或者FFD等等;音频数据的编码也会有很多种,比如MP3ADPCMOGGWMA等等。所以,我们会经常遭遇这样的事情:在电脑上一个AVI能播放,而另一个却无法播放,其根本原因就在于它们可能使用了不同的编码方式,而你又没有安装相应的解码器。
AVI中的视频部分是支持未经编码的原始RGB格式的,所以我们仍然可以像使用ZNV一样方便而简单地实现视频播放。这里介绍一款名叫VirtualDub的软件,它可以用于生成这种特定的AVI文件。如图所示。

图中①用于打开源视文件;②用于设置输出视频的帧速、色深与压缩算法,此实验中分别设置为7fpsRGB565Uncompressed RGB/YUV;③用于设置输出音频的采样率与压缩算法,此实验中分别设置为8kHzMPEG Layer-3MP3)。④为最终的AVI文件输出。
在具体的代码实现中,我们只需要搜索视频与音频数据块的开始标记”01wb”与”00dc”,然后读取后面的数据,再分别送至VS1003解码和TFT液晶进行显示即可。
实验效果图:

源代码: aviplayer.rar (389.63 KB)
      VirtualDub软件: HA-VirtualDub1.10.2-ngss.rar (2.65 MB)

在线视频演示:

相关帖子

沙发
liujw_cq| | 2014-1-26 08:55 | 只看该作者
又见大作,支持一个!

使用特权

评论回复
板凳
LGM2010| | 2014-1-26 09:49 | 只看该作者
传说中的MP4!!!

使用特权

评论回复
地板
slim443| | 2014-1-26 16:04 | 只看该作者
又一力作,楼主厉害啊

使用特权

评论回复
5
woshansi| | 2014-1-26 17:39 | 只看该作者
lz强大,学习学习

使用特权

评论回复
6
WJ20110308| | 2014-1-26 19:02 | 只看该作者
好厉害,。。
支持下

使用特权

评论回复
7
znmcu|  楼主 | 2014-1-28 18:34 | 只看该作者
最近在做文件的无线传输,基于nrf24l01,近期发上来。

使用特权

评论回复
8
znmcu|  楼主 | 2014-2-17 15:44 | 只看该作者
其实这个实验很有代表意义,我亲自顶上去,给大家再看看

使用特权

评论回复
9
flyheart33| | 2014-4-3 10:49 | 只看该作者
不明觉厉啊

使用特权

评论回复
10
wwnhzhiren| | 2014-4-3 11:12 | 只看该作者
楼主,好强大,让小学生膜拜。希望楼主改进和完善。

使用特权

评论回复
11
amwrdfe| | 2014-4-3 11:20 | 只看该作者
支持!

使用特权

评论回复
12
hyh19890917| | 2014-4-3 14:00 | 只看该作者
真的挺厉害的

使用特权

评论回复
13
大wang66| | 2014-4-4 10:00 | 只看该作者
赞一个

使用特权

评论回复
14
LIUYABO| | 2015-4-5 13:27 | 只看该作者
好强啊,赞一个

使用特权

评论回复
15
18806541688| | 2015-7-3 13:16 | 只看该作者
“SD卡扇区读写驱动,仍然使用SPI方式,加入了STM32的DMA传输机制,这极大地提升了SD卡的读写速度(读扇区速度可达约2MBps)。”
读扇区速度可达约2MBps,是超到频140M时测试的速度吗?

使用特权

评论回复
16
heisexingqisi| | 2016-4-28 21:32 | 只看该作者
https://bbs.21ic.com/icview-677482-1-1.html
参考这个,楼主的账号被盗了,还没有恢复,你想看需要再等等。

使用特权

评论回复
17
wsnsyy| | 2016-4-28 21:47 | 只看该作者
怎么都被屏蔽了

使用特权

评论回复
18
SandyLai| | 2018-11-21 11:57 | 只看该作者
支持振南

使用特权

评论回复
19
wdyichen| | 2023-4-17 17:54 | 只看该作者
这个流弊,感谢分享,正好想学习一下这个

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:振南的znFAT -- 单片机上上的FAT32文件系统 www.znmcu.cn

4474

主题

5195

帖子

33

粉丝