[Bug 771525] gst-rtsp-server: Poor performance with interleaved RTSP due to missing buffer list support and merging of all memories in buffers

GStreamer (GNOME Bugzilla) bugzilla at gnome.org
Thu Oct 11 16:40:40 UTC 2018


https://bugzilla.gnome.org/show_bug.cgi?id=771525

Mathieu Duponchelle <mduponchelle1 at gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
 Attachment #373684|reviewed                    |needs-work
             status|                            |
 Attachment #373684|reviewed                    |needs-work
             status|                            |
 Attachment #373684|reviewed reviewed           |needs-work needs-work
             status|                            |

--- Comment #31 from Mathieu Duponchelle <mduponchelle1 at gmail.com> ---
Review of attachment 373684:
 --> (https://bugzilla.gnome.org/review?bug=771525&attachment=373684)

This will require updating sections.txt, lgtm apart from a few comments

::: gst/rtsp-server/rtsp-client.c
@@ +1187,3 @@

+static gboolean
+do_send_data_list (GstBufferList * buffer_list, guint8 channel,

The implementation seems similar to what rtsp-stream-transport will do if not
callback was provided, is this mostly a placeholder for future extension?

::: gst/rtsp-server/rtsp-media.c
@@ +2187,3 @@
     g_object_set (appsrc, "block", TRUE, "format", GST_FORMAT_TIME, "is-live",
+        TRUE, "emit-signals", FALSE, NULL);
+    g_object_set (appsink, "sync", FALSE, "async", FALSE, "emit-signals",

emit-signals is false by default for appsink

::: gst/rtsp-server/rtsp-stream-transport.c
@@ +219,3 @@
+ *
+ * Install callbacks that will be called when data for a stream should be sent
+ * to a client. This is usually used when sending RTP/RTCP over TCP.

Since:

@@ -531,0 +566,7 @@
+/**
+ * gst_rtsp_stream_transport_send_rtp_list:
+ * @trans: a #GstRTSPStreamTransport
... 4 more ...

Since:

@@ +614,3 @@
+ *
+ * Send @buffer_list to the installed RTCP callback for @trans.
+ *

Since:

::: gst/rtsp-server/rtsp-stream.c
@@ +2474,3 @@
+        send_ret = gst_rtsp_stream_transport_send_rtp (tr, buffer);
+      if (buffer_list)
+        send_ret = gst_rtsp_stream_transport_send_rtp_list (tr, buffer_list);

this will ignore any potential error if the sample contained both a buffer and
a buffer list, not sure if that is allowed to happen in practice

@@ +3332,3 @@
       /* make appsink */
       priv->appsink[i] = gst_element_factory_make ("appsink", NULL);
+      g_object_set (priv->appsink[i], "emit-signals", FALSE, "buffer-list",

emit-signals is FALSE by default in appsink

::: gst/rtsp-sink/gstrtspclientsink.c
@@ +3853,3 @@
+static gboolean
+do_send_data_list (GstBufferList * buffer_list, guint8 channel,
+    GstRTSPStreamContext * context)

Same comment as the do_send_list in rtsp-client

--- Comment #32 from Mathieu Duponchelle <mduponchelle1 at gmail.com> ---
Review of attachment 373684:
 --> (https://bugzilla.gnome.org/review?bug=771525&attachment=373684)

This will require updating sections.txt, lgtm apart from a few comments

::: gst/rtsp-server/rtsp-client.c
@@ +1187,3 @@

+static gboolean
+do_send_data_list (GstBufferList * buffer_list, guint8 channel,

The implementation seems similar to what rtsp-stream-transport will do if not
callback was provided, is this mostly a placeholder for future extension?

::: gst/rtsp-server/rtsp-media.c
@@ +2187,3 @@
     g_object_set (appsrc, "block", TRUE, "format", GST_FORMAT_TIME, "is-live",
+        TRUE, "emit-signals", FALSE, NULL);
+    g_object_set (appsink, "sync", FALSE, "async", FALSE, "emit-signals",

emit-signals is false by default for appsink

::: gst/rtsp-server/rtsp-stream-transport.c
@@ +219,3 @@
+ *
+ * Install callbacks that will be called when data for a stream should be sent
+ * to a client. This is usually used when sending RTP/RTCP over TCP.

Since:

@@ -531,0 +566,7 @@
+/**
+ * gst_rtsp_stream_transport_send_rtp_list:
+ * @trans: a #GstRTSPStreamTransport
... 4 more ...

Since:

@@ +614,3 @@
+ *
+ * Send @buffer_list to the installed RTCP callback for @trans.
+ *

Since:

::: gst/rtsp-server/rtsp-stream.c
@@ +2474,3 @@
+        send_ret = gst_rtsp_stream_transport_send_rtp (tr, buffer);
+      if (buffer_list)
+        send_ret = gst_rtsp_stream_transport_send_rtp_list (tr, buffer_list);

this will ignore any potential error if the sample contained both a buffer and
a buffer list, not sure if that is allowed to happen in practice

@@ +3332,3 @@
       /* make appsink */
       priv->appsink[i] = gst_element_factory_make ("appsink", NULL);
+      g_object_set (priv->appsink[i], "emit-signals", FALSE, "buffer-list",

emit-signals is FALSE by default in appsink

::: gst/rtsp-sink/gstrtspclientsink.c
@@ +3853,3 @@
+static gboolean
+do_send_data_list (GstBufferList * buffer_list, guint8 channel,
+    GstRTSPStreamContext * context)

Same comment as the do_send_list in rtsp-client

--- Comment #33 from Mathieu Duponchelle <mduponchelle1 at gmail.com> ---
Review of attachment 373684:
 --> (https://bugzilla.gnome.org/review?bug=771525&attachment=373684)

This will require updating sections.txt, lgtm apart from a few comments

::: gst/rtsp-server/rtsp-client.c
@@ +1187,3 @@

+static gboolean
+do_send_data_list (GstBufferList * buffer_list, guint8 channel,

The implementation seems similar to what rtsp-stream-transport will do if not
callback was provided, is this mostly a placeholder for future extension?

::: gst/rtsp-server/rtsp-media.c
@@ +2187,3 @@
     g_object_set (appsrc, "block", TRUE, "format", GST_FORMAT_TIME, "is-live",
+        TRUE, "emit-signals", FALSE, NULL);
+    g_object_set (appsink, "sync", FALSE, "async", FALSE, "emit-signals",

emit-signals is false by default for appsink

::: gst/rtsp-server/rtsp-stream-transport.c
@@ +219,3 @@
+ *
+ * Install callbacks that will be called when data for a stream should be sent
+ * to a client. This is usually used when sending RTP/RTCP over TCP.

Since:

@@ -531,0 +566,7 @@
+/**
+ * gst_rtsp_stream_transport_send_rtp_list:
+ * @trans: a #GstRTSPStreamTransport
... 4 more ...

Since:

@@ +614,3 @@
+ *
+ * Send @buffer_list to the installed RTCP callback for @trans.
+ *

Since:

::: gst/rtsp-server/rtsp-stream.c
@@ +2474,3 @@
+        send_ret = gst_rtsp_stream_transport_send_rtp (tr, buffer);
+      if (buffer_list)
+        send_ret = gst_rtsp_stream_transport_send_rtp_list (tr, buffer_list);

this will ignore any potential error if the sample contained both a buffer and
a buffer list, not sure if that is allowed to happen in practice

@@ +3332,3 @@
       /* make appsink */
       priv->appsink[i] = gst_element_factory_make ("appsink", NULL);
+      g_object_set (priv->appsink[i], "emit-signals", FALSE, "buffer-list",

emit-signals is FALSE by default in appsink

::: gst/rtsp-sink/gstrtspclientsink.c
@@ +3853,3 @@
+static gboolean
+do_send_data_list (GstBufferList * buffer_list, guint8 channel,
+    GstRTSPStreamContext * context)

Same comment as the do_send_list in rtsp-client

--- Comment #34 from Mathieu Duponchelle <mduponchelle1 at gmail.com> ---
Review of attachment 373684:
 --> (https://bugzilla.gnome.org/review?bug=771525&attachment=373684)

This will require updating sections.txt, lgtm apart from a few comments

::: gst/rtsp-server/rtsp-client.c
@@ +1187,3 @@

+static gboolean
+do_send_data_list (GstBufferList * buffer_list, guint8 channel,

The implementation seems similar to what rtsp-stream-transport will do if not
callback was provided, is this mostly a placeholder for future extension?

::: gst/rtsp-server/rtsp-media.c
@@ +2187,3 @@
     g_object_set (appsrc, "block", TRUE, "format", GST_FORMAT_TIME, "is-live",
+        TRUE, "emit-signals", FALSE, NULL);
+    g_object_set (appsink, "sync", FALSE, "async", FALSE, "emit-signals",

emit-signals is false by default for appsink

::: gst/rtsp-server/rtsp-stream-transport.c
@@ +219,3 @@
+ *
+ * Install callbacks that will be called when data for a stream should be sent
+ * to a client. This is usually used when sending RTP/RTCP over TCP.

Since:

@@ -531,0 +566,7 @@
+/**
+ * gst_rtsp_stream_transport_send_rtp_list:
+ * @trans: a #GstRTSPStreamTransport
... 4 more ...

Since:

@@ +614,3 @@
+ *
+ * Send @buffer_list to the installed RTCP callback for @trans.
+ *

Since:

::: gst/rtsp-server/rtsp-stream.c
@@ +2474,3 @@
+        send_ret = gst_rtsp_stream_transport_send_rtp (tr, buffer);
+      if (buffer_list)
+        send_ret = gst_rtsp_stream_transport_send_rtp_list (tr, buffer_list);

this will ignore any potential error if the sample contained both a buffer and
a buffer list, not sure if that is allowed to happen in practice

@@ +3332,3 @@
       /* make appsink */
       priv->appsink[i] = gst_element_factory_make ("appsink", NULL);
+      g_object_set (priv->appsink[i], "emit-signals", FALSE, "buffer-list",

emit-signals is FALSE by default in appsink

::: gst/rtsp-sink/gstrtspclientsink.c
@@ +3853,3 @@
+static gboolean
+do_send_data_list (GstBufferList * buffer_list, guint8 channel,
+    GstRTSPStreamContext * context)

Same comment as the do_send_list in rtsp-client

--- Comment #35 from Mathieu Duponchelle <mduponchelle1 at gmail.com> ---
Review of attachment 373684:
 --> (https://bugzilla.gnome.org/review?bug=771525&attachment=373684)

This will require updating sections.txt, lgtm apart from a few comments

::: gst/rtsp-server/rtsp-client.c
@@ +1187,3 @@

+static gboolean
+do_send_data_list (GstBufferList * buffer_list, guint8 channel,

The implementation seems similar to what rtsp-stream-transport will do if not
callback was provided, is this mostly a placeholder for future extension?

::: gst/rtsp-server/rtsp-media.c
@@ +2187,3 @@
     g_object_set (appsrc, "block", TRUE, "format", GST_FORMAT_TIME, "is-live",
+        TRUE, "emit-signals", FALSE, NULL);
+    g_object_set (appsink, "sync", FALSE, "async", FALSE, "emit-signals",

emit-signals is false by default for appsink

::: gst/rtsp-server/rtsp-stream-transport.c
@@ +219,3 @@
+ *
+ * Install callbacks that will be called when data for a stream should be sent
+ * to a client. This is usually used when sending RTP/RTCP over TCP.

Since:

@@ -531,0 +566,7 @@
+/**
+ * gst_rtsp_stream_transport_send_rtp_list:
+ * @trans: a #GstRTSPStreamTransport
... 4 more ...

Since:

@@ +614,3 @@
+ *
+ * Send @buffer_list to the installed RTCP callback for @trans.
+ *

Since:

::: gst/rtsp-server/rtsp-stream.c
@@ +2474,3 @@
+        send_ret = gst_rtsp_stream_transport_send_rtp (tr, buffer);
+      if (buffer_list)
+        send_ret = gst_rtsp_stream_transport_send_rtp_list (tr, buffer_list);

this will ignore any potential error if the sample contained both a buffer and
a buffer list, not sure if that is allowed to happen in practice

@@ +3332,3 @@
       /* make appsink */
       priv->appsink[i] = gst_element_factory_make ("appsink", NULL);
+      g_object_set (priv->appsink[i], "emit-signals", FALSE, "buffer-list",

emit-signals is FALSE by default in appsink

::: gst/rtsp-sink/gstrtspclientsink.c
@@ +3853,3 @@
+static gboolean
+do_send_data_list (GstBufferList * buffer_list, guint8 channel,
+    GstRTSPStreamContext * context)

Same comment as the do_send_list in rtsp-client

--- Comment #36 from Mathieu Duponchelle <mduponchelle1 at gmail.com> ---
Review of attachment 373684:
 --> (https://bugzilla.gnome.org/review?bug=771525&attachment=373684)

This will require updating sections.txt, lgtm apart from a few comments

::: gst/rtsp-server/rtsp-client.c
@@ +1187,3 @@

+static gboolean
+do_send_data_list (GstBufferList * buffer_list, guint8 channel,

The implementation seems similar to what rtsp-stream-transport will do if not
callback was provided, is this mostly a placeholder for future extension?

::: gst/rtsp-server/rtsp-media.c
@@ +2187,3 @@
     g_object_set (appsrc, "block", TRUE, "format", GST_FORMAT_TIME, "is-live",
+        TRUE, "emit-signals", FALSE, NULL);
+    g_object_set (appsink, "sync", FALSE, "async", FALSE, "emit-signals",

emit-signals is false by default for appsink

::: gst/rtsp-server/rtsp-stream-transport.c
@@ +219,3 @@
+ *
+ * Install callbacks that will be called when data for a stream should be sent
+ * to a client. This is usually used when sending RTP/RTCP over TCP.

Since:

@@ -531,0 +566,7 @@
+/**
+ * gst_rtsp_stream_transport_send_rtp_list:
+ * @trans: a #GstRTSPStreamTransport
... 4 more ...

Since:

@@ +614,3 @@
+ *
+ * Send @buffer_list to the installed RTCP callback for @trans.
+ *

Since:

::: gst/rtsp-server/rtsp-stream.c
@@ +2474,3 @@
+        send_ret = gst_rtsp_stream_transport_send_rtp (tr, buffer);
+      if (buffer_list)
+        send_ret = gst_rtsp_stream_transport_send_rtp_list (tr, buffer_list);

this will ignore any potential error if the sample contained both a buffer and
a buffer list, not sure if that is allowed to happen in practice

@@ +3332,3 @@
       /* make appsink */
       priv->appsink[i] = gst_element_factory_make ("appsink", NULL);
+      g_object_set (priv->appsink[i], "emit-signals", FALSE, "buffer-list",

emit-signals is FALSE by default in appsink

::: gst/rtsp-sink/gstrtspclientsink.c
@@ +3853,3 @@
+static gboolean
+do_send_data_list (GstBufferList * buffer_list, guint8 channel,
+    GstRTSPStreamContext * context)

Same comment as the do_send_list in rtsp-client

--- Comment #37 from Mathieu Duponchelle <mduponchelle1 at gmail.com> ---
Review of attachment 373684:
 --> (https://bugzilla.gnome.org/review?bug=771525&attachment=373684)

This will require updating sections.txt, lgtm apart from a few comments

::: gst/rtsp-server/rtsp-client.c
@@ +1187,3 @@

+static gboolean
+do_send_data_list (GstBufferList * buffer_list, guint8 channel,

The implementation seems similar to what rtsp-stream-transport will do if not
callback was provided, is this mostly a placeholder for future extension?

::: gst/rtsp-server/rtsp-media.c
@@ +2187,3 @@
     g_object_set (appsrc, "block", TRUE, "format", GST_FORMAT_TIME, "is-live",
+        TRUE, "emit-signals", FALSE, NULL);
+    g_object_set (appsink, "sync", FALSE, "async", FALSE, "emit-signals",

emit-signals is false by default for appsink

::: gst/rtsp-server/rtsp-stream-transport.c
@@ +219,3 @@
+ *
+ * Install callbacks that will be called when data for a stream should be sent
+ * to a client. This is usually used when sending RTP/RTCP over TCP.

Since:

@@ -531,0 +566,7 @@
+/**
+ * gst_rtsp_stream_transport_send_rtp_list:
+ * @trans: a #GstRTSPStreamTransport
... 4 more ...

Since:

@@ +614,3 @@
+ *
+ * Send @buffer_list to the installed RTCP callback for @trans.
+ *

Since:

::: gst/rtsp-server/rtsp-stream.c
@@ +2474,3 @@
+        send_ret = gst_rtsp_stream_transport_send_rtp (tr, buffer);
+      if (buffer_list)
+        send_ret = gst_rtsp_stream_transport_send_rtp_list (tr, buffer_list);

this will ignore any potential error if the sample contained both a buffer and
a buffer list, not sure if that is allowed to happen in practice

@@ +3332,3 @@
       /* make appsink */
       priv->appsink[i] = gst_element_factory_make ("appsink", NULL);
+      g_object_set (priv->appsink[i], "emit-signals", FALSE, "buffer-list",

emit-signals is FALSE by default in appsink

::: gst/rtsp-sink/gstrtspclientsink.c
@@ +3853,3 @@
+static gboolean
+do_send_data_list (GstBufferList * buffer_list, guint8 channel,
+    GstRTSPStreamContext * context)

Same comment as the do_send_list in rtsp-client

-- 
You are receiving this mail because:
You are the QA Contact for the bug.
You are the assignee for the bug.


More information about the gstreamer-bugs mailing list