我有一个用于Raspberry Pi的新相机附加组件。它还没有video4linux支持,但附带了一个小程序,可以发出1080p h264流。我已经验证了这项工作,并将视频推送到stdout:
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管道,它在stdin上获取视频并每秒吐出一个新的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
有谁能解释我做错了什么?
答案 0 :(得分:2)
我们终于找到了解决方案。我的gstreamer管道大部分是正确的,但两个问题相结合,阻止它工作:
运行1.0 build of gstreamer(确保从头开始构建并删除之前尝试的所有痕迹),问题就消失了。
有关邮件列表主题,请参阅http://gstreamer-devel.966125.n4.nabble.com/Capturing-jpegs-from-an-h264-stream-tt4660254.html。