我有一个RTSP视频源(h265),可以使用VLC进行显示。我想将流分成两部分,一个以原始分辨率(用h265编码),另一个以新的较低分辨率(用h264编码)。这两个新流也应该是RTSP流,可以在VLC中查看。
出于带宽考虑,我只能将单个客户端连接到主要源。
到目前为止,我有一个有效的gst-rstp-server设置,并且有一个媒体工厂运行此gst启动字符串:
rtspsrc location = ... ! rtph265depay! h265parse!发球名称= t!排队! rtph265pay name = pay1 pt = 96 t。 !队列 !解码器!视频规模!视频率! video / x-raw,framerate = 30/1,width = 640,height = 480! x264enc比特率= 500 speed-preset =超快调谐= zerolatency! h264parse! rtph264pay name = pay0 pt = 96
我为媒体工厂设置了一个安装点,并且可以连接到VLC,例如。 “ rtsp://127.0.0.1:8550 / test”。这样,我只能得到VLC中哪个是pay0的子流。我可以看到两个子流都通过更改哪一个是pay0而起作用。但是VLC如何显示我的薪水1?
否则,我如何准备原始视频源,然后让两个不同的媒体工厂(具有不同的gst启动字符串...)将tee用作自己的源?
答案 0 :(得分:0)
两个流都同时发送给您。 通常,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。