Как можно обнаружить потерю пакетов GStreamer — webrtcbin (и как затем отправить PLI или FIR)

#browser #webrtc #gstreamer

#браузер #webrtc #gstreamer

Вопрос:

Я разрабатываю приложение на основе GStreamer для получения потока WebRTC из браузера. Я только что начал с примера webrtc-sendrecv.c: https://gitlab.freedesktop.org/gstreamer/gst-examples/-/tree/master/webrtc/sendrecv/gst

Проблема в поврежденном изображении. Источник — общий доступ к экрану (getDisplayMedia) — через некоторое время передачи я получаю квадраты разного цвета — чего-то не хватает даже на одном ПК или локальной сети.

Пробовал браузер на Linux и macOS и приложение GStreamer на двух дистрибутивах Linux (gstreamer 1.16.2 и 1.18.0)

Теперь я не знаю, как это можно обнаружить и как можно отправлять сообщения PLI или FIR в исходный браузер.

Пожалуйста, вы знаете, как смотреть этому в лицо? И если да, то каким образом? Спасибо, d3im

EDIT1: Хорошо, я вижу значительную потерю пакетов после некоторого времени работы в vivaldi://webrtc-internals В приложении example должно быть что-то не так.

Я могу узнать на стороне браузера, сколько пакетов потеряно:

 function getStats(pc) {
    if (pc) {
        pc.getStats(null).then(stats => {
            stats.forEach(report => {
              if ( (report.type=="remote-inbound-rtp") amp;amp; (report.kind=="video") ) {
                console.log(report.packetsLost);
              }
            })
        })
    }
}
 

Каков способ сообщить браузеру PLI? Есть ли какой-нибудь вызов API для этого в JS?

Ответ №1:

Если вы используете Chrome, чтобы получить представление о количестве потерь пакетов, вы можете проверить статистику WebRTC, посетив chrome://webrtc-internals. Он покажет вам множество статистических данных о фактическом соединении RTCPeerConnection, включая потерю пакетов и время прохождения в оба конца.