Потоковое видео H.264 поверх rtp с использованием gstreamer
Я новичок с gstreamer, и я пытаюсь использовать его. Моя первая цель - создать простой поток rtp видео h264 между двумя устройствами. Я использую эти два конвейера:
Отправитель: 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