Почему мое приложение аудиочата PeerJS не работает?

У меня есть сервер apache, на котором работает php, и мой интерфейсный код peerjs:

<script>
    $(function(){

        //returns element value of GET key (e.g '&test=2'returns 2)
        function getParameterByName(name){
            name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
            var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
                results = regex.exec(location.search);
            return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
        }

        function getAudio(successCallback, errorCallback){
            navigator.getUserMedia({
                audio: true,
                video: false
            }, successCallback, errorCallback);
        }

        //request call
        var from = getParameterByName('from');
        var to = getParameterByName('to');

        $('#start-call').click(function(){

            console.log('starting call...');

            getAudio(
                function(MediaStream){

                    console.log('now calling ' + to);
                    var call = peer.call(to, MediaStream);
                    call.on('stream', onReceiveStream);
                },
                function(err){
                    console.log('an error occured while getting the audio');
                    console.log(err);
                }
            );

        });
        //recieve call
        function onReceiveCall(call){

            console.log('peer is calling...');
            console.log(call);

            getAudio(
                function(MediaStream){
                    call.answer(MediaStream);
                    console.log('answering call started...');
                },
                function(err){
                    console.log('an error occured while getting the audio');
                    console.log(err);
                }
            );

            call.on('stream', onReceiveStream);
        }

        function onReceiveStream(stream){
            var audio = document.querySelector('audio');
            audio.src = window.URL.createObjectURL(stream);
            audio.onloadedmetadata = function(e){
                console.log('now playing the audio');
                audio.play();
            }
        }

        var peer = new Peer({host: 'www.example.com', port:9000, path:''});
        peer.on('open', function(id) {
          console.log('My peer ID is: ' + id);
        });

        peer.on('call', onReceiveCall);

    });
</script>
<div id = "start-call"> Start Call </div>
<audio controls></audio>

И затем у меня есть сервер узла, который запускает одноранговый сервер на порту 9000:

var fs = require('fs');
var PeerServer = require('peer').PeerServer;

var server = PeerServer({
  port: 9000,
  ssl: {
    key: fs.readFileSync('/xxx/xxx/privkey.pem'),
    cert: fs.readFileSync('/xxx/xxx/cert.pem')
  },
  proxied: true
});

server.on('connection', function(id) {
  console.log("connecion made:" + id);
});

При использовании Chrome в консоли переднего плана не появляется никаких ошибок, и я получаю приглашение "Connection made: 35hy2o4ydfqw". Поэтому, когда я нажимаю «Начать вызов», консоль выводит "now calling xxx...", однако с другой стороны вообще ничего не получено, поэтому я предполагаю, что это

peer.on('call', onReceiveCall);

Звонок не принимается. Дается очень мало намеков на то, что происходит не так на стороне получателя, абсолютно ничего не происходит.

Спасибо за любую помощь или совет.


person Community    schedule 19.02.2016    source источник


Ответы (2)


Вы работаете на локальном хосте или на удаленном веб-сайте. Если вы работаете на своем удаленном веб-сайте, убедитесь, что у вас есть безопасный (HTTS) сайт. Navigator.getUserMedia доступен только на веб-сайтах SSL.

person user3407584    schedule 24.02.2016

Вы должны отредактировать эту строку var peer = new Peer(from, {host: 'www.example.com', port:9000, path:''});

from - это id для звонка

person coder fire    schedule 26.12.2016