0

如果房间的发起人没有摄像头,我需要一些帮助,我希望同时使用音频和摄像头的加入者。但问题是我将视频媒体约束设置为假。现在加入者将只拥有相机消失的音频我想要的是加入者的音频和视频。@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) {

            }
        });

先感谢您。

4

1 回答 1

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>

于 2018-03-09T05:41:36.720 回答