【发布时间】: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