将视频流式传输到gstreamer rtsp服务器

时间:2013-04-15 12:37:07

标签: video-streaming gstreamer rtsp

我正在尝试基于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有效载荷并对其进行解码。

3 个答案:

答案 0 :(得分:2)

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

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

但你的问题似乎是针对将有效负载推送到服务器,而不是从服务器上拉出来(至少在你编辑它之前......现在对我来说有点不清楚了。)

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

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

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

答案 1 :(得分:2)

虽然很久以前就提出了这个问题,但我会回答可能正在寻找它的其他人。要使用GStreamer实现这一目标。

  1. Gstreamer现在有一个RTSP媒体服务器Here
  2. Gstreamer还有一个GstRtspClientSink element,允许您将流发送到兼容的RTSP媒体服务器。一个基本的命令行示例是“gst-launch-1.0 videotestsrc!queue!x264enc!rtspclientsink location = rtsp://127.0.0.1:8554 / test”,假设媒体服务器在localhost,端口8554上运行并且期望发布点“测试“
  3. 可接受来自客户端的流的基于GStreamer RTSP服务器的应用程序示例Here

答案 2 :(得分:0)

如果你真正想要的只是一个"服务器"接收来自"客户端的流式输入"只需反转服务器和客户端应用程序的角色。编写一个始终存在的客户端您可能需要进行某种重启循环,以便在传入流的末尾结束管道时,您只需重新启动它。此外,您的客户需要做任何您想要的数据;存储它,显示它,重新播放它(???)。

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

有点粗糙,但它应该有用。