最近在研究ffmpeg 编解码,记录下遇到的一些问题。
MP4解码播放
1.在网上找的解码播放代码,打开一个MP4文件,读取媒体格式信息,读取帧数据,解码,贴图显示,这些都很顺利。
2.想着把这块的内容封装一下,可以直接播放H264流,但是在这里花了一些时间,播放H264裸流文件是没有问题的,但是从MP4文件里面提取H264文件播放就不行了,主要是网上找到的一些东西说的不太准确。
a.av_read_frame读取MP4文件出来的数据,avpacket.data里面包含的可能不止一帧,这个可以根据前面4个字节判断一下。
b.获取avpacket.data里面的每一帧,然后把前四个字节(一帧的长度)改成00000001解码播放也是不行。avcodec_decode_video2函数返回大于0,但是got_picture_prt为0,也就是说没有解出来数据。主要是因为没有先把SPS和PPS发送给avcodec_decode_video2。(用其它工具获取的H264文件里面都有保存SPS和PPS的)。
3.这里还有一个ffpeg + SDL音频解码播放的列子。