gstreamer - 将 RTSP 负载与 gst-rtsp-server 分开

标签 gstreamer vlc rtsp

我有一个 RTSP 视频源 (h265),我可以使用 VLC 显示它。我想将流分成两部分,一个以原始分辨率(使用 h265 编码),另一个以新的较低分辨率(使用 h264 编码)。这两个新流也应该是 RTSP 流,可以用 VLC 观看。

出于带宽考虑,我只能将单个客户端连接到主要来源。

到目前为止,我有一个工作的 gst-rstp-server 设置,一个媒体工厂运行这个 gst 启动字符串:

rtspsrc location=... ! rtph265depay ! h265parse ! tee name=t ! queue ! rtph265pay name=pay1 pt=96 t. ! queue ! 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

我为媒体工厂设置了一个挂载点,可以连接到 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);

然后从 开始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 个消费者。 如果您更喜欢只消费一次,则由您来 T 流并使其可用作 gst_rtsp_media_factory_set_launch 管道的 src。

关于gstreamer - 将 RTSP 负载与 gst-rtsp-server 分开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55173780/

相关文章:

c# - 如何找到 VLC 属性库 (C# Unity)

Android 视频流 - 设备支持吗?

javascript - 识别用户 vlc 插件安装?

linux - gstreamer 和 mp4 或带音频的 avi 输出

python - 模块未找到错误 : No module named 'gi'

Gstreamer - 使用 Tee 元素挂起显示和录制视频

android - 如何使用FFMPEG保存rtsp流不丢包

video-streaming - 如何在 Gstreamer 中使用 mpegtsmux 进行网络摄像头流式传输

c# - 通过 C# 控制 VLC

Java - 播放/暂停 VLC