GStreamer shmsink Утверждение «сегмент-> формат == формат» не выполнено - PullRequest
0 голосов
/ 05 февраля 2020

У меня следующий конвейер работает из моей программы с использованием элемента OpenCV VideoWriter.

gst-launch-1.0 -v videotestsrc ! clockoverlay ! shmsink socket-path=/tmp/sink shm-size=2000000 name=/dev/shm wait-for-connection=false

Когда я использую поток через следующий конвейер, все работает

gst-launch-1.0 -v shmsrc is-live=true socket-path=/tmp/sink shm-area-name=/dev/shm ! \
    "video/x-raw, format=BGR, width=(int)160, height=(int)120, framerate=(fraction)30/1" ! \
    queue ! videoconvert ! autovideosink

, но когда я попытка закодировать поток в h264 с помощью следующего конвейера

gst-launch-1.0 -vvv shmsrc is-live=true socket-path=/tmp/sink shm-area-name=/dev/shm ! \
    "video/x-raw, format=BGR, width=(int)160, height=(int)120, framerate=(fraction)30/1" ! \
    queue ! videoconvert ! x264enc bitrate=1000 ! video/x-h264,profile=baseline ! \
    rtph264pay config-interval=1 pt=96 ! queue ! udpsink host=127.0.0.1 port=5000

Я получаю

(gst-launch-1.0:8119): GStreamer-CRITICAL **: gst_segment_to_running_time: assertion 'segment->format == format' failed

и ничего не вижу из VL C. Чего мне не хватает?

Примечание : Для воспроизведения проблемы можно использовать следующие конвейеры производителя / потребителя:

gst-launch-1.0 -v videotestsrc ! clockoverlay ! shmsink socket-path=/tmp/sink shm-size=2000000 name=/dev/shm wait-for-connection=false
sudo gst-launch-1.0 -vvv shmsrc is-live=true socket-path=/tmp/sink shm-area-name=/dev/shm ! \
    "video/x-raw, format=BGR, width=(int)160, height=(int)120, framerate=(fraction)30/1" ! \
    queue ! videoconvert ! x264enc bitrate=1000 ! video/x-h264,profile=baseline ! rtph264pay config-interval=1 pt=96 ! queue ! udpsink host=127.0.0.1 port=5000

Информация о системе

  • Ubuntu 16.04
  • GStreamer 1.8.3
  • OpenCV 3.4.0

1 Ответ

0 голосов
/ 06 февраля 2020

Наконец я нашел эту статью, которая помогла мне решить проблему.

Мои окончательные конвейеры выглядят следующим образом.

Конвейер производителя

gst-launch-1.0 -v videotestsrc is-live=true ! clockoverlay ! shmsink socket-path=/tmp/sink shm-size=2000000 name=/dev/shm sync=true wait-for-connection=false

Потребительский трубопровод

gst-launch-1.0 -vvv shmsrc is-live=true do-timestamp=true socket-path=/tmp/sink shm-area-name=/dev/shm ! \
    "video/x-raw, format=BGR, width=(int)160, height=(int)120, framerate=(fraction)30/1" ! \
    queue ! videoconvert ! x264enc bitrate=1000 ! video/x-h264,profile=baseline ! rtph264pay config-interval=1 pt=96 ! queue ! udpsink host=192.168.200.255 port=5000 sync=false
...