ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ffmpge在RTMP推流时使用av_interleaved_write_frame/av_write_frame函数时阻塞,设置超时时间的方法

2021-04-15 19:03:11  阅读:465  来源: 互联网

标签:rw avio frame write 参数 timeout av 推流时


在使用ffmpeg进行推流时,有时网络连接会因为种种原因断开,这时av_interleaved_write_frame/av_write_frame函数就会阻塞长达15分钟左右,这怎么能行,下面就说一下如何设置最长的阻塞时间。

在使用命令行推流时

在使用命令行推流时,需要添加 -rw_timeout参数,单位微秒,如下,

更改前的命令

./ffmpeg  -i rtsp://admin:12345@192.168.31.113:8554/0 -c:v copy -f flv  rtmp://r.ossrs.net/live/xxx

更改后的命令

./ffmpeg  -i rtsp://admin:12345@192.168.31.113:8554/0 -c:v copy -rw_timeout 1000000  -f flv  rtmp://r.ossrs.net/live/xxx

在使用c/c++程序推流时

在使用c/c++程序推流时,添加超时参数的方法我找了好久,最后发现是需要通过avio_open2传入rw_timeout参数或设置回调函数。

简单介绍一下avio_open2参数的含义:

  • 前三个参数和avio_open的参数一样;
  • 第四个int_cb:是超时的回调函数,在回调函数里如果return 1则停止阻塞,return 0则继续阻塞,可以实现一些比较复杂的超时设置,具体使用方法自己研究吧,我这里主要说一下使用第五个参数的方法;
  • 第五个options里面可配置一些专用的选项,通过av_dict_set函数设置,我们可以通过这参数将rw_timeout参数传入,具体使用方法如下:
AVDictionary *format_opts = NULL;
av_dict_set(&format_opts, "rw_timeout",  "1000000", 0); //设置超时时间,单位mcs
avio_open2( &octx->pb, RTMP_OUTPUT_URL , AVIO_FLAG_WRITE , NULL , &format_opts);

format_opts所占据的空间在avio_open2返回后会自动释放,不需要我们手动free。

标签:rw,avio,frame,write,参数,timeout,av,推流时
来源: https://blog.csdn.net/Kami_Jiang/article/details/115733588

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有