Raspberry Pi 用の新しいカメラ アドオンの 1 つがあります。まだ video4linux をサポートしていませんが、1080p h264 ストリームを吐き出す小さなプログラムが付属しています。これが機能することを確認し、ビデオを標準出力にプッシュしました:
raspivid -n -t 1000000 -vf -b 2000000 -fps 25 -o -
このストリームを処理して、最終的にビデオのスナップショットを 1 秒に 1 回取得したいと考えています。
1080p であるため、H264 エンコーディングには rpi のハードウェア サポートを使用する必要があります。これをサポートするアプリは 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
そのため、stdin でビデオを取得し、1 秒に 1 回新鮮な jpeg を吐き出す gst-launch パイプラインを構築する必要があります。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にあります。
誰かが私が間違っていることを説明できますか?