Несколько зрителей Peerjs

Я пытаюсь настроить модуль конференции в своем приложении. Итак, я нашел и создал поток между двумя пользователями.

Проблема в том, что другие не могут присоединиться.

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

Вот мой код:

    // Compatibility shim
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;

navigator.getUserMedia({audio: true, video: true}, function (stream) {
    // Set your video displays
    $('#my-video').prop('src', URL.createObjectURL(stream));
    window.localStream = stream;
}, function () {
    $('#step1-error').show();
});

peerFactory.on('error', function (err) {
    alert(err.message);
});

peerFactory.on('connection', function (id) {
    alert('new logon' + id);
});



// Receiving a call
peerFactory.on('call', function (call) {
    // Answer the call automatically (instead of prompting user) for demo purposes
    var r = confirm('Ny kald fra ');
    if (r) {
        call.answer(window.localStream);
        $scope.currentCall = true;
        $scope.$apply();
        streamCall(call);
    }
    else
    {
        call.close();
        window.existingCall.close();
    }
});

$scope.makeCall = function (callId) {
    var call = peerFactory.call(callId, window.localStream);
    $scope.currentCall = true;
    streamCall(call);
};

$scope.hangUp = function()
{
    $scope.currentCall = false;
    window.existingCall.close();
};

function streamCall(call) {
    // Hang up on an existing call if present
    if (window.existingCall) {
        window.existingCall.close();
    }

    // Wait for stream on the call, then set peerFactory video display
    call.on('stream', function (stream) {
        $('#their-video').prop('src', URL.createObjectURL(stream));
    });
    // UI stuff
    window.existingCall = call;
    $('#their-id').text(call.peerFactory);
    call.on('error', function () {
        var i = 0;
    });
}

Может ли кто-нибудь дать мне толчок в правильном направлении?


person Marc Rasmussen    schedule 04.12.2015    source источник


Ответы (1)


Согласно вашему описанию и вашему коду, я бы сказал, что вы пытаетесь подключить более двух пользователей к одному вызову.

Это невозможно с WebRTC, он позволяет вам подключать только два конца для каждого однорангового соединения. Вы можете воспроизвести поведение мультиконференции, создав отдельный вызов для каждой пары участников.

Для этого вам понадобятся разные элементы video для каждого участника и список пользователей, чтобы вы знали идентификатор каждого участника, которому нужно позвонить в комнату, к которой вы присоединяетесь.

PeerJS не даст вам механизма узнать другие идентификаторы в комнате/звонке, поэтому вам нужно будет найти механизм, чтобы сообщить об этом новому участнику.

У меня есть пример в моем github инструмента связи AngularJS/Socket.io WebRTC, не стесняйтесь проверить его и посмотрите, как мультиконференц-вызовы воспроизводятся с использованием p2p-соединений WebRTC.

Редактировать: Предполагая, что у ваших пользователей есть какой-то идентификатор, и поведение вашей программы похоже на makeCall('Alice'), предполагая, что Алиса разговаривает с Бобом, когда Кэрол звонит Алисе, и вы хотите, чтобы Кэрол присоединилась к вызову с обоими, вы можете реализовать это без нового сигнальный слой:

  1. Алиса разговаривает с Бобом
  2. Кэрол звонит Алисе
  3. Алиса принимает вызов
  4. Алиса отправляет идентификатор Боба Кэрол, используя DataChannel.
  5. Кэрол звонит Бобу
  6. Алиса, Боб и Кэрол разговаривают друг с другом в логическом трехстороннем разговоре.
person Javier Conde    schedule 11.12.2015