Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
FFMPEG-流到RTMP输出,同时保存到MP4-重新连接_Ffmpeg_Rtmp - Fatal编程技术网

FFMPEG-流到RTMP输出,同时保存到MP4-重新连接

FFMPEG-流到RTMP输出,同时保存到MP4-重新连接,ffmpeg,rtmp,Ffmpeg,Rtmp,我正在尝试设置一个管道,在这里我可以获取输入并保存到MP4,同时流式传输到RTMP服务器 到目前为止,我已经能够使用一个tee过滤器来实现这一点,还可以使用onfail=ignore来确保管道在RTMP/记录失败的情况下保持正常 太棒了 但是,我不希望RTMP放弃掉或断开连接,我希望它继续尝试重新连接并恢复流 我不认为FFMPEG有这样的功能,所以我需要用bash脚本或其他东西来编写它,以便在数据丢失时继续重新启动进程 我只是不知道如何做到这一点 以前有人有什么想法或解决过这个问题吗 谢谢 Ma

我正在尝试设置一个管道,在这里我可以获取输入并保存到MP4,同时流式传输到RTMP服务器

到目前为止,我已经能够使用一个tee过滤器来实现这一点,还可以使用onfail=ignore来确保管道在RTMP/记录失败的情况下保持正常

太棒了

但是,我不希望RTMP放弃掉或断开连接,我希望它继续尝试重新连接并恢复流

我不认为FFMPEG有这样的功能,所以我需要用bash脚本或其他东西来编写它,以便在数据丢失时继续重新启动进程

我只是不知道如何做到这一点

以前有人有什么想法或解决过这个问题吗

谢谢


Matt使用fifo格式,可以重新连接

我的工作示例:

-f fifo -fifo_format flv \
-drop_pkts_on_overflow 1 -attempt_recovery 1 -recover_any_error 1 \
rtmp://bla.bla/bla

+1表示接受的答案,但:

在FFmpeg中,编码器根据选定的输出格式自动检测其参数。这里的输出格式未知(这对于“fifo”和“tee”等格式是正确的),因此编码器不会像使用“flv”输出格式那样设置所有参数

例如:Wowza流媒体引擎将在尝试发布该RTMP流时报告错误:

H264Utils.decodeAVCC : java.lang.ArrayIndexOutOfBoundsException: 9
为了克服这个问题,您应该添加
-flags+global_header
选项。
这应该有助于解决@Matt的问题。

谢谢你,Ipor。经过一番反复试验和谷歌搜索后,我终于能够做到这一点。非常感谢!不幸的是,虽然这样做的工作,它似乎打破了HLS播放媒体服务器上。当使用FIFO缓冲区时,它传输的元数据的某些内容会被破坏。