У меня есть одна из новых надстроек камеры для малины Pi. У него пока нет поддержки video4linux, а поставляется с небольшой программой, которая выплескивает поток 1080p h264. Я проверил это работает и получил его толкая видео на стандартный вывод с:Захват jpegs из потока h264 с gstreamer на малине Pi
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 один раз в секунду. Я знаю, что могу использовать «multifilesink» раковина GStreamer, чтобы сделать это так, придумали следующий короткий скрипт, чтобы запустить его:
[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 просто сидит вечно в prerolling состоянии и никогда не выплюнет мои драгоценные jpeg.
[email protected]:~/streamtest# ./test.sh
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
[waits forever]
В случае это полезно выход с флагом -v GStreamer находится на http://pastebin.com/q4WySu4L
Может кто-нибудь объяснить, что я делаю неправильно?
Я пытаюсь сделать то же самое. Я еще не пробовал работать с gstreamer, поэтому я дам ему шанс и напишу, если у меня будут разные результаты. – Respectech
Я тоже разговаривал с людьми в списке gstreamer-devel. Не выглядит обнадеживающим: я слышал, что на выходе raspivid отсутствуют метки времени, которые gstreamer должен принимать решения о кадрах. См. Http://gstreamer-devel.966125.n4.nabble.com/Capturing-jpegs-from-an-h264-stream-td4660254.html –
Можно добавить временные метки, изменив исходный код raspivid? Или это должно произойти на уровне GPU? – Respectech