diff --git a/examples/server-owned/src/index.js b/examples/server-owned/src/index.js index ebf3046..76ef7c9 100644 --- a/examples/server-owned/src/index.js +++ b/examples/server-owned/src/index.js @@ -43,10 +43,20 @@ import { JanusWhepServer } from '../../../src/whep.js'; // Create a test endpoint using a static token let endpoint = server.createEndpoint({ id: 'abc123', mountpoint: 1, token: 'verysecret' }); - endpoint.on('new-subscriber', function() { - console.log(this.id + ': Endpoint has a new subscriber'); + endpoint.on('new-subscriber', function(uuid) { + console.log(this.id + ': Endpoint has a new subscriber (' + uuid + ')'); + endpoint.notifySubscribers({ event: 'viewercount', data: ''+endpoint.countSubscribers() }); }); - endpoint.on('subscriber-gone', function() { - console.log(this.id + ': Endpoint subscriber left'); + endpoint.on('subscriber-sse', function(uuid, events) { + if(events) { + console.log(this.id + ': Subscriber ' + uuid + ' subscribed to SSE:', events); + this.getSubscriber({ uuid: uuid }).notify({ event: 'viewercount', data: ''+endpoint.countSubscribers() }); + } else { + console.log(this.id + ': Subscriber ' + uuid + ' unsubscribed from SSE'); + } + }); + endpoint.on('subscriber-gone', function(uuid) { + console.log(this.id + ': Endpoint subscriber left (' + uuid + ')'); + endpoint.notifySubscribers({ event: 'viewercount', data: ''+endpoint.countSubscribers() }); }); }()); diff --git a/examples/server-shared/src/index.js b/examples/server-shared/src/index.js index 1f07bb1..82b2644 100644 --- a/examples/server-shared/src/index.js +++ b/examples/server-shared/src/index.js @@ -42,13 +42,23 @@ import { JanusWhepServer } from '../../../src/whep.js'; await server.start(); // Create a test endpoint using a callback function to validate the token - let endpoint = server.createEndpoint({ id: 'abc123', mountpoint: 1, token: function(authtoken) { + let endpoint = server.createEndpoint({ id: 'abc123', sse: ['viewercount'], mountpoint: 1, token: function(authtoken) { return authtoken === 'verysecret'; }}); - endpoint.on('new-subscriber', function() { - console.log(this.id + ': Endpoint has a new subscriber'); + endpoint.on('new-subscriber', function(uuid) { + console.log(this.id + ': Endpoint has a new subscriber (' + uuid + ')'); + endpoint.notifySubscribers({ event: 'viewercount', data: ''+endpoint.countSubscribers() }); }); - endpoint.on('subscriber-gone', function() { - console.log(this.id + ': Endpoint subscriber left'); + endpoint.on('subscriber-sse', function(uuid, events) { + if(events) { + console.log(this.id + ': Subscriber ' + uuid + ' subscribed to SSE:', events); + this.getSubscriber({ uuid: uuid }).notify({ event: 'viewercount', data: ''+endpoint.countSubscribers() }); + } else { + console.log(this.id + ': Subscriber ' + uuid + ' unsubscribed from SSE'); + } + }); + endpoint.on('subscriber-gone', function(uuid) { + console.log(this.id + ': Endpoint subscriber left (' + uuid + ')'); + endpoint.notifySubscribers({ event: 'viewercount', data: ''+endpoint.countSubscribers() }); }); }()); diff --git a/examples/web/index.js b/examples/web/index.js index 5ce6f62..a940d5a 100644 --- a/examples/web/index.js +++ b/examples/web/index.js @@ -77,9 +77,24 @@ async function subscribeToEndpoint() { console.log('Got SDP:', sdp); resource = request.getResponseHeader('Location'); console.log('WHEP resource:', resource); - // TODO Parse ICE servers - // let ice = request.getResponseHeader('Link'); - let iceServers = [{urls: "stun:stun.l.google.com:19302"}]; + // FIXME Parse Link headers (for ICE servers and/or SSE) + let iceServers = []; + let links = request.getResponseHeader('Link'); + let l = links.split('<'); + for(let i of l) { + if(!i || i.length === 0) + continue; + if(i.indexOf('ice-server') !== -1) { + // TODO Parse TURN attributes + let url = i.split('>')[0]; + iceServers.push({ urls: url }); + } else if(i.indexOf('urn:ietf:params:whep:ext:core:server-sent-events') !== -1) { + // TODO Parse event attribute + let url = i.split('>')[0]; + let events = [ 'active', 'inactive', 'layers', 'viewercount' ]; + startSSE(url, events); + } + } // Create PeerConnection, if needed createPeerConnectionIfNeeded(iceServers); // Pass the SDP to the PeerConnection @@ -222,7 +237,6 @@ function createPeerConnectionIfNeeded(iceServers) { console.log('Handling Remote Track', event); if(!event.streams) return; - console.warn(event.streams[0].getTracks()); if($('#whepvideo').length === 0) { $('#video').removeClass('hide').show(); $('#videoremote').append('