WebRTC — отключить медиа, отправленные на удаленный узел, но не локальный носитель

#webrtc

#webrtc

Вопрос:

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

Я хочу, чтобы у меня были кнопки ответа на вызов или отклонения. Но я не хочу ждать, пока вызываемый абонент нажмет кнопку «ответить», прежде чем я смогу отправить носитель, что вызывает небольшую задержку до появления носителя на экране. Я знаю, что могу слушать iceState и показывать видео только тогда, когда это connected или completed , но я думаю, что нажатие пользователем кнопки ответа обычно дает соединению больше времени для завершения работы, поэтому я уверен, что, как правило, медиа-соединение будет уже настроено до того, как они «примут» вызов.

Для этого я отправлю медиа, но отключен, и при нажатии кнопки «ответить» я включу отправку мультимедиа.

Я пытаюсь использовать приведенный ниже код для отключения мультимедиа, но он делает это и для локальных медиа.

 document.getElementById("local_video").srcObject = webcamStream;

webcamStream.getTracks().forEach(
    function (track){
        myPeerConnection.addTrack(track, webcamStream);
    });

function initialMediaMuted(){
    let videoTrackBlank;
    let audioTrackBlank;
    myPeerConnection.getSenders().find(function (s) {
        if (s.track.kind === "video") {
            videoTrackBlank = s.track;
        }
        if (s.track.kind === "audio") {
            audioTrackBlank = s.track;
        }
    });
    videoTrackBlank.enabled = false;
    audioTrackBlank.enabled = false;
}
 

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

Спасибо

Ответ №1:

Проблема в том, что вы используете один и тот же MediaStreamTrack экземпляр как для локального отображения, так и для потоковой передачи. Если вы вызываете MediaStreamTrack.clone() для создания копии перед вызовом addTrack , вы можете установить включенное состояние отдельно.

 webcamStream.getTracks().forEach(
    function (track){
        const cloneTrack = track.clone();
        myPeerConnection.addTrack(cloneTrack, webcamStream);
        cloneTrack.enabled = false;
    });
 

Комментарии:

1. Да, я справился с этим таким образом. Спасибо. Я приму ваш ответ