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