Как добавить несколько треков в одноранговое соединение в WebRTC? - PullRequest
0 голосов
/ 02 мая 2018

Я хочу отправить два видеопотока (один видеопоток и один поток, захваченный из HTML-элемента canvas) с использованием только одного RTCPeerConnection.

То, что я пытался сделать, это добавить обе дорожки к объекту соединения с равноправным узлом, прежде чем делать предложение, но он не работает в Firefox (он работает в Chrome). Событие peerConnection.ontrack происходит только один раз, при этом первая дорожка добавляется к объекту однорангового соединения (хотя есть два потока).

Я читал о пересмотре, но в настоящее время я добавляю обе дорожки в одноранговое соединение перед отправкой предложения, поэтому я не знаю, нужно ли мне пересматривать. Мне нужно?

Я также слышал о проблеме совместимости в многопоточности между Firefox (Unified Plan) и Chrome (Plan B), поэтому, пожалуйста, посоветуйте мне, какой подход я должен использовать сейчас.

Я использую адаптер.js.

Добавить код (на самом деле JavaScript):

function createPeerConnection() {
    peerConnection = new RTCPeerConnection(iceServers);

    peerConnection.onicecandidate = (event) => {
        if (event.candidate) {
            // send to server
        }
    };

    videoStream.getTracks().forEach(track => peerConnection.addTrack(track, videoStream));
    canvasStream.getTracks().forEach(track => peerConnection.addTrack(track, canvasStream));
}

Вот так я создаю RTCPeerConnection и добавляю треки. После того, как эта часть создает предложение и отправляет его на сервер сигнализации ... Все работает хорошо, просто другой конец получает только первый добавленный трек (в Firefox). Если вам нужны эти биты, я добавлю их.

Это обработчик события ontrack.

    peerConnection.ontrack = (event) => {
        console.log(event); //only prints the first track in Firefox, but prints both tracks in Chrome
    };

1 Ответ

0 голосов
/ 02 мая 2018

Попробуйте включить поддержку единого плана в Chrome. Это все еще в стадии разработки и находится под флагом (включите экспериментальные функции веб-платформы в chrome: // flags). Затем вам нужно создать свой RTCPeerConnection с new RTCPeerConnection({sdpSemantics: 'unified-plan'})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...