首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > 多媒体 >

小弟我是个锲而不舍的人,虽然没有人来回答,但是小弟我一样会问

2012-04-22 
我是个锲而不舍的人,虽然没有人来回答,但是我一样会问!我现在在利用ffmpeg中的函数av_find_stream_info写

我是个锲而不舍的人,虽然没有人来回答,但是我一样会问!
我现在在利用ffmpeg中的函数av_find_stream_info写一个识别影音文件的程序
先用av_open_input_stream来打开一个文件流,然后用av_find_stream_info()来找文件的相关封装编码信息。
他可以实现输入一个影音文件的文件流(就是open本地文件然后read到buf中)
然后识别这个文件的封装形式(mpeg2 ,avi 等)、视频编码(h264 mpeg2等)
和音频编码(mps ac3等)
但是这里就出现个问题了
当我输入一个mpeg2-ps流影音文件时,程序不能识别了,识别ps流一个帧是不够的,需要许多帧才能是识别
但是mpeg2-ts流的话,一帧就够了
avi的话必须要将影音文件全读到buf 才能识别
这到底是为什么啊
难道我就等不到大家给我答案???

[解决办法]
怎么说的这么凄凉啊,怎么就没有人回答了?我顶一个。
你要是懂这些文件格式和av_find_stream_info的代码就知道为什么了。mpeg2-ps和mpeg2-ts都是没有文件头的,需要查找一定的数据才能找到一些音视频(ffmpeg的解析对这个有点弱,有时会失败,特别是对mpeg2-ps),avi有文件头,可以快速识别,找出音视频,但它读帧需要索引,而一般索引表在文件尾,所以读取一帧时一般需要整个文件。
你要用流模式的话,就不要直接用av_find_stream_info了,里面有读帧操作,还是自己一步一步写吧。

热点排行