W
W
webgrig2015-10-25 17:54:13
JavaScript
webgrig, 2015-10-25 17:54:13

WebRtc video chat. How to get a list of all rooms?

I made a video chat based on the simpleWebrtc simplewebrtc.com script, it is possible to create separate rooms for communication, the number of participants in each room can be any.
But I ran into a problem, I need to enable participants to select the room in which they want to chat, for this you need to display links of all rooms on the page, and these links must be updated in real time.
My question is how to get a list of all open rooms?

Answer the question

In order to leave comments, you need to log in

2 answer(s)
M
Mark Doe, 2015-10-25
@mourr

If you use your own signal server (Signalmaster) - in sockets.js you can easily finish getting rooms, because it works on socket.io

function findRooms() {
    var availableRooms = [];
    var rooms = io.sockets.adapter.rooms;
    if (rooms) {
        for (var room in rooms) {
            if (!rooms[room].hasOwnProperty(room)) {
                availableRooms.push(room);
            }
        }
    }
    return availableRooms;
}

W
webgrig, 2015-10-25
@webgrig

When I try to access the io object, it gives me an error and says that such a property does not exist.
The fact is that I use the simpleWebrtc script, and for some reason it does not create an io instance, so I need to get the same as you wrote but using the simpleWebrtc API. Here is the script itself:

// grab the room from the URL
            var room = location.search && location.search.split('?')[1];

            // create our webrtc connection
            var webrtc = new SimpleWebRTC({
                // the id/element dom element that will hold "our" video
                localVideoEl: 'localVideo',
                // the id/element dom element that will hold remote videos
                remoteVideosEl: '',
                // immediately ask for camera access
                autoRequestMedia: true,
                debug: false,
                detectSpeakingEvents: true,
                autoAdjustMic: false
            });

            // when it's ready, join if we got a room from the URL
            webrtc.on('readyToCall', function () {
                // you can name it anything
                if (room) webrtc.joinRoom(room);
            });

            function showVolume(el, volume) {
                if (!el) return;
                if (volume < -45) { // vary between -45 and -20
                    el.style.height = '0px';
                } else if (volume > -20) {
                    el.style.height = '100%';
                } else {
                    el.style.height = '' + Math.floor((volume + 100) * 100 / 25 - 220) + '%';
                }
            }
            webrtc.on('channelMessage', function (peer, label, data) {
                if (data.type == 'volume') {
                    showVolume(document.getElementById('volume_' + peer.id), data.volume);
                }
            });
            webrtc.on('videoAdded', function (video, peer) {
                console.log('video added', peer);
                var remotes = document.getElementById('remotes');
                if (remotes) {
                    var d = document.createElement('div');
                    d.className = 'videoContainer';
                    d.id = 'container_' + webrtc.getDomId(peer);
                    d.appendChild(video);
                    var vol = document.createElement('div');
                    vol.id = 'volume_' + peer.id;
                    vol.className = 'volume_bar';
                    video.onclick = function () {
                        console.log(video.style.width);
                        console.log(video.style.height);
                        video.style.width = video.videoWidth + 'px';
                        video.style.height = video.videoHeight + 'px';
                        console.log(video.style.width);
                        console.log(video.style.height);
                    };
                    d.appendChild(vol);
                    remotes.appendChild(d);
                }
            });
            webrtc.on('videoRemoved', function (video, peer) {
                console.log('video removed ', peer);
                var remotes = document.getElementById('remotes');
                var el = document.getElementById('container_' + webrtc.getDomId(peer));
                if (remotes && el) {
                    remotes.removeChild(el);
                }
            });
            webrtc.on('volumeChange', function (volume, treshold) {
                //console.log('own volume', volume);
                showVolume(document.getElementById('localVolume'), volume);
            });

            // Since we use this twice we put it here
            function setRoom(name) {
                //$('form').remove();
                //$('h1').text(name);
                //$('#subTitle').text('Link to join: ' + location.href);
                $('body').addClass('active');
            }
            if (room) {
                setRoom(room);
            } else {
                var val;
                webrtc.createRoom(val, function (err, name) {
                    console.log(' create room cb', arguments);

                    var newUrl = location.pathname + '?' + name;
                    if (!err) {
                        history.replaceState({foo: 'bar'}, null, newUrl);
                        setRoom(name);
                    } else {
                        console.log(err);
                    }
                });
            }

            var button = $('#screenShareButton'),
                setButton = function (bool) {
                    button.text(bool ? 'share screen' : 'stop sharing');
                };
            webrtc.on('localScreenStopped', function () {
                setButton(true);
            });

            setButton(true);

            button.click(function () {
                if (webrtc.getLocalScreen()) {
                    webrtc.stopScreenShare();
                    setButton(true);
                } else {
                    webrtc.shareScreen(function (err) {
                        if (err) {
                            setButton(true);
                        } else {
                            setButton(false);
                        }
                    });

                }
            });

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question