FFmpeg长时间无响应的解决方法

原创 2016年08月30日 15:40:02

需要解决的问题

1、FFmpeg去连接的时候相机不在线导致avformat_open_input等函数一直死等,造成程序卡死

2、av_read_frame的过程中相机断开连接导致读取码流一直死等

解决方法

打开流媒体之前注册FFmpeg回调函数


int CffmpegUIDlg::interrupt_cb(void *ctx) 
{ 
	CffmpegUIDlg *pThis = (CffmpegUIDlg *)ctx;
	if((av_gettime() - pThis->dwLastFrameRealtime) > 100 * 1000 * 1000){//100s超时退出
		printf("主码流断开");
		return AVERROR_EOF;
	}
	return 0;
} 



pFormatCtx = avformat_alloc_context();

	pFormatCtx->interrupt_callback.opaque = pMainDlg; //C++
	pFormatCtx->interrupt_callback.callback = interrupt_cb;//设置回调函数,否则有可能ffmpeg一直被挂住。 
	AVDictionary* options = nullptr; 
	av_dict_set(&options, "rtsp_transport", "tcp", 0);  //以udp方式打开,如果以tcp方式打开将udp替换为tcp
	av_dict_set(&options, "stimeout", "3000000", 0);  //设置超时断开连接时间

	//打开视频文件
	int nRet = avformat_open_input(&pFormatCtx, filename, NULL, &options);
	if (nRet != 0)
	{
		printf("av open input file failed!\n");
		exit(1);
	}
	if(options != nullptr){
		av_dict_free(&options);
	}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

ffmpeg 常用命令汇总

(经常用到ffmpeg 做一些视频数据的处理转换等,用来做测试,今天总结了一下,参考了网上部分朋友的经验,一起在这里汇总了一下,有需要的朋友可以收藏测试一下,有问题欢迎在下面回帖交流,谢谢;by t...

ffmpeg连接超时与解码超时

ffmpeg超时时间应该有两个,连接超时时间和解码超时时间

av_read_frame 阻塞卡死解决办法

av_read_frame 阻塞卡死解决办法

fmpeg 自定义IO中断 AVFormatContext::interrupt_callback ,AVIOInterruptCB具体处理方法

fmpeg 自定义IO中断 AVFormatContext::interrupt_callback 以前不知道ffmpeg里还可以设置自定义的io interrupt, 赶紧记录起来。C...

FFmpeg长时间无响应的解决方法

ffmpeg读取rtsp码流阻塞的解决方法 相机不在线、相机断开连接ffmpeg卡死的解决方法...

使用ffmpeg的av_read_frame,如何控制连接超时

使用ffmpeg的av_read_frame,如何控制连接超时: http://www.cnblogs.com/pengkunfan/p/3516771.html?utm_source=tuicoo...
  • hyz5525
  • hyz5525
  • 2016年02月29日 13:26
  • 2386

Ffmpeg源代码解析之av_read_frame

av_read_frame从字面意思上来看,就是从内存中读取一帧,但是具体的实现如何?本文是在参考别人的代码的基础上,结合最新的源代码,进行分析研究!如果有不正确的地方,欢迎指正。...

ffmpeg笔记,av_read_frame()阻塞在哪

笔记一下。av_read_frame()阻塞在哪 av_read_frame() -> read_frame_internal() -> ff_read_packet() -> s->iform...

av_read_frame 连续读包出现EOF的问题

昨天发现的问题,在解码ape文件的时候,解码没几回就出现了EOF,但是文件肯定是还没有读完的。一开始以为是解码出现的问题,后来测试其他格式的文件解码没有问题,唯独ape这块儿有这个问题。 今天调试的...

ffmpeg 源代码简单分析 : av_read_frame()

ffmpeg中的av_read_frame()的作用是读取码流中的音频若干帧或者视频一帧。例如,解码视频的时候,每解码一个视频帧,需要先调用 av_read_frame()获得一帧视频的压缩数据,然后...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:FFmpeg长时间无响应的解决方法
举报原因:
原因补充:

(最多只允许输入30个字)