【发布时间】:2019-02-15 09:48:47
【问题描述】:
使用 gstreamer,我想以 RTP/h.264 格式将图像从多个 Logitech C920 网络摄像头传输到 Janus 媒体服务器。网络摄像头产生 h.264 编码的视频流,因此我可以将流发送到 UDP 接收器,而无需重新编码数据,只需对其进行负载。
我正在使用 gst-interpipe 插件在不同的网络摄像头之间切换,以便 Janus 接收到的视频流保持不变,但图像来自我选择的任何网络摄像头。
它可以工作,但我遇到了一些破碎帧的问题,其中颜色为灰色且细节模糊不清,主要是在我在网络摄像头源流之间切换后的前 5 到 10 秒。之后,图像会自行校正。
首先我认为这是一个特定于 gst-interpipe 的问题,但我可以通过简单地设置两个管道来重现它 - 一个将视频流发送到 UDP 接收器,一个从 UDP 源读取:
gst-launch-1.0 -v -e v4l2src device=/dev/video0 ! queue ! video/x-
h264,width=1280,height=720,framerate=30/1 ! rtph264pay
config-interval=1 ! udpsink host=127.0.0.1 port=8004
gst-launch-1.0 -v udpsrc port=8004 caps = "application/x-rtp,
media=video, clock-rate=90000, encoding-name=H264, payload=96" !
rtph264depay ! decodebin ! videoconvert ! xvimagesink
注意:如果我将视频流直接发送到 xvimagesink,即不使用 UDP 流时,我不会遇到此问题。
我是否缺少管道中的一些重要参数?这是缓冲问题吗?我真的不知道如何纠正这个问题。 非常感谢任何帮助。
【问题讨论】:
-
您最终找到解决此问题的方法了吗?我在传输 H264 相机时遇到了类似的问题,并且每隔几秒我就会注意到类似的灰色故障,尤其是当您快速打开灯时。
-
解决我的问题的方法是使用 uvch264src 而不是 v4l2src 然后设置 initial-bitrate=3000000 average-bitrate=3000000 iframe-period=1000 (您可以尝试根据需要稍微调整这些设置)。此外,我转储了 gst-interpipe 并改用了 input-selector。
标签: linux video-streaming gstreamer h.264