Gstreamer通过RTP流式传输多个摄像头,同时保存每个流

时间:2016-10-04 17:05:21

标签: c++ camera video-streaming gstreamer rtp

我目前正在开发一个利用Nvidia Jetson的项目。我们需要通过UDP RTP将3台摄像机流式传输到单一来源(单播),同时保存所有三台摄像机的内容。

我的管道存在问题,这可能是一个简单的错误,我根本就没有看到。

gst-launch-1.0 -e v4l2src device=/dev/video0 ! 'video/x-raw, width=(int)640, height=(int)480' ! tee name=c c. ! queue ! omxvp8enc bitrate=1500000 ! rtpvp8pay ! udpsink bind-port=8574 host=129.21.57.204 port=8574 loop=false c. ! queue ! omxh264enc bitrate=1500000 ! mp4mux ! queue ! filesink location=test-RightFacingCamera.mp4 v4l2src device=/dev/video1 ! 'video/x-raw, width=(int)640, height=(int)480' ! tee name=b b. ! queue ! omxvp8enc bitrate=1500000 ! rtpvp8pay ! udpsink bind-port=8564 host=129.21.57.204 port=8564 loop=false b. ! queue ! omxh264enc bitrate=1500000 ! mp4mux ! queue ! filesink location=test-LeftFacingCamera.mp4 v4l2src device=/dev/video2 ! 'video/x-raw, width=(int)640, height=(int)480' ! tee name=a a. ! queue ! omxvp8enc bitrate=1500000 ! rtpvp8pay ! udpsink bind-port=8554 host=129.21.57.204 port=8554 loop=false a. ! queue ! omxh264enc bitrate=1500000 ! mp4mux ! queue ! filesink location=test-FrontFacingCamera.mp4

现在的问题是,3个流中的2个将无故停止,根本没有调试信息,它们将在大约2分钟的运行时间后停止流式传输并写入文件。

此外,我已经考虑将其转换为带有Gstreamer的C / C ++,如果有人想指出我的方向,我不知道从哪里开始。目前我已经编写了一个javascript代码,可以按序列号检测每个摄像头,并为给定的摄像头分配一个端口。然后运行此命令。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

此问题是由相机本身引起的。事实证明,ECON品牌相机有一个问题,其中3个相同的相机将无法在v4l2中工作。我的团队和我已经购买了新的相机,所有相同的模型都要测试,而且工作正常。

由于所谓的科学质量和USB-3速度,我们使用的是ECONS。不幸的是,我们没有USB3速度或带宽,所以我们坚持使用较低的分辨率。

希望能帮助任何遇到simaler问题的人,目前通过USB2.0异步工作的相机都是Logitech c922s

答案 1 :(得分:1)

这是Jetson的带宽限制。我们可以同时支持3个摄像头,同时降低帧速率。比较罗技相机,相机是H.264相机(它提供压缩帧),因此它可以提供60fps的带宽。