Gstreamer 通过 RTP 流式传输多个摄像头,同时保存每个流
Gstreamer streaming multiple cameras over RTP while saving each stream
我目前正在从事一个使用 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 分钟的正常运行时间后简单地停止流并写入文件。
此外,我考虑过将其转换为C/C++ w/Gstreamer,如果有人愿意为我指明方向,我不知道从哪里开始。目前我编写了一个 javascript 代码,它通过序列号检测每个摄像头并为给定的摄像头分配一个端口。然后运行这个命令。
感谢您的帮助。
此问题是由相机本身引起的。事实证明,ECON 品牌相机存在一个问题,即 3 个相同的相机在 v4l2 中无法工作。我和我的团队购买了新相机,所有相同型号进行测试,效果很好。
我们使用 ECONS 是因为假定的科学质量和 USB-3 速度。不幸的是,我们没有 USB3 速度或带宽,所以我们只能使用较低的分辨率。
希望对遇到更简单问题的任何人有所帮助,目前似乎都通过 USB2.0 异步工作的相机是罗技 c922s
这是 USB Jetson 的带宽限制。我们可以在牺牲帧速率的情况下一次支持 3 个摄像头。比较罗技摄像头,该摄像头是 H.264 摄像头(它提供压缩帧),因此它可以提供 60fps 带宽。
我目前正在从事一个使用 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 分钟的正常运行时间后简单地停止流并写入文件。
此外,我考虑过将其转换为C/C++ w/Gstreamer,如果有人愿意为我指明方向,我不知道从哪里开始。目前我编写了一个 javascript 代码,它通过序列号检测每个摄像头并为给定的摄像头分配一个端口。然后运行这个命令。
感谢您的帮助。
此问题是由相机本身引起的。事实证明,ECON 品牌相机存在一个问题,即 3 个相同的相机在 v4l2 中无法工作。我和我的团队购买了新相机,所有相同型号进行测试,效果很好。
我们使用 ECONS 是因为假定的科学质量和 USB-3 速度。不幸的是,我们没有 USB3 速度或带宽,所以我们只能使用较低的分辨率。
希望对遇到更简单问题的任何人有所帮助,目前似乎都通过 USB2.0 异步工作的相机是罗技 c922s
这是 USB Jetson 的带宽限制。我们可以在牺牲帧速率的情况下一次支持 3 个摄像头。比较罗技摄像头,该摄像头是 H.264 摄像头(它提供压缩帧),因此它可以提供 60fps 带宽。