From 06596c475d39f8adad8be7979e27ec334afe26ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Herv=C3=A1s=20Rodao?= Date: Mon, 28 Jun 2021 17:05:59 +0200 Subject: [PATCH] webRTC connection noVNC --- utils/stream/rtcstream.js | 189 -------------------------------------- vnc.html | 2 +- 2 files changed, 1 insertion(+), 190 deletions(-) delete mode 100644 utils/stream/rtcstream.js diff --git a/utils/stream/rtcstream.js b/utils/stream/rtcstream.js deleted file mode 100644 index dd6bcdb5..00000000 --- a/utils/stream/rtcstream.js +++ /dev/null @@ -1,189 +0,0 @@ -'use strict'; - -let stream; -let localStream; -let localPeer; -let remotePeer; - -const constraints = { - video: { - mediaSource: "screen", // whole screen sharing - //mediaSource: "window", // choose a window to share - //mediaSource: "application", // choose a window to share - width: {max: '1920'}, - height: {max: '1080'}, - frameRate: {max: '10'} - } -}; - -const offerOptions = { - OfferToReceiveAudio: 1, - OfferToReceiveVideo: 1 -}; - -var configuration = { - "iceServers": [{ "urls": "stun:stun.1.google.com:19302" }] -}; - -let iceCandidates = []; - - -function checkUsers() { - streamws.send( - JSON.stringify({ - type: "check-users", - }) - ); -} - -// Empezar el streaming local: -// 1. Desactivar el botón de start, localVideo.play(), -// obtener el media stream, establecer localVideo.srcObject = stream y -// dar valor a la variable localStream con el stream que hemos obtenido. -// 2. Crear la instancia de la RTCPeerConnection -// 3. Crear el handler del evento icecandidate -// 4. Añadir los media tracks del localStream para que sean enviadas -// al remote peer -// 5. Crear la oferta de candidato en el extremo local -// 6. Crear la descripción local de localPeer -async function startLocalStream(){ - console.log('[NOVNC] empezando stream local'); - // Obtener el stream del usuario - if(!canvas){ - console.log('[NOVNC] Error: no CANVAS'); - users = false; - return - } - stream = canvas.captureStream(); - - // Mostrar el video - localVideo.srcObject = stream; - - // Establecer cual es el localStream - localStream = stream; - - // Crear instancia de RTCPeerConnection - localPeer = new RTCPeerConnection(configuration); - - // Send candidate to the remote peer - localPeer.addEventListener('icecandidate', event => onIceCandidate(localPeer, event)); - - // Añadir los media tracks que genera el localStream a - // las tracks de localPeer para enviarlas al remote peer - localStream.getTracks().forEach(track => localPeer.addTrack(track, localStream)); - console.log('[NOVNC] Adding tracks'); - - // Crear oferta - localPeer.createOffer(offerOptions); - - // Establecer la descripcion de localPeer - localPeer.addEventListener('negotiationneeded', addLocalDescription(localPeer)); -} - -// Cuando recibo un socket del tipo offer: -// 1. Creo la instancia de la conexión RTC del extemo remoto -// 2. Creo el hadler para el evento icecandidate -// 3. Handler para recibir los mediatracks -// 4. Notifico si el estado del remotePeer cambia -// 5. Establezco la descripcion remota del extremo remoto -// 6. Crear respuesta y establecer la descripcion local del extremo remoto -// 7. Enviar un websocket con la respuesta al otro peer -async function startRemoteStream(offer){ - // Creo la instancia de la conexión remota - remotePeer = new RTCPeerConnection(configuration); - console.log('[NOVNC] RTC Remote Peer conection created'); - - // Handler para el evento icecandidate - // Send candidate to the remote peer - remotePeer.addEventListener('icecandidate', event => onIceCandidate(remotePeer, event)); - - // Recibir los media tracks del extremo local - remotePeer.ontrack = gotRemoteStream; - - // Notificar si el estado remoto cambia - remotePeer.oniceconnectionstatechange = () => console.log('Remote ice state ' + remotePeer.iceConnectionState); - - // Set remote description - try { - remotePeer.setRemoteDescription(offer); - console.log('[NOVNC] Remote description set'); - } catch (error) { - console.log(`[NOVNC] Set remote description error: ${error}`); - } - - try { - // Create answer - const answer = await remotePeer.createAnswer(); - // Set local description of remote peer - remotePeer.setLocalDescription(answer); - // Signal localStream peer with the answer - signalRemotePeer(JSON.stringify({ - 'type':'answer', - 'answer':answer - })); - }catch(error){ - console.log(`[NOVNC] Failed to create local session description ${error}`); - } - - -} - -function addIceCandidate(candidate) { - //var candidate = new RTCIceCandidate(cand) - if (localPeer === undefined) { - remotePeer.addIceCandidate(candidate); - } else { - localPeer.addIceCandidate(candidate); - } - console.log('[NOVNC] Candidate Added'); - // Crear set - } - -async function setAnswerDescription(answer){ - try { - localPeer.setRemoteDescription(answer); - console.log("[NOVNC] Local Peer remote description set"); - }catch(error){ - console.log(`[NOVNC] Failed setting local peer remote description ${error}`); - } -} - -// Añadir los candidatos a la lista de candidatos -function onIceCandidate(peer, event){ - if(event.candidate != null && event.candidate != undefined){ - console.log(`[NOVNC] onicecandidate event on ${peer}`); - // Send the candidate to the other peer via WebSockets - signalRemotePeer(JSON.stringify({ - 'type':'candidate', - 'candidate':event.candidate - })); - } -} - -async function addLocalDescription(peer) { - try { - const offer = await peer.createOffer(offerOptions); - peer.setLocalDescription(offer); - console.log(`[NOVNC] ${peer} local description set`); - signalRemotePeer(JSON.stringify({ - 'type':'offer', - 'offer':offer - })); - } catch(err) { - console.log(`[NOVNC] ${peer} error setting local description`); - } -} - -function signalRemotePeer(data){ - streamws.send(data); - console.log('[NOVNC] Signaling remote peer...'); -} - -function gotRemoteStream(e){ - console.log('[NOVNC] Got remote video: ', e.streams[0]); - if (remoteVideo.srcObject !== e.streams[0]) { - //rightVideo.play(); - remoteVideo.srcObject = e.streams[0]; - console.log('[NOVNC] pc2 received remote stream'); - } -} \ No newline at end of file diff --git a/vnc.html b/vnc.html index c281eaa4..f094e29c 100644 --- a/vnc.html +++ b/vnc.html @@ -324,7 +324,7 @@ - +