我有一个RTSP视频源(h265),我可以使用VLC显示。我想将流分成两个,一个是原始分辨率(用h265编码),另一个是新的低分辨率(用h264编码)。两个新流也应该是RTSP流,可以通过VLC查看。
由于带宽方面的考虑,我只能将单个客户端连接到主要源。
到目前为止,我有一个工作gst-rtsp-server设置,有一个媒体工厂运行这个gst启动字符串:
rtspsrc location = ...! rtph265depay! h265parse! tee name = t!排队! rtph265pay name = pay1 pt = 96 t。 !排队! decodebin!视频!视频! video / x-raw,帧率= 30/1,宽度= 640,高度= 480! x264enc bitrate = 500 speed-preset = superfast tune = zerolatency! h264parse! rtph264pay name = pay0 pt = 96
我为媒体工厂设置了一个挂载点,可以连接到VLC,例如。 “RTSP://127.0.0.1:8550 /测试”。有了这个,我只能在VLC中获得pay0的子流。我可以看到两个子流都在改变哪一个是pay0。但是我如何让VLC显示我的pay1?
否则,我如何开始原始视频源,然后有两个不同的媒体工厂(使用不同的gst启动字符串......)使用tee作为他们自己的来源?
两个流都在同时发送给您。通常pay0和pay1的情况是发送视频和音频。对于需要2个独立视频流的情况,您需要修改代码。
您可以通过在gst-rtsp-server/examples/test-launch.c
修改文件来完成您想要实现的目标的简单示例
factory = gst_rtsp_media_factory_new ();
gst_rtsp_media_factory_set_launch (factory, argv[1]);
gst_rtsp_media_factory_set_shared (factory, TRUE);
gst_rtsp_mount_points_add_factory (mounts, "/stream1", factory);
gst_rtsp_media_factory_set_launch (factory, argv[2]);
gst_rtsp_media_factory_set_shared (factory, TRUE);
gst_rtsp_mount_points_add_factory (mounts, "/stream2", factory);
然后从./test-launch "rtspsrc location=... ! rtph265depay ! h265parse ! rtph265pay name=pay1 pt=96" "rtspsrc location=... ! rtph265depay ! h265parse ! decodebin ! videoscale ! videorate ! video/x-raw,framerate=30/1,width=640,height=480 ! x264enc bitrate=500 speed-preset=superfast tune=zerolatency ! h264parse ! rtph264pay name=pay0 pt=96"
开始
然后,您的相机会有2名消费者。如果您只想消耗一次,则由您自己决定流并将其作为gst_rtsp_media_factory_set_launch
管道的src提供。