上一篇写了关于在Symbian平台上实现H264编码的RTSP流播放的文章, 很多人给我发来了邮件,询问是否支持本地文件的播放。答案当然是可以了。
为了省事,我没有播放H264编码的AVI或者是MP4等格式的文件,而是直接播放的H264编码的裸数据。如果要播放AVI或者MP4文件,就需要对AVI或者MP4的文件格式进行解析,然后将其中的音频和视频的数据读取出来。现在比较流行的H264的封装都采用了MP4格式, 或许大家对这个不是很熟悉,但是他的兄弟3GP格式想必都听说过了。其实两者差不多,只是其中所谓的BOX有所不同,一个被阉割了而已(明朝那些事儿看多了)。
H264的数据读取最关键的地方就是如何识别一帧,因为ffmpeg的H264解码是按照一帧一帧解码的,如果送去解码的数据不是完整的一帧可能导致解码失败或者产生马赛克的情况。
以下是我在一个文档中摘取关于帧边界识别的一段,可以方便的解决相关的问题:
帧边界识别简介
H.264 将构成一帧图像所有