与gst-rtsp-server分开的RTSP有效负载

时间:2019-03-15 00:07:03

标签: gstreamer vlc rtsp

我有一个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用作自己的源?

1 个答案:

答案 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。