【问题标题】:GStreamer RTSP Server with TLS Example Fails带有 TLS 示例的 GStreamer RTSP 服务器失败
【发布时间】:2016-01-28 20:41:11
【问题描述】:

我正在尝试使用 GStreamer 1.7.1 启动具有身份验证和 TLS 支持的 RTSP 服务器。我使用的代码几乎与file from source 相同,除了#define WITH_AUTH#define WITH_TLS

在示例目录中编译后,我使用./test-video 启动服务器。

要访问流,我使用终端中的以下行从同一台机器连接: gst-launch-1.0 rtspsrc location=rtsps://127.0.0.1:8554/test user-id=user user-pw=password tls-validation-flags=generic-error ! rtph264depay ! avdec_h264 ! videoconvert ! osxvideosink

一旦我尝试启动客户端,服务器就会输出这些消息:

0:00:03.217216000 26896 0x7fe1248159e0 ERROR             rtspclient rtsp-client.c:733:find_media: client 0x7fe1240208e0: not authorized to see factory path /test
0:00:03.217248000 26896 0x7fe1248159e0 ERROR             rtspclient rtsp-client.c:2276:handle_describe_request: client 0x7fe1240208e0: no media

(test-video:26896): GLib-GObject-CRITICAL **: g_object_set: assertion 'G_IS_OBJECT (object)' failed

(test-video:26896): GStreamer-CRITICAL **: gst_object_ref: assertion 'object != NULL' failed

(test-video:26896): GStreamer-CRITICAL **: gst_element_get_request_pad: assertion 'GST_IS_ELEMENT (element)' failed

(test-video:26896): GStreamer-CRITICAL **: gst_object_unref: assertion 'object != NULL' failed

(test-video:26896): GLib-GObject-CRITICAL **: g_object_set: assertion 'G_IS_OBJECT (object)' failed

(test-video:26896): GStreamer-CRITICAL **: gst_object_ref: assertion 'object != NULL' failed

(test-video:26896): GStreamer-CRITICAL **: gst_element_get_request_pad: assertion 'GST_IS_ELEMENT (element)' failed

(test-video:26896): GStreamer-CRITICAL **: gst_object_unref: assertion 'object != NULL' failed

(test-video:26896): GLib-GObject-WARNING **: invalid (NULL) pointer instance

(test-video:26896): GLib-GObject-CRITICAL **: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed

(test-video:26896): GStreamer-CRITICAL **: gst_object_ref: assertion 'object != NULL' failed

(test-video:26896): GLib-GObject-CRITICAL **: g_object_set: assertion 'G_IS_OBJECT (object)' failed

(test-video:26896): GStreamer-CRITICAL **: gst_object_ref: assertion 'object != NULL' failed

(test-video:26896): GStreamer-CRITICAL **: gst_element_get_request_pad: assertion 'GST_IS_ELEMENT (element)' failed

(test-video:26896): GStreamer-CRITICAL **: gst_object_unref: assertion 'object != NULL' failed

(test-video:26896): GLib-GObject-CRITICAL **: g_object_set: assertion 'G_IS_OBJECT (object)' failed

(test-video:26896): GStreamer-CRITICAL **: gst_object_ref: assertion 'object != NULL' failed

(test-video:26896): GStreamer-CRITICAL **: gst_element_get_request_pad: assertion 'GST_IS_ELEMENT (element)' failed

(test-video:26896): GStreamer-CRITICAL **: gst_object_unref: assertion 'object != NULL' failed

(test-video:26896): GLib-GObject-WARNING **: invalid (NULL) pointer instance

(test-video:26896): GLib-GObject-CRITICAL **: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed

(test-video:26896): GStreamer-CRITICAL **: gst_object_ref: assertion 'object != NULL' failed

而客户端的输出是:

Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Progress: (open) Opening Stream
Progress: (connect) Connecting to rtsps://127.0.0.1:8554/test
Progress: (open) Retrieving server options
Progress: (open) Retrieving media info

