我正在尝试基于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有效载荷并对其进行解码。
答案 0 :(得分:2)
用于解码客户端从服务器接收的RTSP流,使用rtspsrc
gst-launch rtspsrc location=${LOCATION} \
! rtph264depay ! ffdec_h264 ! ffmpegcolorspace ! xvimagesink
但你的问题似乎是针对将有效负载推送到服务器,而不是从服务器上拉出来(至少在你编辑它之前......现在对我来说有点不清楚了。)
gstrtspserver
框架似乎针对RTSP的常见用例:客户端从服务器提取数据。
如果你想恢复它,你最好的开始可能是将gstrtspserver库破解成gstrtsppushclient
框架(只需交换连接逻辑就可以了)。
你还必须重新实现接收(服务器)端。
然后它不再是真正的RTSP(在某种意义上,你不会找到任何其他应用程序,可以处理你的)。
您应该重新考虑您的架构。 一个好的开始阅读可能是RFC2326
答案 1 :(得分:2)
虽然很久以前就提出了这个问题,但我会回答可能正在寻找它的其他人。要使用GStreamer实现这一目标。
答案 2 :(得分:0)
如果你真正想要的只是一个"服务器"接收来自"客户端的流式输入"只需反转服务器和客户端应用程序的角色。编写一个始终存在的客户端您可能需要进行某种重启循环,以便在传入流的末尾结束管道时,您只需重新启动它。此外,您的客户需要做任何您想要的数据;存储它,显示它,重新播放它(???)。
现在可以修改客户端(以前是服务器)代码,将数据发送到服务器(以前是客户端),然后终止或等待另一个流进行传输。
有点粗糙,但它应该有用。