在FFmpeg库中,很多函数没有直接的参数可以设置超时。
那么有哪些函数可以通过设置 AVFormatContext 的 interrupt_callback 来实现超时控制?
-
avformat_open_input: 打开输入文件或流。这个函数会阻塞,尤其是在网络流的情况下,可能会因为等待服务器响应而长时间阻塞。 -
avformat_find_stream_info: 读取流信息。这个函数会尝试读取更多的数据来获得流的详细信息,如果数据源响应缓慢,也会阻塞。 -
av_read_frame: 读取数据包。这个函数会读取下一帧的数据包,如果数据源响应缓慢或者网络连接不稳定,也会阻塞。 -
avio_read: 从输入缓冲区读取数据,这个函数也会阻塞。 -
avio_open: 打开文件或网络资源以进行读取或写入的函数。 -
av_seek_frame或avformat_seek_file用于在媒体流中进行跳转操作 -
等等
总之在打开、关闭、读写网络流的时候都有可能遇到阻塞的问题。
以avformat_find_stream_info函数为例,函数的调用关系如下:
avformat_find_stream_info
read_frame_internal
ff_read_packet
s->iformat->read_packet
read_packet(rpsp.c)
ff_sdp_demuxer.read_packet = ff_rtsp_fetch_packet
ff_rtsp_fetch_packet
read_packet
ff_rtsp_tcp_read_packet
ff_rtsp_read_reply
ffurl_read_complete
retry_transfer_wrapper
ff_check_interrupt
ff_check_interrupt函数用于检测中断回调函数是否应该触发中断操作。
调用ff_check_interrupt函数的函数包括:
async_chec

最低0.47元/天 解锁文章
3718

被折叠的 条评论
为什么被折叠?



