W80X(W800/W806/W801)做视频播放器(有画面有声音)
时间:2023年04月22日 人气:...

继上篇拿W806制作了NES模拟器之后,我又突发奇想,是不用还可以使用它做媒体应用呢?

先来顿百度,发现了一篇文章“基于W801和Helix解码库的MP3播放器(W801单片机学习笔记)热血沸腾,流畅播放”,看来w806也能做mp3播放器了,既然已经被人证明能做mp3播放器,那么能不能播放视频呢?

再一顿百度,没有发现关于w80x系列做视频的资料,那咱只好自己探索一番。

还是使用上篇做NES模拟器的那套环境:那张祖传512M的sd卡,读使用主从spi,这个最高时钟为20MHZ;lcd还是使用st7796s,使用sdio的spi方式刷屏,时钟配网60MHZ;i2s使用MAX98357,输出到3W8Ω的喇叭上;此外就没有其它解码器了。

工作流程我准备这么干:w806从sd卡上读取视频文件,每读一段数据,经过处理,分别在lcd显示画面和在i2s放大器上播放声音。画面尺寸从刷屏速度和观看效果双重考虑,选择的视频文件是320*240的画面,因为太大的话刷屏会比较慢,再太小的话观看起来也不是那么清楚,音频采样率是22050,这也是从上篇时得到的启发,11025的音质太渣,44100消耗大,所以22050是个非常不错的选择。

经过测试发现,这样操作下来,倒是能达成目的:

虽然效果不是十分理想,但是咱这次仅是探讨做视频播放器的可能性,所以我认为还是可以做视频播放的,原因如下:

  1. ·画面不流畅,问题在于读sd卡速度过慢,这次使用瓶颈不在刷屏了。

  2. ·主从spi读sd卡使用字节模式,没有使用dma模式,测试时发现调用“tls_spi_trans_type(SPI_DMA_TRANSFER)”之后就无法正常读卡了,不知道是SD卡的原因还是spi驱动的问题,以咱的功力尚不想花时间研究这原因。以默认的“tls_spi_trans_type(SPI_BYTE_TRANSFER)”读卡大概每秒才是500KB,当然我对这流程也没有做优化。

  3. ·声音破音问题,既有读sd慢,也有本次没有对音频数据做缓冲处理,读到就送i2s,音频数据不连续极易破音。

所以针对这种情况,我认为可以用下面几种方式来优化,如果达到之后适配播放应该就会达到流畅级别了:

  1. ·使用主从spi读sd卡的话,使用dma方式读卡,这样读数据速度就不会再成瓶颈。320*240显示一屏大概是二十多毫秒,普通视频一秒内刷30帧不成问题,当播放不是极高帧率的视频时足够使用。

  2. ·画面还可以继续缩小,比如播放100*100的视频,无论数据量还是刷屏都会更快;

  3. ·既然主从spi比较慢,那么使用sdio四线制来读卡,lcd和sd分时切换来使用sdio控制器;

  4. ·音频部分,声音做些缓存,不要造成断续应该就不会有破音了。

但是,以上方法我基本都没尝试,我想到了另一种思路:视频画面裁小之后,用spi来刷屏,用sdio来读卡。果然,这样基本上就可以流畅播放了,下面是一个我播放240*132分辨率视频的效果视频(上传这个视频可把我折腾坏了,b站因版权不让上传,我只好做了打码和剪辑,所以部分场景的跳转就非常突兀了。而且手机对焦有问题拍的不是很清晰,实际画面比这个要清晰):

最后说明一下:这是播放avi视频文件。

avi文件因其格式规则,vedio流可以使用rgb565,audio流可以使用pcm,因此w800在播放avi文件时,就可以读取avi,分别解析vedio和audio数据,分别在lcd输出和i2s音频输出。

所以,播放的视频需要进行一些转码和画面裁剪以适应屏幕的大小,pc端有很多工具可以选择,如神器ffmpeg,但是这里推荐使用VirtualDub,其图形化界面点几下就完事。本文转码avi使用的格式:vedio为 Uncompressed RGB565 画面大小240X132 帧率 15fps、audio为22050采样率 16bits数据 mono单声道。

这里也简单对VirtualDub使用做个简单介绍,先是打开一个视频文件,然后分别对audio和vedio进行设置。

audio设置如下:

vedio设置如下:

如果想对视频的画面尺寸进行裁剪、颠倒位置则可以点击Filter添加filter即可:

    · 裁剪画面大小,null transform -> Cropping...

    · 调整画面大小,resize

    · 水平或垂直翻转,flip horizontally或flip vertically

最后就是保存vedio:

底部也会显示出来最终的配置,可以确认正确了再保存即可。

最后,我整理出了这个视频播放器的相关工具和源码,供感兴趣的朋友参考,源码只能使用cdk编译,工具使用看上图。 

点击右边下载   --->   VirtualDub.7z   w800_avi_player.7z

好了,关于w80x视频播放就讨探到这里,欢迎感兴趣的朋友下面留意讨论。

PS:之所以开始选择播放“唐马儒”这个视频,是为了纪念曾经的一个朋友,有些人、有些事,从此后会无期。。。。。。

热门评论