** (gst-launch-1.0:26910): CRITICAL **: gst_rtsp_message_take_header: assertion 'value != NULL' failed
Progress: (request) SETUP stream 0

(gst-launch-1.0:26910): GLib-GObject-WARNING **: invalid (NULL) pointer instance

(gst-launch-1.0:26910): GLib-GObject-CRITICAL **: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed

(gst-launch-1.0:26910): GStreamer-CRITICAL **: gst_object_ref: assertion 'object != NULL' failed

(gst-launch-1.0:26910): GLib-GObject-WARNING **: invalid (NULL) pointer instance

(gst-launch-1.0:26910): GLib-GObject-CRITICAL **: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed

(gst-launch-1.0:26910): GStreamer-CRITICAL **: gst_object_ref: assertion 'object != NULL' failed

(gst-launch-1.0:26910): GLib-GObject-WARNING **: gtype.c:4272: type id '0' is invalid

(gst-launch-1.0:26910): GLib-GObject-WARNING **: can't peek value table for type '<invalid>' which is not currently referenced

(gst-launch-1.0:26910): GLib-GObject-WARNING **: gvalue.c:184: cannot initialize GValue with type '(null)', this type has no GTypeValueTable implementation

(gst-launch-1.0:26910): GLib-GObject-WARNING **: gtype.c:4272: type id '0' is invalid

(gst-launch-1.0:26910): GLib-GObject-WARNING **: can't peek value table for type '<invalid>' which is not currently referenced

(gst-launch-1.0:26910): GLib-GObject-WARNING **: gvalue.c:184: cannot initialize GValue with type '(null)', this type has no GTypeValueTable implementation

(gst-launch-1.0:26910): GStreamer-CRITICAL **: gst_value_deserialize: assertion 'G_IS_VALUE (dest)' failed

(gst-launch-1.0:26910): GStreamer-CRITICAL **: gst_value_deserialize: assertion 'G_IS_VALUE (dest)' failed

(gst-launch-1.0:26910): GLib-GObject-CRITICAL **: g_object_set_property: assertion 'G_IS_OBJECT (object)' failed

(gst-launch-1.0:26910): GLib-GObject-CRITICAL **: g_object_set_property: assertion 'G_IS_OBJECT (object)' failed

(gst-launch-1.0:26910): GLib-GObject-CRITICAL **: g_object_set: assertion 'G_IS_OBJECT (object)' failed

(gst-launch-1.0:26910): GLib-GObject-CRITICAL **: g_value_unset: assertion 'G_IS_VALUE (value)' failed

(gst-launch-1.0:26910): GLib-GObject-CRITICAL **: g_value_unset: assertion 'G_IS_VALUE (value)' failed

(gst-launch-1.0:26910): GStreamer-CRITICAL **: gst_element_get_request_pad: assertion 'GST_IS_ELEMENT (element)' failed

(gst-launch-1.0:26910): GStreamer-CRITICAL **: gst_object_unref: assertion 'object != NULL' failed

(gst-launch-1.0:26910): GStreamer-CRITICAL **: gst_object_ref: assertion 'object != NULL' failed

** (gst-launch-1.0:26910): CRITICAL **: gst_rtsp_message_take_header: assertion 'value != NULL' failed
Progress: (request) SETUP stream 1

(gst-launch-1.0:26910): GLib-GObject-WARNING **: invalid (NULL) pointer instance

(gst-launch-1.0:26910): GLib-GObject-CRITICAL **: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed

(gst-launch-1.0:26910): GStreamer-CRITICAL **: gst_object_ref: assertion 'object != NULL' failed

(gst-launch-1.0:26910): GLib-GObject-WARNING **: invalid (NULL) pointer instance

(gst-launch-1.0:26910): GLib-GObject-CRITICAL **: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed

(gst-launch-1.0:26910): GStreamer-CRITICAL **: gst_object_ref: assertion 'object != NULL' failed

(gst-launch-1.0:26910): GLib-GObject-WARNING **: gtype.c:4272: type id '0' is invalid

