我目前正在从事一个使用 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 代码,它通过序列号检测每个摄像头并为给定的摄像头分配一个端口。然后运行此命令。
感谢您的帮助。
最佳答案
此问题是由相机本身引起的。事实证明,ECON 品牌相机存在一个问题,即 3 个相同的相机在 v4l2 中无法工作。我和我的团队购买了新相机,所有型号都相同以进行测试,并且工作正常。
我们使用 ECONS 是因为假定的科学质量和 USB-3 速度。不幸的是,我们没有 USB3 速度或带宽,因此我们只能使用较低的分辨率。
希望能帮助遇到更简单问题的任何人,目前似乎所有通过 USB2.0 异步工作的相机都是罗技 c922s
关于c++ - Gstreamer 通过 RTP 流式传输多个摄像头,同时保存每个流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39858019/