我有一個用於Raspberry Pi的新相機插件。它還沒有video4linux的支持,但配備了一個小程序,吐出1080p的h264流。我已經證實了這項工作,並得到了它推動視頻與到stdout:在Raspberry Pi上用gstreamer從h264流中捕獲jpeg
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編碼插件,並似乎工作:
[email protected]:~/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-管道下水,負責就標準輸入視頻和吐出來每秒一次新鮮的jpeg。我知道我可以使用的GStreamer的「multifilesink」匯到這樣做,所以想出了下面簡短的腳本來運行它:
[email protected]:~/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。
[email protected]:~/streamtest# ./test.sh
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
[waits forever]
在情況下,它是在GStreamer的-v標誌設置有用的輸出爲http://pastebin.com/q4WySu4L
任何人都可以解釋我做錯了嗎?
我正在嘗試做同樣的事情。我還沒有嘗試過讓gstreamer工作,所以如果我有任何不同的結果,我會給它一個機會並回信。 – Respectech
我也一直在gstreamer-devel名單上與人交談。看起來並不樂觀:我聽說raspivid的輸出缺乏gstreamer需要做出關於framerate的決定的時間戳。 請參閱http://gstreamer-devel.966125.n4.nabble.com/Capturing-jpegs-from-an-h264-stream-td4660254.html –
可以通過修改raspivid源代碼來添加時間戳嗎?或者它是否必須在GPU級別發生? – Respectech