Поток 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 ключевых кадров, и фиксируется только на следующем ключевом кадре.
если я удалю депай и оплату, просто переадресовав на уровне 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 со всеми готовыми настройками.
Обновить:
export GST_DEBUG="rtp*:4";
обнаружил это сообщение об ошибке, которое выпадает каждый раз, когда появляются артефакты:
rtpbasedepayload gstrtpbasedepayload.c:473:gst_rtp_base_depayload_handle_buffer:
<rtpvp8depay0> 12 <= 100, dropping old packet
при этом число, равное «12», обычно колеблется от 5 до 12.