Gstreamer,如何从(rtmpsink)错误中恢复

时间:2015-01-12 15:39:58

标签: python error-handling rtmp gstreamer

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

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

我想要存档的内容:

  1. 至少我想在流部分(rtmpsink)发生错误后保留我的存档文件(filesink)。如果发生错误,我们会备份一些备份。
  2. 手动重新连接到流媒体服务器。
  3. 构建一些机制来检查连接并尽可能重新连接流媒体部分(rtmpsink)。
  4. 问题(S):

    是否可以归档我正在尝试做的事情?

    如何存档(动态管道/探测/额外元素)?

    非常感谢任何解释,示例或指向正确的方向。

    注意:

    Gst版本: gstreamer 1.3.90(rtmpsink,faac,x264enc)
    OS: ubuntu 14.04 LTS
    流媒体服务器: wowza 4.x

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

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

1 个答案:

答案 0 :(得分:1)

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

1) audio -> encode -> tee -> filesink
                          -> shmsink 

2) shmsrc -> mux -> rtmpsink

然后为第二个管道创建一个包装器脚本。以下是如何将这些元素与videotestsrc一起使用的示例。请注意,上限非常重要 - 它们必须足够详细,以了解共享内存中的内容。

  

gst-launch-1.0 videotestsrc! tee name = t!排队!视频转换!   ximagesink t。 ! video / x-raw,width = 400,height = 400,format = BGRA! shmsink   wait-for-connection = false socket-path = / tmp / shr

     

gst-launch-1.0 shmsrc socket-path = / tmp / shr!   video / x-raw,width = 400,height = 400,format = BGRA,framerate = 30/1!   视频转换! ximagesink

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

  

音频 - > faac - > rtpmp4apay - > udpsink host = localhost port = 1919

     

udpsrc port = 1919 - > rtpmp4adepay - > mux - > rtmpsink

相关问题