Может ли 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>
Другие вопросы по тегам