RTCMulticonnection发起者没有相机

时间:2018-03-09 05:29:44

标签: webrtc rtcmulticonnection

我需要一些帮助,如果房间的发起人没有摄像头,我想要使用同时具有音频和摄像头的木匠。但问题是我对视频mediacontstraints设置为false。现在,木匠将只有相机消失的音频,我想要的是木匠的音频和视频。 @Muaz Khan - RTCMultiConnection.js

var initiator = new RTCMultiConnection();
        initiator.socketURL = 'url here';


        initiator.session = {
            audio: true,
            video:false,

        };

       initiator.mediaConstraints = {
            audio: true,
            video: false
        };

        initiator.sdpConstraints = {
            OfferToReceiveAudio: true,
            OfferToReceiveVideo: true
        };
        initiator.iceServers = [];
        initiator.iceServers.push({
        urls: "urls"
    });
    initiator.iceServers.push({
        urls: "urls",
        username: "username",
        credential: "credential"
    });


    initiator.audiosContainer = document.getElementById('audios-container');

    initiator.onstream = function(event) {

        var width = parseInt(initiator.audiosContainer.clientWidth / 4) - 20;
        console.log("the dispatcher width is",width);
        var mediaElement = getHTMLMediaElement(event.mediaElement, {
            title: event.userid,
            buttons: ['full-screen'],
            width: width,
            showOnMouseEnter: false
        });

        initiator.audiosContainer.appendChild(mediaElement);

        setTimeout(function() {
            mediaElement.media.play();
        }, 5000);

        mediaElement.id = event.streamid;
    };

    initiator.onstreamended = function(event) {
        var mediaElement = document.getElementById(event.streamid);
        if (mediaElement) {
            mediaElement.parentNode.removeChild(mediaElement);
        }
    };


    initiator.openOrJoin('channel-id', function(isRoomExist, roomid) {
        if (!isRoomExist) {

        }
    });




    // for participant

     var connection = new RTCMultiConnection();
        connection.socketURL = 'url here';

        connection.session = {
            audio: true,
            video: true
        };

        connection.mediaConstraints = {
            audio: true,
            video: true
        };

    connection.sdpConstraints.mandatory = {
        OfferToReceiveAudio: true,
        OfferToReceiveVideo: true
    };
    connection.iceServers = [];
    connection.iceServers.push({
        urls: "urls"
    });
    connection.iceServers.push({
        urls: "urls",
        username: "username",
        credential: "password"
    });

    connection.audiosContainer = document.getElementById('audios-container');
    connection.onstream = function(event) {
        var width = parseInt(connection.audiosContainer.clientWidth / 2) - 20;
        console.log("the responder width is",width);
        var mediaElement = getHTMLMediaElement(event.mediaElement, {
            title: event.userid,
            buttons: ['full-screen'],
            width: width,
            showOnMouseEnter: false
        });

        connection.audiosContainer.appendChild(mediaElement);

        setTimeout(function() {
            mediaElement.media.play();
        }, 5000);

        mediaElement.id = event.streamid;
    };

    connection.onstreamended = function(event) {
        var mediaElement = document.getElementById(event.streamid);
        if (mediaElement) {
            mediaElement.parentNode.removeChild(mediaElement);
        }
    };

        connection.openOrJoin('channel-id', function(isRoomExist, roomid) {
            if (!isRoomExist) {

            }
        });

提前谢谢。

1 个答案:

答案 0 :(得分:0)

未经测试,但您应该能够使用虚拟视频+音频MediaStream初始化您的RTC连接,即使您的用户没有任何设备,也不要求他们获得任何批准:



function SilentStream(videoColor) {
  const canvas = document.createElement('canvas');
  const ctx = canvas.getContext('2d', {alpha: false});
  ctx.fillStyle = videoColor || 'black';
  ctx.fillRect(0,0,canvas.width, canvas.height);
  const videoStream = canvas.captureStream();
  const videoTrack = videoStream.getVideoTracks()[0];
  const a_ctx = new (window.AudioContext || window.webkitAudioContext)();
  const audioStream = a_ctx.createMediaStreamDestination().stream;
  const audioTrack = audioStream.getAudioTracks()[0];
  
  return new MediaStream([videoTrack, audioTrack]);
}
// just to show it's streaming
black.srcObject = SilentStream();
green.srcObject = SilentStream('green');

<video id="black" controls autoplay></video>
<video id="green" controls autoplay></video>
&#13;
&#13;
&#13;