ffmpeg拉取RTSP流 正常操作不会有问题 但是如果途中,
把RTSP的流断了, 发现 会卡死 在avformat_find_stream_info函数中,
把这个函数注释掉的话就会卡死在av_read_frame中 ,大概需要30m才会返回
网上搜了下 无论是 设置超时方法 还是 回调函数都不管用,不知道为什么。
经过测试实际的断流有两种情况:
1.是RTSP服务断了 ,这种情况 open_input 那里会返回失败,比较好处理
2.是RTSP服务没断,但是没有视频流了 这种情况会导致open_input成功,但是会导致程序一直卡死在av_read_frame函数里面 具体网上可以搜 FFMpeg源码里面就这么写了,
大体上有两种方法 设置超时处理 第一种是 通过av_dict_set函数设置timeout超时时间,但是我这么试了没有效果,所以只能是第二种方法,设置callback 经过测试 这种callback机制可以实现
具体原因下面FFmpeg代码这么写的
static inline int retry_transfer_wrapper(URLContext *h, uint8_t *buf,
int size, int size_min,
int (*transfer_func)(URLContext *h,
uint8_t *buf,
int size))
{
int ret, len;
int fast_retries = 5;

本文探讨了ffmpeg在处理RTSP流时遇到断流问题,如何通过设置超时时间和回调函数解决卡死问题,重点介绍了retry_transfer_wrapper函数和ff_check_interrupt的作用。

1万+

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



