ffmpeg设置avformat_open_input( )超时 -stimeout
ffmpeg用avformat_open_input()解析网络流时,默认是阻塞的。
当遇到解析错误的网络流时,会导致该函数长时间不返回。
为此可以设置ffmpeg的-stimeout 的参数,要注意 -stimeout的单位是us 微妙。
用法就是设置在解析的 url 之前 (这里设置超时为5秒)即:
“ffmpeg -stimeout 5000000 -i rtsp://admin:admin@192.168.7.102:554/h264...........”
或者:
“ffmpeg -stimeout 5000000 -rtsp_transport tcp -i rtsp://admin:12345@172.16.7.166:554/h264.....”
备注:-stimeout 设置在你要解析的url之后是没有作用的。
=============================================
从网络上搜索到的有关资料:
一:
“去看ffmpeg的tcp.c的源代码(会阻塞的网络地址基本都是tcp协议),搜索上面两个关键字,就明白是如何退出了。我之前的文章只说了open的时候阻塞,其实网络环境复杂,有可能在read或write时候断网或阻塞异常。但根基却是在tcp.c这个文件里。把interrupt_callback和timeout设置好了,就可以解决这些问题。”
二:
“ffmpeg的avformat_open_input()默认是阻塞的,用户可以通过设置“ic->flags |= AVFMT_FLAG_NONBLOCK;”设置成非阻塞(通常是不推荐的);或者是设置timeout设置超时时间;或者是设置interrupt_callback定义返回机制。
附一段代码参考下吧。
ic = avformat_alloc_context();
if(ic == NULL){
ERR("error avformat_alloc_context \n");
return -1;
}
ic->interrupt_callback.callback = tvie_decode_interrupt_cb;
ic->interrupt_callback.opaque = handle;
//ic->flags |= AVFMT_FLAG_NONBLOCK;
if(strncmp(handle->params.path, "rtmp:", sizeof("rtmp:")) == 0){
av_dict_set(&opts, "timeout", "6", 0); // in secs
}
else if(strncmp(handle->params.path, "http:", sizeof("http:")) == 0){
av_dict_set(&opts, "timeout", "6000", 0); // in ms
}
err = avformat_open_input(&ic, handle->params.path, NULL, &opts);
”
最新文章
- Git(1)
- openlayers中实现自定冒泡的效果
- maven工程下 读取resource下配置文件
- 把电脑装成ubuntu系统了
- 从 ALAsset 中取出属性
- visualvm 监控 远程 机器上的 Java 程序
- Unity NGUI 3.0.4版本 制作网络版斗地主
- python运维开发之第八天(socket)
- TFS在项目中DevOps落地进程(下)
- 星云測试- Android应用深度体检专业平台
- LIUNX-Centos 7 编译GDAL
- (Java)微信之个人公众账号开发(二)——接收并处理用户消息(下)
- VirtualBox上安装64位系统
- redis(4.0.11)编译安装
- js中的join(),reverse()与 split()函数用法解析
- Java的小实验——各种测试以及说明
- mysql查询出现In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'zhibo.a.id';
- easyui表单校验
- 移动端页面返回,数据不刷新bug解决
- Codeforces Round #403 (Div. 2) B 三分 C dfs
热门文章
- vs2013出现错误提示error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s
- Qt 出现“undefined reference to `vtable for”原因总结
- WMS专业名词解释
- Javascript+CSS实现影像卷帘效果
- Creating a Game with CocosBuilder
- I.MX6 Android 5.1 纯Linux、U-Boot编译
- 转载的,讲解java.util的集合类
- linux之管道
- python操作rabbitmq操作数据(不错)
- jquery ajax 跨域设置