【问题标题】:Gstreamer capture and store mjpeg from webcamGstreamer 从网络摄像头捕获和存储 mjpeg
【发布时间】:2018-08-08 07:33:21
【问题描述】:

我正在尝试捕获和存储网络摄像头流。要求为 1920x1080@30fps。它必须由单板计算机(Raspberry)完成。 捕获的持续时间为 10 分钟。 (目前我只捕捉 10 秒进行测试)

一般来说,相机(来自 ELP 的 usbfhd01m)能够提供 1920x1080@30fps 的 MJPEG 流。我只是无法存储它。我不知道为什么。我使用以下管道进行了尝试:

gst-launch-1.0 v4l2src device=/dev/video0 num-buffers=300 do-timestamp=true ! image/jpeg,width=1920,height=1080,framerate=30/1 ! queue ! avimux ! filesink location=test.avi

结果是一个远离流畅的视频文件。我的管道中缺少什么?

当我使用相同的管道,但解码流并将其保存在这样的原始文件中时:

gst-launch-1.0 v4l2src device=/dev/video0 num-buffers=300 do-timestamp=true ! image/jpeg,width=1920,height=1080,framerate=30/1 ! queue ! jpegdec ! filesink location=test.yuv

那么原始视频绝对流畅。因此,我认为管道和设备能够以 1920x1080@30fps 录制,但保存流似乎有问题。

将流存储为 matroska 文件格式不会改变我的问题。对于即时转码到 H264,Raspberry Pi 3 似乎还不够强大。 (即使使用 omxh264enc)

【问题讨论】:

  • 尝试使用-ev 选项运行命令。

标签: gstreamer mjpeg


【解决方案1】:

删除do-timestamp=true 后会发生什么?此选项将当前管道时间戳应用于样本缓冲区 - 覆盖来自设备的那些。您可能希望存储原始时间戳而不是覆盖它们,因为它们可能会带来一些管道抖动。

在您的第二个管道中,您将流保存为原始流。基本上删除您拥有的所有时间戳信息(也是抖动时间戳)。因此,当您播放原始流时,它会采用恒定的帧速率。

【讨论】:

  • 这不会改变任何东西。最初我没有设置那个参数。我希望设置参数可以解决我的问题。但不是。如果没有 do-timestamp=true,行为是一样的
  • 会不会是播放问题?比如,你会在 Pi 上播放吗?也许 JPEG 解码器无法跟上每秒解码 30 张全高清图像的速度?
猜你喜欢
  • 1970-01-01
  • 2013-02-09
  • 1970-01-01
  • 2013-03-17
  • 1970-01-01
  • 2012-08-16
  • 2013-01-18
相关资源
最近更新 更多