取消/中止GStreamer tcpclientsink超时的方法

时间:2013-12-12 16:26:38

标签: gstreamer

我正在开发一个使用GStreamer通过tcpclientsink元素发送Motion JPEG视频流的应用程序。该应用程序工作正常,除非我通过切换从有线到无线或无线到有线的连接来中断网络。当发生这种情况时,看起来tcpclientsink元素在响应消息之前等待15分钟。如果我在此期间尝试关闭应用程序,那将成为一个问题。这是我观察到的:

  1. 使用tcpclientsink作为接收器,使用GStreamer启动Motion JPEG媒体流。推送视频的代码在自己的主题中运行。
  2. 媒体流正在运行时,请通过切换网络连接类型来中断连接。
  3. 开始关闭应用程序。致电gst_bus_post(bus, gst_message_new_eos(NULL))。这似乎被忽略了。
  4. 调用pthread_join以等待视频线程退出。它最多只能响应15分钟。
  5. 当我查看GST_DEBUG消息时,我可以看到GStreamer tcpclientsink在写入时遇到错误。它在重试时显然等了15分钟。

    有没有办法可以中止或取消与tcpclientsink相关的超时?我可以发送不同的消息以使接收器立即终止吗?

    我知道如果GStreamer没有尽可能快地响应,我可以使用pthread_timedjoin_nppthread_cancel来杀死视频线程,但我希望让GS​​treamer尽可能干净地退出。< / p>

    更新

    我应该提到我正在使用GStreamer 0.10.36。不幸的是,这可能只是该版本的错误。我看到处理在1.2.x中发生了很大的变化。我仍然希望我正在使用的版本有一个解决方法。

    我能够使用gst-launch-0.10重新创建此问题。这可能更多 比必要复杂,但它对我有用:

    启动三个脚本:

    • 以下内容传递消费者和生产者之间的数据:

      而[1] 做   gst-launch-0.10 tcpserversrc host = 0 port = $ {PORT_IN}! jpegdec! jpegenc! tcpserversink port = $ {PORT_OUT} 完成

    • 以下是消费者的脚本

      gst-launch-0.10 tcpclientsrc host = $ {IP_ADDR} port = $ {PORT_OUT}! jpegdec! ffmpegcolorspace! ximagesink

    • 以下是制作人

      的脚本

      gst-launch-0.10 ximagesrc!视频! video / x-raw-rgb,framerate = 1/1,width = 640,height = 320! ffmpegcolorspace! jpegenc ! tcpclientsink host = $ {IP_ADDR} port = $ {PORT_IN}

    我在一台机器上运行前两个脚本,在第二台机器上运行第三个脚本 机。当我在第二台机器上切换网络连接时 有线连接到无线,tcpclientsink报告了15分钟 错误。

0 个答案:

没有答案