Потоковое видео H.264 через rtp с помощью gstreamer

Я новичок в gstreamer и пытаюсь использовать его. Моя первая цель - создать простой поток видео h264 по протоколу rtp между двумя устройствами. Я использую эти два конвейера:

Отправитель: gst-launch-1.0 -v filesrc location=c:\\tmp\\sample_h264.mov ! x264enc ! rtph264pay ! udpsink host=127.0.0.1 port=5000

Получатель:gst-launch-1.0 -v udpsrc port=5000 ! rtpmp2tdepay ! decodebin ! autovideosink

Но с первым (отправителем) я получил следующую ошибку:

Setting pipeline to PAUSED ...
Pipeline is PE*R*O L(LgIsNtG- l.a.u.n
h-1.0:5788): CRITICAL **: gst_adapter_map: assertion `size > 0' failed
ERROR: from element /GstPipeline:pipeline0/GstFileSrc:filesrc0: Internal data flow error.
Additional debug info:
gstbasesrc.c(2812): gst_base_src_loop (): /GstPipeline:pipeline0/GstFileSrc:filesrc0:
streaming task paused, reason not-negotiated (-4)
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Freeing pipeline ...

Я перепробовал множество других конфигураций, но не смог найти правильный конвейер.

Некоторая другая информация: Gstreamer версия: 1.0.7 ОС: Windows 7

Любая идея / предложение? Спасибо,

1 ответ

Решение

filesrc будет читать данные из данного файла как необработанные байты; вы не можете просто закодировать эти необработанные байты x264encДля этого вам понадобятся видео-данные. попробуйте добавить демультиплексор/декодер перед перекодированием потока), например, примерно так:

Отправитель:

gst-launch-1.0 -v \
   filesrc location=/tmp/sample_h264.mov
   ! qtdemux \
   ! h264parse \
   ! ffdec_h264 \
   ! ffmpegcolorspace \
   ! x264enc \
   ! rtph264pay \
   ! udpsink host=127.0.0.1 port=5000

Вы должны быстро проверить, работает ли это, используя тестовое видео:

gst-launch-1.0 -v \
   videotestsrc 
   ! x264enc \
   ! rtph264pay \
   ! udpsink host=127.0.0.1 port=5000
Другие вопросы по тегам