Как использовать PLI-пакеты при записи видео в WebRTC?
Мы используем MCU licode для потоковой передачи видео с Google Chrome на сервер и записи его. Сложность здесь заключается в том, что задействован только один браузер Chrome, поэтому серверный код должен обрабатывать отправку отзыва клиенту.
Мы добавили серверный код для отправки REMB (пропускной способности) пакетов каждые 5 секунд клиенту. Это заставляет клиента увеличивать битрейт, так что качество видео хорошее.
Мы сделали нечто подобное с пакетами PLI, чтобы попытаться улучшить качество видео. Записанное видео имело блочные артефакты и не выглядело хорошо. Текущий код отправляет PLI каждые 0,8 секунды, что заставляет клиента отправлять ключевой кадр (полный кадр видео). Это исправляет низкое качество видео, потому что оно вызывает ключевой кадр, но когда происходит потеря пакетов (сеть Wi-Fi), он снова быстро ухудшается.
Мой вопрос: как использовать эти пакеты PLI?
Я думаю, что PLI означает:
PLI - Picture Loss Indication
1 ответ
Ваше приложение должно отправлять как минимум три вида обратной связи RTCP:
- точный отчет получателя (RFC 3550) каждую секунду или около того, с указанием скорости потери пакетов и джиттера для отправителя; это заставит отправителя адаптировать свою пропускную способность к характеристикам канала;
- общий NACK (RFC 4585) всякий раз, когда он пропускает пакет; это позволит избежать повреждения, заставляя отправителя повторно отправить любой потерянный пакет;
- PLI (RFC 4585) всякий раз, когда он не видел ключевого кадра в заданном интервале, например двух секундах.
Отправка REMB необходима только для ограничения пропускной способности, если она растет слишком быстро, например, если обратная связь в отчетах получателя неточна.