关于avformat_open_input的问题记录

15020阅读 0评论2013-12-05 shenhailuanma
分类:LINUX

这几天使用ffmpeg的库遇到了一些问题,其中主要是avformat_open_input()造成的。有些问题暂未解决,先记录一下吧,待以后有时间继续解决。    


环境:centos6.2_64, ffmpeg1.1

1. 发现用avformat_open_input()解析网络流时间较长,例如HTTP或RTMP协议的网络直播流。

这个问题使用ffmpeg命令行工具也可以复现,若是本地文件,瞬间就解析完毕,但网络流一般需要好几秒。

现在对解析时间的需求不高,暂不修改,日后需要对解析时间进行优化。


2. avformat_open_input()解析错误的网络流,该函数长时间不返回

网上关于ffmpeg问题的资料不怎么多啊,只有一些源码分析类的。。。还是特别老的代码。

没办法,看代码吧, 发现ffplay.c中对AVFormatContext的interrupt_callback设置了回调函数。

OK,找到突破点了,我也写了个回调函数,作用是错误计时,超时后让avformat_open_input()返回,

并根据回调函数中设置的标志位判断是否超时。


3. av_read_frame()网络直播流间隔返回AVERROR_EOF

这个问题好奇怪,一直没找到原因。出现该问题的时候是我修改了问题2,设置了回调函数。

不设置回调函数,就跟以前一样正常了。项目催得紧,没深挖该问题,先记一下吧。

最后,对问题2和问题3暂做了折中方案,使用问题2的方式设置回调函数,用来判断流是否正常,

防止阻塞。然后,释放ctx,使用老方法(不设置回调函数)进行流解析。

最后,同步一下http://my.oschina.net/zhangxu0512/blog/181758

上一篇:关于ffmpeg的error返回值
下一篇:Android IOS WebRTC 音视频开发总结(六)-- iOSIntroduce