这几天使用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