Как исправить проблемы с изображением при потоковой передаче h.264 через gstreamer udpsink - PullRequest
0 голосов
/ 15 февраля 2019

Используя gstreamer, я хочу передавать изображения с нескольких веб-камер Logitech C920 на медиа-сервер Janus в формате RTP / h.264.Веб-камеры производят видеопотоки в кодировке h.264, поэтому я могу отправлять потоки в приемник UDP без перекодирования данных, а только для их загрузки.

Я использую плагин gst-interpipe для переключения между различнымивеб-камеры, так что видео поток, полученный Янусом, остается прежним, но с изображениями, поступающими с любой веб-камеры, которую я выберу.

Это работает, но у меня возникают некоторые проблемы с разбитыми кадрами, где цвета серого цвета и детали размыты, в основном первые 5–10 секунд после переключения между исходными потоками веб-камеры.После этого изображения исправляются.

Первые кадры

Через 5 - 10 секунд или более

Сначала я подумалЭто была проблема, специфичная для gst-interpipe, но я могу воспроизвести ее, просто настроив два конвейера - один отправляет видеопоток в приемник UDP, а другой читает из источника UDP:

gst-launch-1.0 -v -e v4l2src device=/dev/video0 ! queue ! video/x- 
h264,width=1280,height=720,framerate=30/1 ! rtph264pay 
config-interval=1 ! udpsink host=127.0.0.1 port=8004


gst-launch-1.0 -v udpsrc port=8004 caps = "application/x-rtp, 
media=video, clock-rate=90000, encoding-name=H264, payload=96" ! 
rtph264depay ! decodebin ! videoconvert ! xvimagesink

NB: I 'Я не испытываю этой проблемы, если я отправляю видеопоток непосредственно на xvimagesink, т.е. когда не используется потоковая передача UDP.

Я пропустил некоторые важные параметры в своих конвейерах?Это проблема буферизации?Я действительно понятия не имею, как это исправить.Любая помощь с благодарностью.

1 Ответ

0 голосов
/ 15 февраля 2019

Из-за характера временных зависимостей видеопотоков вы не можете просто настроиться на поток и ожидать, что он будет декодирован немедленно.Правильное декодирование может начинаться только с кадров произвольной точки доступа (например, I- или IDR-кадров).перед этим вы получите данные изображения, которые основаны на видеокадрах, которые вы не получили, поэтому они будут выглядеть испорченными.Некоторые декодеры предлагают некоторый контроль над тем, что делать в этих случаях.Например, libavdec_h264 имеет опцию output-corrupt.(Но на самом деле я не знаю, как оно ведет себя для «правильных» фреймов, в которых просто отсутствуют опорные рамки)Или у них могут быть варианты пропустить все, пока не произойдет RAP-кадр.Это зависит от вашей конкретной реализации декодера.Однако обратите внимание, что при любом из этих вариантов начальная задержка перед тем, как вы увидите какое-либо изображение, увеличится.

...