level 9
我们暂时抛开字幕流不论:以最一般的视频为研究对象,那么一个视频文件里面包含一个视频流,一个音频流,需要先解复用,也就是demux,然后再调用各自的解码器解码,decode。这一步很容易做到,上面的两个教程最开始的部分都是这样的。然后是就要对文件进行读取了,问题是文件编码存储的是压缩编码的数据包。问题是编码的时候是音频、视频数据包混合顺序存放的,并不是分成规整的两部分。假如视频文件是一个住宅小区,存放的时候不是说1-100栋全是音频,100-200栋全是视频,而是1-2可能是音频,3可能是视频,4又可能是音频,所以我们读取的时候需要判断这个包存的是什么类型数据。
下面我要分开谈了:
2015年09月05日 04点09分
3
level 9
以上是逻辑。视频解码后的一桢数据是存储在AVFRAME结构的data数组里面,解码后的数据类型一般都YUV,而构造位图需要的是RGB,所以有了教程里面的数据转换,转换为RGB24,RGB24类型的数据是存储在data数组的data【0】里面,所以对于我们有用的就是data[0]这里的数据。直接构造为wxbitmap我是没成功,鉴于wxbitmap是利用与设备无关的位图实现的,所以我先将data[0]的数据构造成了wxImage,然后在构造为wxBitmap,然后初始化wxBufferedPaintDC,当释放时会自动重绘窗口客户区。
2015年09月05日 04点09分
5
level 9
视频基本就是这样了,我现在正在尝试音频,完成后我会贴上代码
2015年09月05日 04点09分
6