2013-05-30 1 views
2

У меня есть одна из новых надстроек камеры для малины 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

Может кто-нибудь объяснить, что я делаю неправильно?

+0

Я пытаюсь сделать то же самое. Я еще не пробовал работать с gstreamer, поэтому я дам ему шанс и напишу, если у меня будут разные результаты. – Respectech

+0

Я тоже разговаривал с людьми в списке gstreamer-devel. Не выглядит обнадеживающим: я слышал, что на выходе raspivid отсутствуют метки времени, которые gstreamer должен принимать решения о кадрах. См. Http://gstreamer-devel.966125.n4.nabble.com/Capturing-jpegs-from-an-h264-stream-td4660254.html –

+0

Можно добавить временные метки, изменив исходный код raspivid? Или это должно произойти на уровне GPU? – Respectech

ответ

2

Наконец-то мы нашли решение. Мой GStreamer трубопровод был в основном правильно, но две проблемы объединились, чтобы остановить его работу:

  • raspivid не добавляет временные метки к h264 рам производит
  • последние версии GStreamer есть ошибка, которая остановить его обработку untimestamped кадров

Запустите 1.0 сборку gstreamer (обязательно создайте с нуля & удалите все следы предыдущих попыток), и проблема исчезнет.

См. http://gstreamer-devel.966125.n4.nabble.com/Capturing-jpegs-from-an-h264-stream-tt4660254.html для списка рассылки.

+0

У вас есть копия двоичного файла gstreamer для малины Pi, которая может быть использована для тестирования? – Respectech

+0

Это связано с несколькими другими вещами, поэтому я сомневаюсь, что он переживет путешествие. Но я поставил скрипт сборки на pastebin; это должно дать вам рабочую сборку, похожую на мою. http://pastebin.com/u8T7mE18 –

 Смежные вопросы

  • Нет связанных вопросов^_^