Похоже, что rtpvp8depay + rtpvp8pay вводит артефакты в шлюз Janus - PullRequest
1 голос
/ 21 сентября 2019

Поток VP8 поступает от плагина Janus Videoroom с локальным переадресацией на 10002/10004.Оттуда он получает следующий конвейер gstreamer:

gst-launch-1.0 -v udpsrc \
caps="application/x-rtp,media=(string)video,encoding-name=(string)VP8,payload=100" \
address=127.0.0.1 port=10004 ! \
rtpvp8depay ! rtpvp8pay  ! \
udpsink host=127.0.0.1 port=5004

и отправляется в плагин Streaming.Как видите, здесь нет транскодирования, только депай-загрузка и полезная загрузка.результирующее видео разбивается на артефакты на некоторых ключевых кадрах, примерно один раз в 10 ключевых кадрах, только для исправления на следующем ключевом кадре.

если я удаляю depay и pay, просто перенаправляя на уровень rtp, чтобы получить это

gst-launch-1.0 -v udpsrc \
caps="application/x-rtp,media=(string)video,encoding-name=(string)VP8,payload=100" \
address=127.0.0.1 port=10004 ! \
udpsink host=127.0.0.1 port=5004

этого никогда не происходит.

Я понимаю, что это не проблема Януса, а проблема gstreamer.а может у кого есть идеи в чем может быть проблема?это было очень надежно проверено, проблему легко воспроизвести в первом случае и никогда не происходит во втором.

Конечно, цель того, что я делаю, - это транскодирование, и было намного больше вустановка и конвейер, прежде чем я сварил его до этого уровня.Воспроизводится на Janus, установленном на новой машине с Ubuntu 18.04, со всеми стандартными настройками.

update:

export GST_DEBUG="rtp*:4";

выдает это сообщение об ошибке, которое исчезает каждый раз, когда появляются артефакты:

rtpbasedepayload gstrtpbasedepayload.c:473:gst_rtp_base_depayload_handle_buffer:
<rtpvp8depay0> 12 <= 100, dropping old packet

с числом «12», колеблющимся, как правило, между 5 и 12.

1 Ответ

1 голос
/ 21 сентября 2019

Это было исправление:

Задержка rtpjitterbuffer = 50!

до rtpvp8depay.

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

И да, я вернул транскодирование и все остальное в моем конвейере, а также все другие навороты, которые были вокруг, и все равно работает нормально.

...