Описание: Как я могу транслировать видео высокого качества с использованием нативного WebRTC?
У меня есть поток h264 1920×1080 со скоростью около 30 кадров в секунду. В настоящее время я могу передать это с сервера на локальном хосте нативному клиенту на локальном хосте.
Я написал сервер WebRTC, используя нативную библиотеку Google WebRTC. Я написал VideoEncoder и VideoEncoderFactory, которые принимают кадры, состоящие из уже закодированных данных, и транслируют их по видеодорожке. Используя это, я могу отправить свой поток h264 на сервер WebRTC по каналу и увидеть видеопоток в браузере.
Тем не менее, каждый раз, когда что-то движется, видео повреждается. Он продолжает играть, но полон артефактов. В конце концов я обнаружил, что WebRTC отбрасывает некоторые из моих кадров. Когда я прикрепляю последовательно увеличивающийся ID к каждому кадру, прежде чем передать его в rtc :: AdaptedVideoTrackSource :: OnFrame, и я записываю этот же идентификатор в webrtc :: VideoEncoder :: Encode, я вижу, что некоторые из моих кадров просто исчезают.
Это имеет смысл, я пытаюсь транслировать высококачественное видео поверх чего-то, предназначенного для видеочата, и снижение частоты кадров исправляет искажение. Тем не менее, я не прошу библиотеку WebRTC делать многое, она просто пересылает уже закодированные данные клиенту на localhost. У меня есть родное приложение, которое делает это нормально, и я видел один клиент WebRTC браузера, который может сделать это. Есть ли поле в SDP или какое-то изменение конфигурации, которое позволит мне передавать потоковое видео?
Это было решение Как контролировать полосу пропускания в видеозвонке WebRTC? .
Я слышал об изменении предложения sdp, но отклонил его, потому что мне сказали, что браузер будет принимать неограниченную пропускную способность по умолчанию, и что вам нужно только сделать это, если вы хотите ограничить пропускную способность. Однако добавление «b = AS: большое число» исправило все мои проблемы.
Других решений пока нет …