Broadcast/ One to Many stream

166 views
Skip to first unread message

Станко Младеновић

unread,
Apr 12, 2019, 3:44:59 AM4/12/19
to PeerJS
Hi, i'm trying to build broadcast using peerjs, but stream dies when 2nd peer connect to stream.
This is code on broadcaster side:
navigator.mediaDevices.getUserMedia({video: true, audio: true}).then(function (stream) {
    let myvideo = document.createElement('video')
    document.getElementById("my-video").appendChild(myvideo);
    myvideo.muted = true;
    myvideo.srcObject = stream;
    myvideo.play();


    let Peer = require('simple-peer');
    let peer = new Peer({
        initiator: true,
        trickle: false,
        stream: stream
    });

    peer.config = {
        iceServers: {
            urls: ["stun:stun.l.google.com:19302"]
        }
    };
    peer.on('signal', function (data) {
        yourID = JSON.stringify(data);
        console.log(yourID);

    });
    let bc = setInterval(function () {
        if (broadcast !== null) {
            peers_checker = setInterval(function () {
                axios.get('/peers/' + broadcast).then(function (response) {
                    if (peers !== response.data) {
                        peers = response.data;
                        peers.forEach(function (e) {
                            if (tried_to_connect.length > 0) {
                                for (let i = 0; i < tried_to_connect.length; i++) {
                                    if (!tried_to_connect.includes(e.id)) {
                                        peer.signal(e.sdp);
                                        tried_to_connect.push(e.id);
                                        connected_peers++;
                                        document.getElementById('cpv').innerText = connected_peers;
                                    }
                                }
                            } else {
                                peer.signal(e.sdp);
                                tried_to_connect.push(e.id);
                                connected_peers++;
                                document.getElementById('cpv').innerText = connected_peers;
                            }

                        })
                    }
                });
            }, 3000);
            clearInterval(bc);
        }
    }, 500);
}, function (err) {
    alert("Error starting webcam");
    console.log(err);
});

This is integrated with laravel website and im using it to get peers data.
On the side of person watching i have this code:


let Peer = require('simple-peer');
let peer = new Peer({
    initiator: false,
    trickle: false,
});
peer.config = {
    iceServers: {
        urls: ["stun:stun.l.google.com:19302"]
    }
};

if (host !== null) {
    peer.signal(host);
}
peer.on('signal', function (data) {
    yourID = JSON.stringify(data);
    axios.post('/watcher/' + broadcast, {
        sdp: yourID
    }).then(function (response) {
        if (response.data === "success") {
            console.log("watcher sdp set");
        }
    });

});
peer.on('stream', function (stream) {
    let video = document.createElement('video')
    document.getElementById("guest-video").appendChild(video);
    video.srcObject = stream;
    video.setAttribute('id', 'g-v');
    video.play();
});

This will work when i have 1 broadcaster and 1 person watching, as soon as i add 2nd person watching, stream dies.
I guess every peer should have something like its own instance, but i don't really get how that should be done? Anyone has some example/tip?
I need to build it to work for max 15 people

Reply all
Reply to author
Forward
0 new messages