FFMPEG:如何使用相同的编码独立地流式传输到多个输出

时间:2017-01-26 18:02:03

标签: ffmpeg

我的信息流现在如何运作:

输入: 切换程序,捕获相机和屏幕截图,并制作不同的布局。软件中的一个窗口是在ffmpeg命令行中用作输入的窗口。

输出: - Facebook(示例) - Youtube(例子)

一开始,我认为可能更好地创建两个不同的ffmpeg进程,以独立地流向每个输出。问题是它使用了太多的CPU。 答案就是编码一次并将其复制到不同的输出。好的,很好,它解决了问题,但如果其中一个输出失败怎么办?两者都失败了。

我正在尝试将一个编码转换为两个输出,如果其中一个输出不可用,则另一个保持良好状态。

有人有任何想法解决它吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

我找到了@LordNeckbeard所说的解决方案。

以下是一个示例代码:

  1. 保存本地文件
  2. 流式传输到您的服务器
  3. 流式传输到Facebook服务器
  4. 每个流独立于另一个流,并且如果发生类似互联网连接的事情,将尝试每隔一秒独立恢复一次 - 将在本地保存并在互联网访问回来时尝试恢复 - 或者目标服务器尚未可用且何时回来后它将重启流媒体流程):

    -i ... -f tee "[onfail=ignore]'C:\Users\blablabla.mp4'|
    [f=fifo:fifo_format=flv:drop_pkts_on_overflow=1:attempt_recovery=1:recovery_wait_time=1]rtmp://yourServer...|
    [f=fifo:fifo_format=flv:drop_pkts_on_overflow=1:attempt_recovery=1:recovery_wait_time=1]"rtmp://facebook..."
    

答案 1 :(得分:2)

使用带有onfail选项的tee muxer并输出本地文件的示例:

ffmpeg -i input -map 0 -c:v libx264 -c:a aac -maxrate 1000k -bufsize 2000k -g 50 -f tee "[f=flv:onfail=ignore]rtmp://facebook|[f=flv:onfail=ignore]rtmp://youtube|[f=segment:strftime=1:segment_time=60]local_%F_%H-%M-%S.mkv"

另见: