Skip to content
Snippets Groups Projects
Select Git revision
  • 1038553da4ea48c71ea1ca8687300c9d056d0712
  • master default protected
  • v3-modify-mail
  • snyk-fix-207483a1e839c807f95a55077e86527d
  • translations_3b5aa4f3c755059914cfa23d7d2edcde_ru
  • translations_6e4a5e377a3e50f17e6402264fdbfcc6_ru
  • translations_3b5aa4f3c755059914cfa23d7d2edcde_fa_IR
  • translations_en-yml--master_fa_IR
  • snyk-fix-7d634f2eb65555f41bf06d6af930e812
  • translations_en-yml--master_ar
  • translations_3b5aa4f3c755059914cfa23d7d2edcde_el
  • jfederico-patch-1
  • v2
  • v3
  • v1
  • release-3.1.0.2
  • release-3.1.0.1
  • release-3.1.0
  • release-2.14.8.4
  • release-3.0.9.1
  • release-3.0.9
  • release-3.0.8.1
  • release-2.14.8.3
  • release-3.0.8
  • release-3.0.7.1
  • release-2.14.8.2
  • release-3.0.7
  • release-3.0.6.1
  • release-3.0.6
  • release-3.0.5.4
  • release-3.0.5.3
  • release-2.14.8.1
  • release-3.0.5.2
  • release-3.0.5.1
  • release-3.0.5
35 results

ForbiddenRouter.jsx

Blame
  • camera-receiver.js 4.35 KiB
    var server = 'https://' + window.location.hostname + ':8089/janus';
    
    var janus = null;
    var videoroomHandle = null;
    var remoteFeedHandle = null;
    var opaqueId = 'camera-receiver-' + Janus.randomString(12);
    
    var room = 1000;
    var source = null;
    
    document.addEventListener('DOMContentLoaded', function() {
    	parseRoomFromURL();
    
    	Janus.init({ debug: 'all', callback: function() {
    		if (!Janus.isWebrtcSupported()) {
    			Janus.error('No WebRTC support... ');
    			return;
    		}
    
    		janus = new Janus({
    			server,
    			success: function() {
    				janus.attach({
    					plugin: 'janus.plugin.videoroom',
    					opaqueId,
    					success: function(pluginHandle) {
    						videoroomHandle = pluginHandle;
    						Janus.log('Plugin attached! (' + videoroomHandle.getPlugin() + ', id=' + videoroomHandle.getId() + ')');
    
    						var viewButton = document.getElementById('view');
    						viewButton.removeAttribute('disabled');
    						viewButton.onclick = function() {
    							joinRoom();
    							viewButton.remove();
    							viewButton = null;
    						};
    					},
    					error: function(error) {
    						Janus.error('Error attaching plugin: ', error);
    					},
    					onmessage: handleMessagePublisher
    				});
    			},
    			error: function(error) {
    				Janus.error(error);
    				window.location.reload();
    			},
    			destroyed: function() {
    				Janus.error('Stopped');
    				window.location.reload();
    			}
    		});
    	}});
    });
    
    function handleMessagePublisher(msg, jsep) {
    	var event = msg['videoroom'];
    	if (event) {
    		if (event === 'joined') {
    			Janus.log('Successfully joined room ' + msg['room'] + ' with ID ' + msg['id']);
    			var publishers = msg['publishers'];
    			if (publishers && publishers.length !== 0) {
    				newRemoteFeed(publishers[0]['id']);
    			}
    		} else if (event === 'event') {
    			var publishers = msg['publishers'];
    			if (publishers && publishers.length !== 0) {
    				newRemoteFeed(publishers[0]['id']);
    			} else if (msg['leaving']) {
    				var leaving = msg['leaving'];
    				Janus.log('Publisher left: ' + leaving);
    				if (leaving === source) {
    					Janus.log('Publisher left');
    				}
    			} else if (msg['error']) {
    				Janus.log('handleMessagePublisher error: ' + msg['error']);
    			}
    		}
    	}
    	if (jsep) {
    		videoRoomHandle.handleRemoteJsep({ jsep });
    	}
    }
    
    function newRemoteFeed(id) {
    	source = id;
    	console.log('newRemoteFeed id: ' + id);
    	janus.attach({
    		plugin: 'janus.plugin.videoroom',
    		opaqueId,
    		success: function(pluginHandle) {
    			remoteFeedHandle = pluginHandle;
    			Janus.log('Plugin attached (listener)! (' + remoteFeedHandle.getPlugin() + ', id=' + remoteFeedHandle.getId() + ')');
    			var listen = {
    				request: 'join',
    				room,
    				ptype: 'listener',
    				feed: id
    			};
    			remoteFeedHandle.send({ message: listen });
    		},
    		error: function(error) {
    			Janus.error('Error attaching plugin (listener): ', error);
    		},
    		onmessage: handleMessageListener,
    		onremotestream: function(stream) {
    			if (document.getElementById('camera-feed') == null) {
    				var video = document.createElement('video');
    				video.setAttribute('id', 'camera-feed');
    				video.setAttribute('autoplay', '');
    				video.setAttribute('playsinline', '');
    				video.setAttribute('muted', 'muted');
    				document.getElementById('camera-container').appendChild(video);
    			}
    			Janus.attachMediaStream(document.getElementById('camera-feed'), stream);
    		},
    		oncleanup: function() {
    			Janus.log('Got a cleanup notification (remote feed ' + source + ')');
    		}
    	});
    }
    
    function handleMessageListener(msg, jsep) {
    	var event = msg['videoroom'];
    	if (event) {
    		if (event === 'attached') {
    			Janus.log('Successfully attached to feed ' + source + ' in room ' + msg['room']);
    		}
    	}
    	if (jsep) {
    		remoteFeedHandle.createAnswer({
    			jsep,
    			media: { audioSend: false, videoSend: false },
    			success: function(jsep) {
    				var body = {
    					request: 'start',
    					room
    				};
    				remoteFeedHandle.send({ message: body, jsep });
    			},
    			error: function(error) {
    				Janus.error('WebRTC error:', error);
    			}
    		});
    	}
    }
    
    function joinRoom() {
    	var register = {
    		request: 'join',
    		room,
    		ptype: 'publisher'
    	};
    	videoroomHandle.send({ message: register });
    }
    
    function parseRoomFromURL() {
    	var urlParams = new URLSearchParams(window.location.search);
    	var roomParam = urlParams.get('room');
    	if (roomParam != null && !isNaN(roomParam)) {
    		room = parseInt(roomParam);
    		console.log('Using room ' + room + ' from URL query string');
    	} else {
    		console.log('Got no valid room in URL query string, using default room ' + room);
    	}
    }