Может ли RTCMultiConnection использовать H264 вместо VP9 для демонстрации экрана?

Я работаю над проектом, связанным с совместным использованием экрана, и единственная проблема, с которой я сталкиваюсь, — это необходимость отображать экран, совместно используемый с ПК или Mac (браузер Chromium, фактически приложение Electron), на Raspberry PI (я использую модель 3 Б, самый современный). В моих экспериментах проект только начинается, я использую RTCMultiConnection, чтобы поделиться экраном и посмотреть его.

Проблема в том, что он бесполезно медленный (2-3 кадра в секунду, иногда с 10-секундной задержкой) даже с включенным полным аппаратным ускорением в Chromium, который его отображает, и я прекрасно понимаю, почему: потому что он использует кодек VP9, ​​для которого нет аппаратного ускорения. на Малине.

Вопрос: могу ли я использовать H264 в RTCMultiConnection? Если да, то как? Я знаю, что сам WebRTC в основном поддерживает это.


person Mikhail Novikov    schedule 07.10.2017    source источник


Ответы (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>
person Muaz Khan    schedule 07.10.2017
comment
Спасибо! Хотя мое окружение отличается, и все было не совсем так, как вы выразились, оно показало мне путь, и в конце концов я заставил его работать. Удивительно, но он отлично работает и в Chrome. - person Mikhail Novikov; 09.10.2017