2

我正在尝试构建一个基于 gstreamer 的 rtsp 视频服务器。就我而言,我需要客户端连接到服务器并开始将视频流式传输到服务器。

我已经阅读了一些关于这个主题的教程,尤其是这个:http ://www.ip-sense.com/linuxsense/how-to-develop-a-rtsp-server-in-linux-using-gstreamer/

在本教程中,视频从服务器流式传输到客户端,我需要对其进行更改,以便视频将从客户端流式传输到服务器。

编辑:在演示中,这个管道被启动:

gst_rtsp_media_factory_set_launch (factory, "( "
          "videotestsrc ! video/x-raw-yuv,width=320,height=240,framerate=10/1 ! "
          "x264enc ! queue ! rtph264pay name=pay0 pt=96 ! audiotestsrc ! audio/x-raw-int,rate=8000 ! alawenc ! rtppcmapay name=pay1 pt=97 "")");

管道从视频和音频测试源开始,并将它们编码为有效负载 0 和 1。我需要做相反的事情 - 获取 rtsp 有效负载并对其进行解码。

4

3 回答 3

6

尽管这个问题是很久以前提出的,但我将为可能正在寻找它的其他人回答。使用 GStreamer 来实现这一点。

  1. Gstreamer 现在有一个 RTSP 媒体服务器Here
  2. Gstreamer 还有一个GstRtspClientSink 元素,它允许您将流发送到兼容的 RTSP 媒体服务器。一个基本的命令行示例是“gst-launch-1.0 videotestsrc!queue!x264enc!rtspclientsink location=rtsp://127.0.0.1:8554/test”假设媒体服务器在本地主机上运行,​​端口 8554 并期待一个发布点“测试”
  3. 此处提供了一个基于 GStreamer RTSP 服务器的应用程序示例,该应用程序接受来自客户端的流
于 2017-11-03T04:47:50.450 回答
2

要解码客户端从服务器接收到的 RTSP 流,请使用rtspsrc

    gst-launch rtspsrc location=${LOCATION} \
           ! rtph264depay ! ffdec_h264 ! ffmpegcolorspace ! xvimagesink

但是您的问题似乎是针对将有效负载推送到服务器,而不是从服务器中提取它(至少是在您编辑它之前......现在我有点不清楚)。

gstrtspserver框架似乎针对 RTSP 的常见用例:客户端从服务器中提取数据。如果你想恢复它,你最好的开始可能是将 gstrtspserver 库破解到一个gstrtsppushclient框架中(只需交换连接逻辑就可以了)。您还必须重新实现接收(服务器)端。

但是它不再是真正的 RTSP(从某种意义上说,你不会在那里找到任何其他可以处理你的应用程序)。

您可能应该重新考虑您的架构。一个好的开始阅读可能是RFC2326

于 2013-04-17T17:07:00.000 回答
0

如果您真正想要的只是一个从“客户端”接收流式输入的“服务器”,那么只需颠倒服务器和客户端应用程序的角色即可。编写一个始终存在的客户端您可能需要某种重新启动循环,以便如果传入流的结尾结束您的管道,您只需重新启动它。此外,您的客户需要对数据做任何您想做的事情;存储它,展示它,重播它(???)。

现在可以修改客户端(以前是服务器)代码以将数据发送到服务器(以前是客户端),然后终止或等待另一个流传输。

有点笨拙,但它应该工作。

于 2013-05-20T18:00:22.943 回答