Извлечение потока h264 с веб-камеры USB (Logitech C920)

Итак, я начинаю играть с gstreamer, и я могу сделать очень простые трубы, такие как

gst-launch-1.0 -v v4l2src device=/dev/video1 ! video/x-raw,format=YUY2,width=640,height=480,framerate=10/1 ! videoconvert ! autovideosink

Теперь, когда моя веб-камера USB (видео1, видео0 - встроенная камера компьютера) поддерживает h264 (я проверил, используя lsusb), Я хотел бы попытаться получить канал h264 напрямую. Я понимаю, что этот канал мультиплексируется в mjpeg, но, просматривая веб-страницы, кажется, что gstreamer все же может его получить.

Поскольку моей конечной целью является потоковая передача с Beaglebone, я попытался использовать решение, данное в этом посте (добавление слушателя из другого терминала):

#sender
gst-launch-1.0 v4l2src device=/dev/video1 ! video/x-264,width=320,height=90,framerate=10/1 ! tcpserversink host=192.168.148.112 port=9999

Но это приводит к следующей ошибке:

WARNING: erroneous pipeline: could not link v4l2src0 to tcpserversink0

Я также попытался сделать что-то похожее на мою первую команду, изменив исходный код с raw на h264 (на основании этого поста при попытке выполнить полную команду, приведенную там, выдается то же сообщение об ошибке)

gst-launch-1.0 -v v4l2src device=/dev/video1 ! video/x-h264,width=640,height=480,framerate=10/1 ! h264parse ! avdec_h264 ! autovideosink

Но опять же, это тоже не сработало:

Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Internal data flow error.
Additional debug info:
gstbasesrc.c(2948): gst_base_src_loop (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
streaming task paused, reason not-negotiated (-4)
Execution ended after 0:00:00.036309961
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...

Я признаю, что это сводит меня с ума: глядя на SO или где-либо еще в Интернете, кажется, что есть много людей, которые заставили его работать с той же веб-камерой, что и у меня (Logitech C920), но я продолжаю сталкиваться с выдает один за другим.

Каков пример правильного канала для извлечения h264 из этой веб-камеры?

1 ответ

Вам определенно нужно использовать Payloader, прежде чем он подключится к сети. Например, rtph264pay. Вот пример, который не может быть протестирован, поскольку у меня нет вашего оборудования. Я работаю с примерами udp из альтернативных источников, если это не направляет вас в правильном направлении.

сервер

gst-launch v4l2src device=/dev/video1 \
! video/x-264,width=320,height=90,framerate=10/1 \
! x264enc \
! queue \
! rtph264pay, config-interval=3, pt=96, mtu=1500 \
! queue \
! tcpserversink host=127.0.0.1 port=9002

клиент

gst-launch tcpserversrc host=127.0.0.1 port=9002 \
! application/x-rtp, media=video, clock-rate=90000, encoding-name=H264, payload=96 \
! rtph264depay \
! video/x-h264 \
! queue \
! ffdec_h264 \
! queue \
! xvimagesink
Другие вопросы по тегам