我正在使用gstreamer在python中构建流应用程序。

应用程序使用tee元素将数据写入rtmpsink和fileink。在理想的环境(本地网络)中,启动和流式传输可以正常工作,但是例如,如果流式传输服务器断开连接怎么办?我试图弄清楚如何保持管道运行,从而在发生错误后继续写入filesink。

我要归档的内容:

  • 至少在流部分(rtmpsink)发生错误之后,我想保留我的存档文件(filesink)。因此,如果发生错误,我们将提供一些备份。
  • 手动重新连接到流服务器。
  • 建立一些机制来检查连接并在可能的情况下重新连接流传输部分(rtmpsink)。

  • 问题:

    是否可以存档我要执行的操作?

    如何将其归档(动态管道/探针/额外元素)?

    任何解释,示例或指向正确方向的信息都将不胜感激。

    注意:

    GST版本:gstreamer 1.3.90(rtmpsink,faac,x264enc)
    作业系统:ubuntu 14.04 LTS
    流服务器:wowza 4.x

    测试应用程序(代码): link
    启动后的管道(确定): link

    rtmpsink错误后的管道(无法写入数据): link
    rtmpsink错误后的日志片段(无法写入数据): link

    最佳答案

    我不确定使用单个管道可以获得的系统可靠性。我建议做的是创建一个两个阶段的过程:

    1) audio -> encode -> tee -> filesink
                              -> shmsink
    
    2) shmsrc -> mux -> rtmpsink
    
    然后为第二个管道创建包装器脚本。这是有关如何在videotestsrc中使用这些元素的示例。请注意,上限确实很重要-它们必须足够详细,才能知道共享内存中即将出现的情况。

    您也可以尝试使用TCP/UDP而不是共享内存的这种方法。我没有安装faac插件,但是管道可能是这样的:

    关于python - Gstreamer,如何从(rtmpsink)错误中恢复,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27905606/

    10-10 20:36