我正在尝试开发一个通过RTSP传输已处理数据的应用程序,以便其他应用程序可以接收数据并使用它执行其他操作。麻烦的是,似乎没有多少人似乎使用RTSP或/和Gstreamer来传输文本(XML)数据,因此我很难找到合适的资源。
所以在服务器端(我的应用程序),我有这个:
gst_rtsp_media_factory_set_launch(m_Factory, "( appsrc name=mysrc ! application/x-rtp,pt=98 ! rtpgstpay name=pay0 pt=98 )");
我通过运行以下管道来测试连接:
gst-launch-1.0 rtspsrc location=rtsp://127.0.0.1:8554/test use-pipeline-clock=true debug=true ! application/x-rtp,payload=98 ! fakesink dump=true
当我同时运行它们时,我确认服务器端的回调函数用于" need-data"信号被连续调用,rtspsrc的调试输出从OPTIONS请求到PLAY请求一直给我200 OK响应,除了fakesink没有转储任何东西而且我在Wireshark上看不到任何数据包除了请求和确认之外。所以似乎可以在两者之间建立连接,除了在它们之间没有传输实际数据。
从连接几秒钟后,我从服务器端的gstreamer获取此调试输出(GST_DEBUG = 3)
0:00:13.646758533 4844 0x7f3508003940 WARN rtspmedia rtsp-media.c:3068:gst_rtsp_media_set_state: media 0x1f4ada0 was not prepared
0:00:13.676328927 4844 0x7f34d8004590 FIXME default gstutils.c:3643:gst_pad_create_stream_id_internal:<mysrc:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id
0:00:13.676967874 4844 0x7f34b8001540 FIXME default gstutils.c:3643:gst_pad_create_stream_id_internal:<appsrc3:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id
0:00:13.677498868 4844 0x7f34b8001680 FIXME default gstutils.c:3643:gst_pad_create_stream_id_internal:<appsrc4:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id
在20秒之后,我明白了:
0:00:33.676438806 4844 0x7f34c0001f70 WARN rtspmedia rtsp-media.c:2127:wait_preroll: failed to preroll pipeline
0:00:33.676619321 4844 0x7f34c0001f70 WARN rtspmedia rtsp-media.c:2384:gst_rtsp_media_prepare: failed to preroll pipeline
0:00:33.681136801 4844 0x7f34c0001f70 ERROR rtspclient rtsp-client.c:678:find_media: client 0x1ec83b0: can't prepare media
0:00:33.684604205 4844 0x7f34c0001f70 ERROR rtspclient rtsp-client.c:2210:handle_describe_request: client 0x1ec83b0: no media
似乎只有一小步才能从我的应用程序中获取实际传输的数据包,但到目前为止我还没有运气识别它。任何帮助将非常感激。