(gst-launch-1.0:26910): GLib-GObject-WARNING **: can't peek value table for type '<invalid>' which is not currently referenced

(gst-launch-1.0:26910): GLib-GObject-WARNING **: gvalue.c:184: cannot initialize GValue with type '(null)', this type has no GTypeValueTable implementation

(gst-launch-1.0:26910): GLib-GObject-WARNING **: gtype.c:4272: type id '0' is invalid

(gst-launch-1.0:26910): GLib-GObject-WARNING **: can't peek value table for type '<invalid>' which is not currently referenced

(gst-launch-1.0:26910): GLib-GObject-WARNING **: gvalue.c:184: cannot initialize GValue with type '(null)', this type has no GTypeValueTable implementation

(gst-launch-1.0:26910): GStreamer-CRITICAL **: gst_value_deserialize: assertion 'G_IS_VALUE (dest)' failed

(gst-launch-1.0:26910): GStreamer-CRITICAL **: gst_value_deserialize: assertion 'G_IS_VALUE (dest)' failed

(gst-launch-1.0:26910): GLib-GObject-CRITICAL **: g_object_set_property: assertion 'G_IS_OBJECT (object)' failed

(gst-launch-1.0:26910): GLib-GObject-CRITICAL **: g_object_set_property: assertion 'G_IS_OBJECT (object)' failed

(gst-launch-1.0:26910): GLib-GObject-CRITICAL **: g_object_set: assertion 'G_IS_OBJECT (object)' failed

(gst-launch-1.0:26910): GLib-GObject-CRITICAL **: g_value_unset: assertion 'G_IS_VALUE (value)' failed

(gst-launch-1.0:26910): GLib-GObject-CRITICAL **: g_value_unset: assertion 'G_IS_VALUE (value)' failed

(gst-launch-1.0:26910): GStreamer-CRITICAL **: gst_element_get_request_pad: assertion 'GST_IS_ELEMENT (element)' failed

(gst-launch-1.0:26910): GStreamer-CRITICAL **: gst_object_unref: assertion 'object != NULL' failed

(gst-launch-1.0:26910): GStreamer-CRITICAL **: gst_object_ref: assertion 'object != NULL' failed
Progress: (open) Opened Stream
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Progress: (request) Sending PLAY request
Progress: (request) Sending PLAY request
ERROR: from element /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc4: Internal data flow error.
Additional debug info:
gstbasesrc.c(2948): void gst_base_src_loop(GstPad *) (): /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc4:
streaming task paused, reason not-negotiated (-4)
Execution ended after 0:00:00.001834000
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...

我目前正在 OS X El Capitan 机器上尝试,但我也在 Linux Mint 17.3 机器上尝试过并收到相同的消息。

有人对我如何解决此问题有任何想法吗?感谢您提前提供任何帮助。

【问题讨论】:

    标签: c gstreamer glib


    【解决方案1】:

    这些错误可能是由于 gstreamer 或 glib 无法动态加载模块。

    第一次检查:

    使用任何 TLS 功能,Glib 都会在 TLS 模块中动态加载。默认情况下,这是一个 gnutls 模块。在 Ubuntu 上,可以在 /usr/lib/x86_64-linux-gnu/gio/modules/libgiognutls.so 中找到它。如果您想自己编译,此依赖项由 glib-networking (https://github.com/GNOME/glib-networking) 提供。

    第二次检查:

    TLS 握手完成后,RTSP 服务器继续设置 SRTP 通道。如果系统上不存在 SRTP 插件,程序将发布 CRITICAL 错误。运行 gst-inspect-1.0 srtpencgst-inspect-1.0 srtpdec 以验证这些插件是否存在以及是否满足它们的依赖关系。

    【讨论】:

    • 我错过了 gst-plugins-bad 中的 srtp 插件,因为两台机器都没有安装 srtp。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 2019-01-09
    • 1970-01-01
    相关资源
    最近更新 更多