Я пытаюсь перенаправить поток RTSP в веб-браузер, используя WebRTC с GStreamer. Это в основном работает, но у меня есть пара икоты. В видеопотоке есть часы, поэтому легко увидеть следующие проблемы:
Я просматривал поток RTSP непосредственно в VLC, и он воспроизводится отлично, поэтому я не думаю, что проблема связана с самим потоком.
Вот пара конвейеров, с которыми я играл:
rtspsrc location=<rtspurl> is-live=true ! rtpjitterbuffer ! queue ! rtph264depay !
rtph264pay aggregate-mode=zero-latency config-interval=1 !
webrtcbin turn-server=<turnurl> bundle-policy=max-bundle name=webrtcbin
rtspsrc location=<rtspurl> is-live=true ! rtpjitterbuffer mode=0 ! queue ! parsebin !
rtph264pay aggregate-mode=zero-latency config-interval=-1 timestamp-offset=0 ! queue !
webrtcbin turn-server=<turnurl> bundle-policy=max-bundle name=webrtcbin
Я также пробовал просто смотреть поток с помощью gstreamer. Например:
gst-launch-1.0 rtspsrc location=<rtspurl> ! decodebin ! autovideosink
Это намного лучше, чем пайплайны WebRTC. Он все еще замерзает, но не так сильно. И я не заметил, чтобы он показывал более ранний видеокадр.
Я просмотрел все примеры конвейеров, которые смог найти, а также различные варианты элементов в моих конвейерах, но не нашел ничего, что могло бы улучшить это. Есть ли что-то, что я могу попробовать добавить в свой конвейер, чтобы решить проблемы?





вы должны проверить размер сетевого буфера и размер сетевой очереди, уменьшить размер буфера, если скорость сети низкая. Еще одна вещь: эти плееры кэшируют небольшой контент в хранилище, чтобы обеспечить непрерывное воспроизведение без перерывов, изменение размера кэша также может вам помочь.
Спасибо. Я думаю, что нашел некоторые настройки, которые связаны с тем, что вы говорите. Вроде работает лучше, хотя и не идеально. В частности, max-size-bytes=0 и max-size-time=0 в очередях. Я не уверен, как манипулировать размером кеша в плеере.