【问题标题】:Capturing jpegs from an h264 stream with gstreamer on a Raspberry Pi在 Raspberry Pi 上使用 gstreamer 从 h264 流中捕获 jpeg
【发布时间】:2013-05-26 02:54:01
【问题描述】:

我有一个用于 Raspberry Pi 的新相机插件。它还没有 video4linux 支持,但带有一个小程序,可以输出 1080p h264 流。我已经验证了这项工作,并通过以下方式将视频推送到标准输出:

raspivid -n -t 1000000 -vf -b 2000000 -fps 25 -o -

我想处理这个流,最终得到每秒拍摄一次的视频快照。

因为它是 1080p,我需要使用 rpi 的硬件支持来支持 H264 编码。我相信 gstreamer 是唯一支持此功能的应用程序,因此使用 ffmpeg 或 avconv 的解决方案将不起作用。我已经使用http://www.trans-omni.co.uk/pi/GStreamer-1.0/build_gstreamer 的构建脚本来制作 gstreamer 和用于硬件 H264 编码的插件,它似乎可以工作:

root@raspberrypi:~/streamtest# GST_OMX_CONFIG_DIR=/etc/gst gst-inspect-1.0 | grep 264
...
omx:  omxh264enc: OpenMAX H.264 Video Encoder
omx:  omxh264dec: OpenMAX H.264 Video Decoder

所以我需要构建一个 gst-launch 管道,该管道在标准输入上获取视频并每秒吐出一个新的 jpeg。我知道我可以使用 gstreamer 的“multifilesink”接收器来执行此操作,因此提出了以下简短脚本来启动它:

root@raspberrypi:~/streamtest# cat test.sh
#!/bin/bash

export GST_OMX_CONFIG_DIR=/etc/gst

raspivid -n -t 1000000 -vf -b 2000000 -fps 25 -o - |  \
gst-launch-1.0 fdsrc fd=0 ! decodebin ! videorate ! video/x-raw,framerate=1/1 ! jpegenc ! multifilesink location=img_%03d.jpeg

问题是它不起作用:gstreamer 只是永远处于预卷状态,从不吐出我宝贵的 jpeg。

root@raspberrypi:~/streamtest# ./test.sh
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
[waits forever]

如果 gstreamer 的 -v 标志设置有用的输出位于 http://pastebin.com/q4WySu4L

谁能解释我做错了什么?

【问题讨论】:

  • 我正在尝试做同样的事情。我还没有尝试让 gstreamer 工作,所以如果我有任何不同的结果,我会试一试并回信。
  • 我也一直在与 gstreamer-devel 列表中的人交谈。看起来不太乐观:我听说 raspivid 的输出缺少 gstreamer 需要做出有关帧速率的决定的时间戳。见gstreamer-devel.966125.n4.nabble.com/…
  • 可以通过修改raspivid源码来添加时间戳吗?还是必须在 GPU 级别进行?
  • 这超出了我的理解范围。尝试在 rpi 板上询问 jamesh,我想他会知道的。
  • 那个构建脚本好像不见了,有没有人镜像?

标签: gstreamer raspberry-pi openmax


【解决方案1】:

我们终于找到了解决方案。我的 gstreamer 管道大部分是正确的,但两个问题结合在一起使其无法正常工作:

  • raspivid 不会向其生成的 h264 帧添加时​​间戳
  • 最新版本的 gstreamer 存在一个错误,导致其无法处理未加时间戳的帧

运行 1.0 版本的 gstreamer(确保从头开始构建并删除之前尝试的所有痕迹),问题就会消失。

有关邮件列表线程,请参阅 http://gstreamer-devel.966125.n4.nabble.com/Capturing-jpegs-from-an-h264-stream-tt4660254.html

【讨论】:

  • 您是否有可用于测试的 Raspberry Pi 的 gstreamer 二进制文件副本?
  • 它与其他一些东西相关联,所以我怀疑它能否在旅途中幸存下来。但是我已经将构建脚本放在了 pastebin 上;这应该给你一个类似于我的工作构建。 pastebin.com/u8T7mE18
猜你喜欢
  • 2013-08-16
  • 2016-06-13
  • 1970-01-01
  • 2014-08-19
  • 2017-11-11
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 2021-12-28
相关资源
最近更新 更多