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

标签 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 代码,它通过序列号检测每个摄像头并为给定的摄像头分配一个端口。然后运行此命令。

感谢您的帮助。

最佳答案

此问题是由相机本身引起的。事实证明,ECON 品牌相机存在一个问题,即 3 个相同的相机在 v4l2 中无法工作。我和我的团队购买了新相机,所有型号都相同以进行测试,并且工作正常。

我们使用 ECONS 是因为假定的科学质量和 USB-3 速度。不幸的是,我们没有 USB3 速度或带宽,因此我们只能使用较低的分辨率。

希望能帮助遇到更简单问题的任何人,目前似乎所有通过 USB2.0 异步工作的相机都是罗技 c922s

关于c++ - Gstreamer 通过 RTP 流式传输多个摄像头,同时保存每个流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39858019/

相关文章:

c++ - 减少 Visual Studio 程序大小

ios - 如何在 iPhone 上获取快门速度、光圈和 ISO 值

React-native-camera 限制条码扫描区域

ios - 是否可以通过编程方式提高 iphone 中相机的快门速度?

iOS 应用程序评论 - 视频流 MPEG-DASH 时间超过 10 分钟

c++ - 警告级别 4 中的不可访问代码警告

c++ - Xcode 预处理器宏以包含系统样式 header

iphone - 从 iPhone 到另一台设备(浏览器或 iPhone)的实时音频/视频流

java - 如何使用 JSP 播放 YUV 图像序列

C++ lambda表达式类中的变量