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

问题描述 投票:0回答:3

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

video-streaming gstreamer rtsp
3个回答
5
投票

虽然这个问题很久以前就被问到了,但我会为其他可能正在寻找它的人回答。使用 GStreamer 来实现这一点。

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

2
投票

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

rtspsrc

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

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

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

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

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


0
投票

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

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

有点凹凸不平,但应该有用。

© www.soinside.com 2019 - 2024. All rights reserved.