使用GStreamer启动RTSP服务器以重新流传IP摄像机H264视频

3
我将使用多个客户端在不同的计算机上,以便能够查看IP摄像头流URL的视频。由于Ip相机对已连接的客户端数量有限制,我想为此设置一个流媒体服务器。我搜索并尝试了使用不同命令行选项的GStreamer,但尚未成功。

这是一个测试命令行:

gst-launch-1.0 rtspsrc location="rtsp://root:root@192.168.1.1/axis-media/media.amp?videocodec=h264&resolution=320x240&fps=10&compression=50" latency=10 ! rtph264depay ! h264parse ! tcpserversink host=127.0.0.1 port=5100 -e

但是当我想要用vlc进行测试时,没有任何播放。这是否与SDP有关?gstreamer是否可以从源重新流式传输sdp?

找到正确的命令行后,我想将其集成到C#应用程序中以自动化此过程。

欢迎任何帮助。


你确定 tcpserversink 真的是一个 RTSP 服务器吗?上一次我检查(大约1到2年前),GStreamer 中没有 RTSP 服务器实现。可行的选项是使用 Live555 库实现服务器。 - Velkan
@Velkan 是的,我已经看到了gstreamer中有RTSP服务器的实现,但我不确定tcpserversink或udpsink是否也支持rtsp服务器。我已经成功地使用过Live555,但它在大型网络中似乎存在问题。我想测试一下gstreamer。 - M.Mahdipour
2个回答

3
你需要使用gst-rtsp-server。并且要使用它,你必须编写小的C/C++应用程序,这里有示例更新:如果你的rtsp源提供h264视频流,你可以使用以下管道进行重新传输而不需要转码:
rtspsrc location=rtsp://example.com ! rtph264depay ! h264parse ! rtph264pay name=pay0 pt=96

我在Windows中的C++应用程序中使用GStreamer库和dll测试了这个示例,它可以正常工作。它可以在VLC中显示测试视频源。但是我该如何将IP摄像机RTSP源连接到此流媒体器上呢?我已经尝试过,但没有成功。我将源代码中的"( videotestsrc is-live=1 ! x264enc ! rtph264pay name=pay0 pt=96 )"替换为"(rtspsrc location="rtsp://root:root@192.168.1.1/axis-media/media.amp?videocodec=h264&resolution=320x240&fps=10&compression=50" )"。 - M.Mahdipour
1
感谢您的回答,它引导我找到了正确的答案。仅使用rtspsrc是不够的。要使用它,还必须连接到pad-added信号,并使用它将其连接到管道中。这是一个复杂的过程,但有一种替代方法。我使用了GstRTSPMediaFactoryURI类,它处理所有内容并准备好可供使用的RTSP服务器。 - M.Mahdipour

1
为了从IP摄像头重新流式传输h.264视频,以下是Gstreamer管道(这对我有效): rtspsrc location = rtsp://IP_CAMERA_URL!rtph264depay!video / x-h264,stream-format = byte-stream!h264parse!rtph264pay!application / x-rtp,media = video,encoding-name = H264,payload = 96! yoursink gst-launch-1.0 --version 上---> gst-launch-1.0 version 1.14.5 GStreamer 1.14.5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接