WebRTC ha bisogno di un backend?
WebRTC è senza alcun server nemmeno un server di segnalazione
Riepilogo
WebRTC è una suite di componenti che consente canali di media e media in tempo reale tra i browser. Tuttavia, richiede ancora un servizio back -end per alcune funzionalità. In questo articolo, esploreremo i motivi per cui è necessario un servizio di back -end, i componenti e l’hardware coinvolti nella configurazione di WebRTC, i codec audio e video supportati e l’importanza di una directory e un server storico.
1. Cos’è WebRTC?
WebRTC è una suite di componenti che consente agli sviluppatori di impostare i media e i canali di dati in tempo reale tra i browser. È stato creato da Google e contiene componenti chiave che vengono spediti in Chrome, Firefox, Opera e Microsoft Edge (ORTC).
2. Perché hai ancora bisogno di un servizio back -end?
Nonostante le capacità di WebRTC, è necessario un servizio back -end per alcune funzionalità. Ad esempio, per chiamare qualcuno, devi conoscere il loro indirizzo, che di solito è dinamico. Queste informazioni devono essere archiviate e gestite su un server. Inoltre, un servizio back -end può tenere traccia di tutti i dispositivi per un utente e avvisarli delle chiamate in arrivo.
3. Quali componenti e hardware sono coinvolti nella configurazione di WebRTC?
WebRTC aiuta a impostare l’ambiente fisico, come telecamere, altoparlanti e microfoni, nonché altri hardware come l’annullamento dell’eco e l’annullamento dello sfondo hardware. Aiuta anche a configurare la rete utilizzando STUT (Session Traversal Utilities per NAT).
4. Quali codec audio sono supportati da WebRTC?
WebRTC supporta vari codec audio tra cui G711, ILBC e OPUS. Opus è un codec variabile di alta qualità ampiamente utilizzato in WebRTC.
5. Quali codec video sono supportati da WebRTC?
WebRTC supporta i codec VP8 e VP9, che sono le variazioni di Google-Royalty-Free di H.264/h.265. Supporta anche h.264.
6. Perché i codec audio sono importanti in WebRTC?
Codec audio gestiscono attività come perdita di pacchetti, codifica e decodifica dell’audio, correzione degli errori, cancellazione del rumore, cancellazione dell’eco e livellamento del volume. Contribuiscono alla popolarità di WebRTC su dispositivi mobili e desktop.
7. Qual è la directory di chi è disponibile per chiamare?
Per avviare una chiamata, è necessario conoscere l’indirizzo del destinatario. La directory funge da pagine bianche dinamiche, consentendo agli utenti di effettuare il check -in con un server e fornire informazioni di contatto. Questo può essere implementato utilizzando protocolli XMPP, SIP o personalizzati.
8. Perché hai bisogno di un server stordente?
Un server STOR (Session Traversal Utilities for NAT) aiuta a determinare l’indirizzo IP esterno di un dispositivo e controlla se due dispositivi possono comunicare direttamente. Ha un ruolo cruciale nello stabilire connessioni tra i coetanei.
9. Cos’è un server di svolta?
Se non è possibile una sessione peer-to-peer a causa delle limitazioni del firewall, è necessaria una svolta (attraversamento che utilizza relè intorno a NAT). Aiuta a trasmettere dati tra i dispositivi bypassando le restrizioni del firewall.
10. Perché dovresti prendere in considerazione l’utilizzo di un servizio di backend come Sinch?
Impostare e mantenere i server per la segnalazione, lo stordizione e la svolta può essere complesso e costoso. Sinch, come fornitore di servizi di backend, offre soluzioni scalabili ed economiche. Gestiscono un miliardo di minuti all’anno e forniscono SDK WEBRTC ottimizzati per dispositivi e condizioni di rete diverse.
11. WebRTC è solo sul backend?
No, WebRTC coinvolge aspetti del frontend e del backend. Sinch, ad esempio, personalizza e configura il loro WebRTC SDK per garantire prestazioni ottimali tra i dispositivi e le condizioni di rete. Implementano funzionalità come Adaptive Opus per regolare la qualità di registrazione in base a metriche di qualità dal traffico.
12. Quali sono i vantaggi dell’utilizzo di Sinch?
Sinch offre esperienza nelle comunicazioni in tempo reale e fornisce SDK WEBRTC personalizzati, codec ottimizzati e una rete distribuita. I loro prezzi per il trasferimento dei dati sono convenienti e garantiscono una comunicazione a bassa latenza attraverso server posizionati strategicamente.
13. Quanto è evidente la latenza della rete in una conversazione?
Circa 250 ms di latenza della rete sono evidenti durante una conversazione. Fattori come la latenza di rete, il tempo di elaborazione e la codifica dei dati possono contribuire alla latenza generale.
14. Quali funzionalità fornisce un servizio back -end in WebRTC?
Un servizio di backend gestisce attività come la gestione della directory, la segnalazione, la gestione dei server stordi e il monitoraggio dei dispositivi per gli utenti.
15. Cosa rende popolare WebRTC su dispositivi mobili e desktop?
Il supporto di WebRTC per i codec audio e video, insieme alla sua facilità d’uso e alle funzionalità in tempo reale, contribuisce alla sua popolarità su dispositivi mobili e desktop.
WebRTC è senza alcun server nemmeno un server di segnalazione
Quindi, apri due schede nel browser (o in due browser diversi) e inserisci Localhost: 7000. Come accennato in precedenza, è meglio avere due telecamere disponibili per questo esempio. Se tutto va bene, dovresti vedere un feed video in ciascuna delle schede.
WebRTC e perché hai ancora bisogno di un servizio back -end
Unisciti alla comunità di Dzone e ottieni l’esperienza completa dei membri.
Questo articolo è apparso originariamente sul blog Sinch di Christian Jensen.
Cos’è WebRTC?
WebRTC è una suite di componenti basati da un paio di innovazioni da aziende che Google ha acquistato nel 2010. WebRTC consente a uno sviluppatore di impostare multimediali in tempo reale e canali di dati tra due browser (o cellulari se lo compili per questo). Contiene un paio di componenti chiave e sono tutti spediti in Chrome, Firefox e Opera, ed esiste una versione in Microsoft’S nuovo browser Edge (ORTC).
Impostazione di flussi di dati e hardware
WebRTC aiuta a creare sia l’ambiente fisico (come telecamere, altoparlanti e microfoni) sia altri hardware (come l’annullamento dell’eco e l’hardware di cancellazione di sfondo – quelli che troverai principalmente nei cellulari), oltre a aiutare a capire la rete insieme a stordi.
Codec audio e codec video
Uno dei vantaggi principali che utilizzano WebRTC rispetto ad altri software quando si tratta di audio e video in tempo reale è il codec open source/royalty che Google è abbastanza gentile da spedire.
Codec audio
- G711, utilizzato in normali reti telefoniche
- ILBC, codificata a banda stretta, utilizzata anche nelle reti telefoniche
- Opus, una variabile di alta qualità e codec (supporto per adattivo) che è il più recente in codec utilizzato in WebRTC.
Ce ne sono più spediti, ma questi sono quelli principali e quelli più usati.
Codec video
- VP8 e presto VP9, questo è Google’S Variazione di una royalty free h.264/h.265 Codec
- H.264 (aggiunto nel 2015 come accordo per ORTC)
I codec audio fanno molto del lavoro per te, prendendosi cura della perdita di pacchetti, codifica e decodifica dell’audio, correzione degli errori, cancellazione del rumore, cancellazione dell’eco, livellamento del volume e altro ancora. Il fatto che contenga codec lo rende anche estremamente popolare su dispositivi mobili e desktop.
Quindi, ora posso costruire la mia chiamata basata sul browser in puro javascript utilizzando (aggiungi il tuo framework JS lato client preferito). Sfortunatamente, questo’non è così semplice per impostare una chiamata poiché mancano due cose principali qui.
Directory of Who è disponibile per chiamare (o pari alla scoperta)
Per chiamare qualcuno, devi conoscere l’indirizzo e, a differenza dei normali numeri di telefono, l’indirizzo su Internet è principalmente indirizzi IP dinamici. Per risolverlo, devi tenere registrato dove sono tutti. Questo può essere fatto in diversi modi usando XMPP, SIP, protocolli personalizzati, ecc., Ma tutto si riduce a chi chiunque sia pronto a ricevere una chiamata che fa il check -in con un server in un modo o nell’altro e fa sapere al server come contattare quel peer (implicito per un’ulteriore consegna di offerta/invito/SDP ecc.).
Pensalo come una pagine bianche totalmente dinamiche. Questo di solito viene fatto su intervalli a tempo per mantenere i firewall o simili aperti per il server di segnalazione per avvisare il client se qualcuno vuole comunicare con loro. Quindi, questo è il primo pezzo che devi costruire sopra.
Successivamente probabilmente vuoi tenere traccia di tutti i dispositivi per un determinato utente e avvisarli su tutti i dispositivi se c’è una chiamata. Usando Sinch, ci prendiamo cura di questa parte per te.
Server stordente
Dopo che il server di segnalazione ha individuato un dispositivo e invia un’offerta, è necessario un server stordente. Il server storico faciliterà per determinare l’indirizzo IP esterno e se i due (o più) dispositivi possono parlarsi direttamente. Sinch si prenderà cura di questo anche per te.
Media Relay Server (Turn Server)
Se non è possibile una sessione peer-to-peer (i nostri dati suggeriscono che ciò rappresenta circa il 25% delle sessioni), avrai bisogno di un server a turno. Il server di svolta sostanzialmente sposterà i bit per te attraverso fori aperti nel firewall tra i due client. Perché accade questo? Il più comune sono i firewall asimmetrici e la possibilità di puntare i buchi su porte diverse nei firewall.
Ok, ma perché Don’L’ho impostato da solo?
Bene, potresti. Questo potrebbe essere un po ‘eccessivo e sarà richiesta un’altra competenza nel tuo team operativo. I tuoi server a turno e stordimento saranno probabilmente fortemente utilizzati e costosi. Ed ecco dove arrivano l’economia scalabile. Poiché Sinch sta facendo oltre un miliardo di minuti all’anno, i nostri prezzi per il trasferimento dei dati sono più economici di quanto la maggior parte delle aziende possa ottenere.
Probabilmente vuoi avere anche una rete distribuita. Se ad esempio hai il tuo server di turno in u.S. E le chiamate sono in corso tra i clienti in Europa, aggiungerai latenza solo perché tutto il traffico deve attraversare l’oceano. Una buona regola empirica è che circa 250 ms è evidente in una conversazione (più informazioni sulla qualità delle informazioni del servizio qui). Quindi, senza aggiungere alcuna latenza di rete sul client e il tempo di elaborazione per codificare i dati, è fondamentalmente garantito per avere troppa latenza tra i clienti.
Si tratta solo di backend?
Esso’non solo sul backend. A Sinch abbiamo una vasta esperienza di comunicazioni in tempo reale e stiamo personalizzando e configurando il nostro SDK WebRTC per lavorare al meglio su tutti i dispositivi e in diverse condizioni di reti. Un paio di esempi sono l’implementazione di Opus Adaptive, che regolerà la qualità di registrazione in base alle metriche di qualità dal nostro traffico. Sappiamo anche quali codec utilizzare in circostanze specifiche e quali selezionare per ridurre al minimo il transcodifica e la latenza in tutto il mondo.
Pubblicato a Dzone con il permesso di Christian Jensen . Guarda l’articolo originale qui.
Le opinioni espresse dai collaboratori di Dzone sono loro.
WebRTC è senza alcun server nemmeno un server di segnalazione?
Sto cercando di impostare un plug -in a cordova per iOS che implementa le funzioni WebRTC senza usare alcun server e lo farà essere utilizzato solo su una rete locale. So che c’è questo plugin, che sembra promettente ma ho dei problemi con esso. Il mio piano non è quello di utilizzare un trun, stordire o qualsiasi tipo di server di segnalazione. Forse pensi in questo momento: “Ok non è possibile. Nessuna segnalazione equivale a nessuna connessione.“Ma lasciami spiegare prima. Come sottolineato qui e qui è possibile evitare di utilizzare un server TRUN, ST stravante o ICE. Penso che questo sia un buon modo per iniziare il mio progetto, ma c’è ancora una domanda aperta. Come si trovano i dispositivi se non esiste alcun tipo di segnalazione (nell’esempio usano un nodo.server js)? In questo momento sto giocando con l’idea di un codice QR che contiene tutte le informazioni necessarie. Alla fine dovrebbe apparire così (gli arrwos neri sono più importanti): l’idea è che tutti coloro che entrano in una stanza debbano scansionare un codice QR sul RP e quindi il dispositivo conosce l’IP, la porta, ecc. di RP e una connessione WebRTC con un datachannel sarà stabilita. Sto cercando una risposta da giorni ormai, ma a causa del fatto (o almeno uno dei motivi) che WebRTC non è nemmeno supportato su iOS Nativly non ci sono molti esempi WebRTC là fuori che lavorano su iOS e nessuno per una rete locale. Quindi la mia domanda è: sono sul modo giusto o non è nemmeno possibile? (Non ho trovato alcun esempio per questo da nessuna parte, ma se metto tutti i post che leggo insieme, penso che dovrebbe essere possibile.)
Chiesto il 10 agosto 2017 alle 12:38
3.257 3 3 badge d’oro 11 11 badge d’argento 19 19 badge di bronzo
Non importa come risolvi Discovery, ma per stabilire una connessione WebRTC, è necessario ottenere i messaggi di offerta e rispondere tra i pari in qualche modo. Quei messaggi contengono automaticamente candidati al ghiaccio se si aspetta prima che la raccolta del ghiaccio. Vedi StackOverflow.com/a/29056385/918910.
WEBRTC: un esempio funzionante
Di recente ho dovuto usare WebRTC per un semplice progetto. La tecnologia stessa ha molti vantaggi ed è sviluppata come standard aperto, senza la necessità di alcun plugin. Tuttavia, ero abbastanza nuovo in WebRTC e ho avuto alcuni problemi a ottenere la testa attorno ai concetti di base, oltre a creare una soluzione di lavoro. Ci sono molti tutorial disponibili (come questo, che ha ispirato la mia soluzione). Ma la maggior parte di loro è incompleta, obsoleta o mi ha costretto a utilizzare alcuni servizi di terze parti (E.G. Google Firebase), che ha reso l’intero processo solo più complicato da configurare e più difficile da capire.
Ho deciso di mettere insieme le informazioni da tutte quelle risorse e creare un esempio semplice e funzionante di un’applicazione WebRTC. Non richiede servizi di terze parti se non si desidera utilizzarlo su una rete pubblica (nel qual caso possedere un server sarebbe davvero d’aiuto). Spero che fornisca un buon punto di partenza per tutti coloro che sono interessati a esplorare WebRTC.
Questo non sarà un tutorial completo della tecnologia WebRTC. Puoi trovare molti tutorial e spiegazioni dettagliate su Internet, ad esempio qui. Puoi anche controllare l’API WebRTC se vuoi maggiori informazioni. Questo post ti mostrerà un possibile esempio di lavoro di WebRTC e spiegherà come funziona.
Descrizione generale
Il codice sorgente completo di questo esempio è disponibile su GitHub. Il programma è composto da tre parti:
- applicazione web
- Server di segnalazione
- Gira il server
IL applicazione web è molto semplice: un file HTML e un file JavaScript (più una dipendenza: PRESA.io.js, che è incluso nel repository). È progettato per funzionare con solo due client (due browser Web o due schede dello stesso browser). Una volta aperto nel browser (testato su Firefox 74), chiederà il permesso di utilizzare la fotocamera e il microfono. Una volta concessa l’autorizzazione, il video e l’audio da ciascuna delle schede verranno trasmessi in streaming all’altro.
Nota: potresti riscontrare alcuni problemi se si tenta di accedere alla stessa fotocamera da entrambe le schede. Nel mio test, io’Ve ha usato due dispositivi durante il test sulla mia macchina (una fotocamera per laptop incorporata e una webcam USB).
IL Server di segnalazione viene utilizzato dalle applicazioni WebRTC per scambiare informazioni richieste per creare una connessione diretta tra i peer. Puoi scegliere qualsiasi tecnologia che desideri per questo. Questo esempio utilizza WebSocket (Python-Socketio sul backend e PRESA.io-client sul frontend).
IL GIRO Il server è richiesto se si desidera utilizzare questo esempio su una rete pubblica. Il processo è ulteriormente descritto in questo post. Per i test di rete locale, non ne avrai bisogno.
Segnalazione
Il server di segnalazione è scritto in Python3 e sembra questo:
da AioHttp Import Web Import Socketio Room = 'Room' SIO = Socketio.Asyncserver (cors_allowed_origins = '*') app = Web.Applicazione () SIO.allegato (app) @sio.Event Async Def Connect (Sid, Environ): Print ('Connected', Sid) Aspetta SIO.EMIT ('Ready', Room = Room, Skip_Sid = Sid) SIO.Enter_room (sid, stanza) @sio.Evento Def Disconnect (SID): SIO.Leave_room (sid, stanza) stampa ('disconnesso', sid) @sio.Event Async Def Data (SID, Data): Print ('Messaggio da <>: <>'.Formato (Sid, dati)) Abbi Sio.emit ('data', data, room = room, skip_sid = sid) se __name__ == '__main__': Web.run_app (app, porta = 9999)
Ogni cliente si unisce alla stessa stanza. Prima di entrare nella stanza, a pronto L’evento viene inviato a tutti i clienti attualmente nella stanza. Ciò significa che la prima connessione WebSocket non riceverà alcun messaggio (la stanza è vuota), ma quando viene stabilita la seconda connessione, la prima riceverà un pronto evento, segnalare che ci sono almeno due clienti nella stanza e che la connessione WebRTC può iniziare. A parte questo, questo server inoltrerà qualsiasi dati (dati evento) che viene inviato da un websocket all’altro.
L’impostazione è abbastanza semplice:
PIP di segnalazione CD Installa Aiohttp Python-Socketio Python Server.Py
Questo avvierà il server di segnalazione a Localhost: 9999.
WEBRTC
Il processo semplificato di utilizzo di WebRTC in questo esempio sembra questo:
- Entrambi i clienti ottengono i loro flussi di media locali
- Una volta ottenuto il flusso, ogni client si collega al server di segnalazione
- Una volta che il secondo client si collega, il primo riceve a pronto evento, il che significa che la connessione WebRTC può essere negoziata
- Il primo client crea un oggetto RTCPeerConnection e invia un’offerta al secondo client
- Il secondo client riceve l’offerta, crea un oggetto RTCPeerConnection e invia una risposta
- Ulteriori informazioni vengono anche scambiate, come i candidati al ghiaccio
- Una volta negoziata la connessione, viene chiamato un callback per la ricezione di un flusso remoto e quel flusso viene utilizzato come fonte del video elemento.
Se si desidera eseguire questo esempio su LocalHost, Signaling Server e l’applicazione Web sono tutto ciò di cui hai bisogno. La parte principale del file HTML è un singolo elemento video (quale fonte verrà impostata in seguito dallo script):
Esempio di lavoro WebRTC
La parte JavaScript è un po ‘più complicata e io’Spiegalo passo dopo passo. Innanzitutto, ci sono le variabili di configurazione:
// Configura variabili const segnalazione_server_url = 'http: // localhost: 9999'; const pc_config = <>;
Per localhost, Pc_config può rimanere vuoto e Segnalazione_server_url dovrebbe indicare il server di segnalazione’VE è iniziato nel passaggio precedente.
Successivamente, abbiamo i metodi di segnalazione:
let socket = io (segnalazione_server_url, < autoConnect: false >); PRESA.on ('data', (data) => < console.log('Data received: ',data); handleSignalingData(data); >); PRESA.su ('pronta', () => < console.log('Ready'); createPeerConnection(); sendOffer(); >); Lascia che SendData = (Data) => < socket.emit('data', data); >;
In questo esempio, vogliamo connetterci al server di segnalazione solo dopo aver ottenuto il flusso multimediale locale, quindi dobbiamo impostare . A parte questo, abbiamo un invia i dati metodo che emette a dati evento, e reagiamo al dati Evento gestendo le informazioni in arrivo in modo appropriato (di più in seguito). Inoltre, ricevere un pronto evento significa che entrambi i clienti hanno ottenuto i loro flussi multimediali locali e si sono collegati al server di segnalazione, in modo da poter creare una connessione dalla nostra parte e negoziare un’offerta con il lato remoto.
Successivamente, abbiamo le variabili relative a WebRTC:
Lascia che PC; Lascia che LocalStream; Let RemoteStreamElement = Documento.QuerySelector ('#RemoteStream');
IL PC Terrà la nostra connessione tra pari, Localstream è il flusso che otteniamo dal browser e RemoteStreamElement è il video elemento che useremo per visualizzare il flusso remoto.
Per ottenere il flusso multimediale dal browser, useremo getlocalstream metodo:
Sia getLocalstream = () => < navigator.mediaDevices.getUserMedia(< audio: true, video: true >) .Quindi ((stream) => < console.log('Stream found'); localStream = stream; // Connect after making sure that local stream is availble socket.connect(); >) .catch (errore => < console.error('Stream not found: ', error); >); >
Come puoi vedere, ci connetteremo al server di segnalazione solo dopo che si ottiene il flusso (audio e video). Si prega di notare che tutti i tipi e le variabili relativi a WebRTC (come navigatore, RTCPeerConnection, eccetera.) sono forniti dal browser e non richiedono di installare nulla.
La creazione di una connessione tra pari è relativamente semplice:
Let CreatePeerConnection = () => < try < pc = new RTCPeerConnection(PC_CONFIG); pc.onicecandidate = onIceCandidate; pc.onaddstream = onAddStream; pc.addStream(localStream); console.log('PeerConnection created'); >cattura (errore) < console.error('PeerConnection failed: ', error); >>;
I due callback che useremo sono onicecandidate (chiamato quando il lato remoto ci invia un candidato al ghiaccio) e Onaddstream (Chiamato dopo il lato remoto aggiunge il suo flusso multimediale locale alla sua connessione tra pari).
Successivamente abbiamo la logica dell’offerta e della risposta:
Lascia che mandaffer = () => < console.log('Send offer'); pc.createOffer().then( setAndSendLocalDescription, (error) => < console.error('Send offer failed: ', error); >); >; Lascia che sendanswer = () => < console.log('Send answer'); pc.createAnswer().then( setAndSendLocalDescription, (error) => < console.error('Send answer failed: ', error); >); >; let setAndSendLocaldescription = (sessionDescription) => < pc.setLocalDescription(sessionDescription); console.log('Local description set'); sendData(sessionDescription); >;
I dettagli della negoziazione di offerta WebRTC non fanno parte di questo post (controlla la documentazione WebRTC se si desidera saperne di più sul processo). Esso’S abbastanza da sapere che una parte invia un’offerta, l’altra reagisce ad essa inviando una risposta e entrambe le parti usano la descrizione per le loro corrispondenti connessioni peer.
I callback WebRTC sembrano così:
let oniceCandidate = (event) => < if (event.candidate) < console.log('ICE candidate'); sendData(< type: 'candidate', candidate: event.candidate >); >>; let onaddstream = (event) => < console.log('Add stream'); remoteStreamElement.srcObject = event.stream; >;
I candidati ICE ricevuti vengono inviati all’altro cliente e quando l’altro client imposta il flusso multimediale, reagiamo utilizzandolo come fonte per il nostro video elemento.
L’ultimo metodo viene utilizzato per gestire i dati in arrivo:
let handlesignalingdata = (data) => < switch (data.type) < case 'offer': createPeerConnection(); pc.setRemoteDescription(new RTCSessionDescription(data)); sendAnswer(); break; case 'answer': pc.setRemoteDescription(new RTCSessionDescription(data)); break; case 'candidate': pc.addIceCandidate(new RTCIceCandidate(data.candidate)); break; >>;
Quando riceviamo un’offerta, creiamo la nostra connessione tra pari (quella remota è pronta in quel punto). Quindi, impostiamo la descrizione remota e inviamo una risposta. Quando riceviamo la risposta, abbiamo semplicemente impostato la descrizione remota della nostra connessione tra pari. Infine, quando un candidato ICE viene inviato dall’altro cliente, lo aggiungiamo alla nostra connessione tra pari.
E infine, per avviare effettivamente la connessione WebRTC, dobbiamo solo chiamare getlocalstream:
// Avvia connessione getLocalstream ();
In esecuzione su localhost
Se hai avviato il server di segnalazione nel passaggio precedente, devi solo ospitare i file HTML e JavaScript, ad esempio come questo:
CD Web Python -M HTTP.Server 7000
Quindi, apri due schede nel browser (o in due browser diversi) e inserisci Localhost: 7000. Come accennato in precedenza, è meglio avere due telecamere disponibili per questo esempio. Se tutto va bene, dovresti vedere un feed video in ciascuna delle schede.
Oltre localhost
Potresti essere tentato di utilizzare questo esempio su due computer diversi nella rete locale, sostituendo Localhost con la tua macchina’S Indirizzo IP, E.G. 192.168.0.11. Noterai rapidamente che non lo fa’t funziona, e il tuo browser lo afferma navigatore è indefinito.
Ciò accade perché WebRTC è progettato per essere sicuro. Ciò significa che per lavorare ha bisogno di un contesto sicuro. In poche parole: tutte le risorse (nel nostro caso il server HTTP e il server di segnalazione) devono essere ospitate su LocalHost o utilizzando HTTPS. Se il contesto non è sicuro, navigatore non sarà definito e non ti sarà permesso di accedere ai media utente.
Se si desidera testare questo esempio su macchine diverse, utilizzando localhost se ovviamente non un’opzione. La configurazione dei certificati non fa parte di questo post e non è affatto un compito facile. Se vuoi solo controllare rapidamente questo esempio su due computer diversi, puoi usare un semplice trucco. Invece di ospitare le risorse su HTTPS, è possibile abilitare il contesto insicuro in Firefox. Vai a Informazioni su: config, accettare il rischio e modificare i valori di queste due variabili VERO:
- media.dispositivi.insicuro.abilitato
- media.getusermedia.insicuro.abilitato
Dovrebbe sembrare come questo:
Ora dovresti essere in grado di accedere all’applicazione Web su due computer diversi e la connessione WebRTC dovrebbe essere stabilita correttamente.
Andare globale
Puoi usare questo esempio su una rete pubblica, ma è’S richiederò un po ‘più di lavoro. Innanzitutto, è necessario impostare un server di svolta. In poche parole, i server Turn sono usati per scoprire i pari WebRTC su una rete pubblica. Sfortunatamente, per questo passaggio, avrai bisogno di un server pubblicamente visibile. La buona notizia è che, una volta che hai il tuo server, il processo di configurazione sarà abbastanza semplice (almeno per un sistema operativo basato su Ubuntu). IO’VE ha trovato molte informazioni utili in questa discussione sullo stack overflow, e io’Sono solo per copiare i pezzi più importanti qui:
sudo apt install coturn turnserver -a -o -v -n --no -dtls --no -tls -u nome utente: credenziale -r regnomname
Questo avvierà un server di svolta utilizzando la porta 3478. Le bandiere significano:
- -UN: Usa il meccanismo delle credenziali a lungo termine
- -o: Avvia il processo come Daemon (distacco dalla shell di corrente)
- -V: ‘Moderare’ Modalità verbosa
- -N: Non utilizzare il file di configurazione, prendi solo tutti i parametri dalla riga di comando
- –No-dtls: non avviare ascoltatori di client DTLS
- –No-TLS: Non avviare ascoltatori di clienti TLS
- -u: Account utente, nel modulo ‘Nome utente: password’, per credenziali a lungo termine
- -R: Il regno predefinito da utilizzare per gli utenti
Modifica: per verificare se la configurazione del server di svolta è corretta, è possibile utilizzare questo validatore. Per testare l’esempio sopra, è necessario inserire i seguenti valori:
Clic “Aggiungi server”, Rimuovi altri server e seleziona “Raccogli candidati”. Se ottieni un componente di tipo relè, Ciò significa che la tua configurazione funziona.
Successivamente, è necessario modificare un po ‘la configurazione della connessione peer. Modificare principale.js, Sostituzione Con un IP reale del tuo server:
const Turn_server_url = ': 3478'; const Turn_server_username = 'nome utente'; const Turn_server_credential = 'credenziale'; const pc_config = < iceServers: [ < urls: 'turn:' + TURN_SERVER_URL + '?transport=tcp', username: TURN_SERVER_USERNAME, credential: TURN_SERVER_CREDENTIAL >, < urls: 'turn:' + TURN_SERVER_URL + '?transport=udp', username: TURN_SERVER_USERNAME, credential: TURN_SERVER_CREDENTIAL >]>;
Naturalmente, dovrai anche ospitare il tuo server di segnalazione e l’applicazione Web stessa su un IP pubblico e devi cambiare Segnalazione_server_url appropriatamente. Una volta fatto ciò, questo esempio dovrebbe funzionare per due macchine connesse a Internet.
Conclusione
Questo è solo uno degli esempi di ciò che puoi fare con WebRTC. La tecnologia non si limita a audio e video, può essere utilizzata per scambiare qualsiasi dati. Spero che tu abbia trovato questo post utile e che ti aiuterà a iniziare con le tue idee!
Risultati del sondaggio: e gli sviluppatori WebRTC dicono ..
Abbiamo eseguito un breve sondaggio per sviluppatori con BlogGeek.io un paio di settimane fa (vedi questo post). Abbiamo ricevuto 97 intervistati a partire da venerdì scorso, 1 agosto. Tsahi ha selezionato casualmente 3 vincitori – li ha già contattati, quindi se non hai ricevuto la sua e -mail, ci dispiace dire che non hai vinto 2 ebook gratuiti. Tuttavia, hai ancora diritto a uno sconto del 20% e dovresti aver ricevuto un’e -mail con istruzioni con codici coupon.
97 intervistati non sono certamente una dimensione del campione statisticamente valida da un pool di migliaia di sviluppatori WebRTC attivi (forse di più), ma ci sono diversi punti dati utili che possiamo estrarre dai dati.
Tipi di sviluppatori
La nostra directory degli strumenti per sviluppatori è divisa in queste opzioni ad eccezione di Devops. Un anno fa non esistevano strumenti specifici per WebRTC. Sto iniziando a saperne di più e mi aspetto che sarà più sostanziale “attrezzo” categoria nel prossimo futuro.
Dovrebbe esserci più sviluppatori di frontend che back-end, quindi è un po ‘sorprendente che il backend abbia mostrato per primo. Non c’erano molti sviluppatori di Web del frontend puro (vedi un paio di tavoli verso il basso). WebRTC generalmente non funziona senza uno sviluppo backend da qualche parte (eccezione notevole con il progetto WebRTC senza server) qui). Puoi Xaas da qualcun altro, ma questo implica un certo costo. Questo potrebbe significare che WebRTC è ancora difficile per la maggior parte degli sviluppatori di frontend puri.
Allo stesso modo, Nativo è piuttosto lontano dalla lista. Nella mia esperienza, il nativo è ancora piuttosto difficile da fare senza sborsare un po ‘di denaro per gli SDK a pagamento. Noi’Vedrò come questo cambia su Android con WebRTC nativo in arrivo su Android-L in arrivo.
Questa era l’unica domanda che era una multiseletta, il che significa che gli intervistati potevano scegliere quanti erano appropriati. Più di ogni altra cosa, sono stato sorpreso di vedere la maggior parte degli intervistati fare più di un tipo di sviluppo, con un terzo che fa 3 o più:
Tipi di dev selezionati | # | % |
1 | 41 | 42% |
2 | 22 | 23% |
3 | 25 | 26% |
4 | 3 | 3% |
5 | 6 | 6% |
Conteggio degli intervistati che hanno selezionato più di un tipo di sviluppatore per conteggio
Questo mi ha fatto curare domande come:
- Gli sviluppatori di back-end conoscono più diversi tipi di sviluppo rispetto agli sviluppatori nativi?
- Quali tipi di sviluppo tendono ad essere superset degli altri?
Ecco la completa tabulazione:
Web frontend | Web back -end | Nativo | Telecom | Devops | |
Web frontend | 100% | 84% | 32% | 29% | 23% |
Web back -end | 78% | 100% | 30% | 37% | 27% |
Nativo | 72% | 72% | 100% | 36% | 28% |
Telecom | 37% | 51% | 21% | 100% | 21% |
Devops | 72% | 89% | 39% | 50% | 100% |
Percentuale di intervistati che hanno selezionato più di un tipo di sviluppatore per tipo di sviluppatore
Sulla base di questo set di dati (e assumendo la veridicità), gli sviluppatori di DevOps tendono ad avere più abilità in altre aree. Gli sviluppatori nativi conoscono molto davanti e back-end.
E qual era il gruppo che era più probabile per notare una sola abilità di sviluppo: Telecom; Quasi la metà degli intervistati di telecomunicazioni elencati “telecom” con nient’altro. Gli intervistati delle telecomunicazioni sono o sono modesti o hanno bisogno di rafforzare il loro set di abilità rispetto ai loro coetanei in altre categorie.
Tipo di dev | 1 | 2 | 3 | 4 | 5 | Somma totale |
Web frontend | 14% | 30% | 39% | 5% | 11% | 100% |
Web back -end | 10% | 33% | 42% | 5% | 10% | 100% |
Telecom | 47% | 12% | 21% | 7% | 14% | 100% |
Nativo | 20% | 8% | 40% | 8% | 24% | 100% |
Devops | 11% | 0% | 50% | 6% | 33% | 100% |
Numero di tipi di sviluppatori selezionati come percentuale del tipo di dev TIPO per tipo di sviluppo
Framework front-end
Questo mi ha fatto curare personalmente e molti altri membri del team di Webrtchacks. Uno dei libri del premio dopo tutto riguarda Angular. Ultimamente ho usato jQuery per i miei progetti e mi sono chiesto se esiste un modo migliore in quanto considero applicazioni più sofisticate.
“Altro” è stata una risposta significativa qui: all’interno di quel gruppo JQuery è apparso 4 volte (4%). Nulla o personalizzato è stato notato da 8 (8%)
Framework e strumenti di back-end
Innanzitutto, ci scusiamo per aver trascurato di mettere un “altro” categoria qui. Un’altra opzione avrebbe dovuto essere lì dentro. Senza avere un “altro” Opzione, è difficile prevedere quanti ne avrebbero scelto, ma è sicuro dire che ciò avrebbe abbassato le risposte per gli articoli di cui sopra di almeno diversi punti percentuali.
Nessuna grande sorpresa sulle risposte sopra, ma ero curioso di vedere come questo corrispondesse ai vari tipi di sviluppatori:
Tipo di sviluppatore | ||||||
Framework/ strumento | Totale | Web frontend | Web back -end | Nativo | Telecom | Devops |
Nodo.js | 36% | 46% | 43% | 24% | 30% | 33% |
Giava | 20% | 16% | 20% | 20% | 19% | 11% |
Python o Rails | 14% | 13% | 12% | 16% | 16% | 22% |
Asterisk || Freeswitch | 12% | 4% | 5% | 8% | 23% | 17% |
PHP | 10% | 14% | 13% | 20% | 5% | 6% |
.NETTO | 7% | 7% | 7% | 12% | 7% | 11% |
Scheda incrociata di framework/strumento domanda vs. Tipo di sviluppatore mostrato come % del totale della colonna
Nessuna tendenza ovvie qui oltre a una preferenza generale per il nodo.js. Sono stato un po ‘sorpreso di vedere Telecom Così frammentato: mi sarei aspettato un cluster più forte attorno a strumenti di telecomunicazione più tradizionali come Java e Asterisk/FreeSwitch. Ricorda che questi dati vengono in qualche modo oscurati perché la domanda di tipo sviluppatore è una multi-selezione.
Strumenti specifici WebRTC e XAA
Avevamo anche una domanda a forma libera per consentire agli intervistati di inserire qualsiasi strumento che stiano usando. L’86% degli intervistati è entrato in qualcosa. Di seguito è riportato un ad eccezione di tutti gli strumenti menzionati più di una volta:
Chi’S il prossimo per WebRTC – IE, Safari o iOS?
Non molto da aggiungere qui. Possiamo continuare a controllare lo stato.moderno.cioè per le ultime novità su Internet Explorer. Buona fortuna cercando di capire cosa farà Apple.
Come imparare a conoscere WebRTC?
È bello vedere che abbiamo un pubblico fedele con Webrtchacks in arrivo �� . Ce n’erano anche 4 “altro” Risposte (4%) per GitHub. Questo mi ricorda di menzionare che ho raddrizzato la pagina GitHub di WebBrtChacks per i miei progetti.
Pensieri finali
I miei tatti principali erano:
- Nodo.JS, Angular e EASYRTC vincono questo concorso di popolarità.
- DevOps fa un aspetto significativo: questo potrebbe essere indicatore che WebRTC sta diventando pronto per la produzione.
- Le capacità di sviluppo delle telecomunicazioni sono piuttosto basse, ma non basse come lo sviluppo nativo e i devop
- Le abilità di telecomunicazione sono le più concentrate: i nostri intervistati con abilità di telecomunicazione devono ampliare i loro set di abilità di sviluppo per includere più web
Vorrei sicuramente farlo di nuovo in futuro e dargli una spinta più ampia per migliorare il tasso di risposta. Nel frattempo noi’Tieni aperto il sondaggio – non esitate a rispondere se non l’hai già fatto. Noi’LL check-in su di esso periodicamente e aggiorna questo post come necessario.
Se vuoi fare la tua analisi o vedere come taglio i dati, puoi visualizzare i risultati grezzi (meno eventuali informazioni identificative) e il mio file di lavoro qui.
Puoi anche dare un’occhiata a Tsahi’S post sui risultati qui.
Grazie ancora a tutti gli intervistati: i tuoi contributi continuano ad aiutare la comunità WebRTC!