gst-plugins-bad: rtmpsink: don't block the main thread with RTMP_Connect

Alessandro Decina alessandro at kemper.freedesktop.org
Mon Sep 12 02:23:34 PDT 2011


Module: gst-plugins-bad
Branch: master
Commit: f33b78abd16bab4a53f30bbbb7e5b9ecef5f1f65
URL:    http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=f33b78abd16bab4a53f30bbbb7e5b9ecef5f1f65

Author: Alessandro Decina <alessandro.d at gmail.com>
Date:   Mon Aug 29 08:00:22 2011 +0200

rtmpsink: don't block the main thread with RTMP_Connect

Move the RTMP_Connect call from the main thread (::start) to the streaming
thread (::render).

---

 ext/rtmp/gstrtmpsink.c |   29 +++++++++++++++--------------
 1 files changed, 15 insertions(+), 14 deletions(-)

diff --git a/ext/rtmp/gstrtmpsink.c b/ext/rtmp/gstrtmpsink.c
index e3933b1..90a1a79 100644
--- a/ext/rtmp/gstrtmpsink.c
+++ b/ext/rtmp/gstrtmpsink.c
@@ -164,20 +164,6 @@ gst_rtmp_sink_start (GstBaseSink * basesink)
   /* Mark this as an output connection */
   RTMP_EnableWrite (sink->rtmp);
 
-  /* open the connection */
-  if (!RTMP_IsConnected (sink->rtmp)) {
-    if (!RTMP_Connect (sink->rtmp, NULL) || !RTMP_ConnectStream (sink->rtmp, 0)) {
-      GST_ELEMENT_ERROR (sink, RESOURCE, OPEN_WRITE, (NULL),
-          ("Could not connect to RTMP stream \"%s\" for writing", sink->uri));
-      RTMP_Free (sink->rtmp);
-      sink->rtmp = NULL;
-      g_free (sink->rtmp_uri);
-      sink->rtmp_uri = NULL;
-      return FALSE;
-    }
-    GST_DEBUG_OBJECT (sink, "Opened connection to %s", sink->rtmp_uri);
-  }
-
   sink->first = TRUE;
 
   return TRUE;
@@ -210,6 +196,21 @@ gst_rtmp_sink_render (GstBaseSink * bsink, GstBuffer * buf)
   GstBuffer *reffed_buf = NULL;
 
   if (sink->first) {
+    /* open the connection */
+    if (!RTMP_IsConnected (sink->rtmp)) {
+      if (!RTMP_Connect (sink->rtmp, NULL)
+          || !RTMP_ConnectStream (sink->rtmp, 0)) {
+        GST_ELEMENT_ERROR (sink, RESOURCE, OPEN_WRITE, (NULL),
+            ("Could not connect to RTMP stream \"%s\" for writing", sink->uri));
+        RTMP_Free (sink->rtmp);
+        sink->rtmp = NULL;
+        g_free (sink->rtmp_uri);
+        sink->rtmp_uri = NULL;
+        return GST_FLOW_ERROR;
+      }
+      GST_DEBUG_OBJECT (sink, "Opened connection to %s", sink->rtmp_uri);
+    }
+
     /* FIXME: Parse the first buffer and see if it contains a header plus a packet instead
      * of just assuming it's only the header */
     GST_LOG_OBJECT (sink, "Caching first buffer of size %d for concatenation",



More information about the gstreamer-commits mailing list