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