Может ли RTCMultiConnection использовать H264 вместо VP9 для совместного использования экрана?
Я работаю над проектом, связанным с совместным использованием экрана, и единственная проблема, с которой я сталкиваюсь, - это необходимость отображать общий экран с ПК или Mac (браузер Chromium, фактически приложение Electron) на Raspberry PI (я использую модель). 3 Б, самый современный). В моих экспериментах проект только начинается, я использую RTCMultiConnection, чтобы поделиться экраном и посмотреть его.
Проблема в том, что он бесполезно медленный (2-3 кадра в секунду, иногда с 10-секундной задержкой) даже при полном ускорении HW, включенном в Chromium, который отображает его, и я прекрасно понимаю, почему: потому что он использует кодек VP9, для которого нет ускорения HW на малину.
Вопрос: могу ли я использовать H264 в RTCMultiConnection? Если да, то как? Я знаю, что сам WebRTC в основном поддерживает это.
1 ответ
Добавьте следующий код в ваш HTML-демонстрационный файл:
connection.processSdp = function(sdp) {
// remove VP8+VP9 so that Firefox can use H264
sdp = CodecsHandler.removeVPX(sdp);
return sdp;
};
Перейдите в каталог "dev" и откройте этот файл: dev / CodecsHandler.js # L5-L30, строки с 5 по 30.
Убедитесь, что линии VP8 и VP9 правильные.
a=rtpmap:100
a=rtpmap:101
Может быть, VP8 - 96, а VP9 - 98. Так что замени rtpmap
соответственно. Например
a=rtpmap:96
a=rtpmap:98
Обязательно тестируйте только с использованием Firefox. Я не знаю, поддерживает ли стабильный канал Chrome H264.
Fireox может потребовать несколько флагов. Вы можете искать h264
флаги на about:config
Убедитесь, что ссылка dev/CodecsHandler.js
в вашем HTML демонстрационном файле, быстро после dist/RTCMultiConnection.min.js
,
<script src="dist/RTCMultiConnection.min.js"></script>
<script src="dev/CodecsHandler.js"></script>
<script>
var connection = new RTCMultiConnection();
connection.socketURL = 'https://yourserver.com:9001/';
connection.processSdp = function(sdp) {
// remove VP8+VP9 so that Firefox can use H264
sdp = CodecsHandler.removeVPX(sdp);
return sdp;
};
connection.openOrJoin('roomid');
</script>