Nelle ultime settimane sono successe molte cose con WebRTC. È il momento di un aggiornamento.
In particolare, siamo davvero entusiasti di vedere WebRTC arrivare su più browser e piattaforme.
getUserMedia
è ora disponibile in Chrome senza flag, così come in Opera e Firefox Nightly/Aurora (anche se per Firefox dovrai impostare le preferenze). Dai un'occhiata alla demo cross-browser di getUserMedia
all'indirizzo simpl.info/gum e dai un'occhiata ai fantastici esempi di Chris Wilson relativi all'utilizzo di getUserMedia
come input per l'audio per il web.
webkitRTCPeerConnection
è ora nella versione stabile di Chrome e senza flag. Il supporto per i server TURN è disponibile in Chrome 24 e versioni successive. Puoi trovare una dimostrazione ultrasemplice dell'implementazione RTCPeerConnection di Chrome all'indirizzo simpl.info/pc e un'ottima applicazione di video chat all'indirizzo apprtc.appspot.com. (Un po' per spiegare il nome: dopo varie iterazioni, è attualmente noto come webkitRTCPeerConnection
. Altri nomi e implementazioni sono stati ritirati. Quando la procedura degli standard si sarà stabilizzata, il prefisso webkit
verrà rimosso).
WebRTC è stato implementato anche per computer desktop in Firefox Nightly e Aurora, nonché per iOS e Android tramite il browser Bowser Ericsson.
DataChannel
DataChannel è un'API WebRTC per la comunicazione peer-to-peer di dati arbitrari ad alte prestazioni, bassa latenza. L'API è semplice, simile a WebSocket, ma la comunicazione avviene direttamente tra i browser, quindi DataChannel può essere molto più veloce di WebSocket anche se è necessario un server inoltro (TURN) (quando si verifica un "buco buco" per far fronte ai firewall e i NAT non riusciti).
DataChannel è prevista per la versione 25 di Chrome, con un flag, anche se potrebbe non vedere questa versione. Questa versione sarà solo sperimentale, potrebbe non essere completamente funzionante e la comunicazione non sarà possibile con l'implementazione di Firefox. DataChannel nelle versioni successive dovrebbe essere più stabile e verrà implementato in modo da consentire l'interazione con DataChannel in Firefox.
Firefox Nightly/Aurora supporta mozGetUserMedia
, mozRTCPeerConnection
e DataChannel
(ma non dimenticare di impostare le preferenze about:config).
Ecco uno screenshot di DataChannel in esecuzione su Firefox:
Questa demo è disponibile all'indirizzo http://mozilla.github.com/webrtc-landing/data_test.html. Di seguito è riportato uno snippet di codice:
pc1.onconnection = function() {
log("pc1 onConnection ");
dc1 = pc1.createDataChannel("This is pc1",{}); // reliable (TCP-like)
dc1 = pc1.createDataChannel("This is pc1",{outOfOrderAllowed: true, maxRetransmitNum: 0}); // unreliable (UDP-like)
log("pc1 created channel " + dc1 + " binarytype = " + dc1.binaryType);
channel = dc1;
channel.binaryType = "blob";
log("pc1 new binarytype = " + dc1.binaryType);
// Since we create the datachannel, don't wait for onDataChannel!
channel.onmessage = function(evt) {
if (evt.data instanceof Blob) {
fancy_log("*** pc2 sent Blob: " + evt.data + ", length=" + evt.data.size,"blue");
} else {
fancy_log('pc2 said: ' + evt.data, "blue");
}
}
channel.onopen = function() {
log("pc1 onopen fired for " + channel);
channel.send("pc1 says Hello...");
log("pc1 state: " + channel.state);
}
channel.onclose = function() {
log("pc1 onclose fired");
};
log("pc1 state:" + channel.readyState);
}
Ulteriori informazioni e demo per l'implementazione di Firefox sono disponibili sul blog hacks.mozilla.org. Il supporto di WebRTC di base è previsto per il rilascio in Firefox 18 all'inizio del 2013. Sono inoltre supportate funzionalità aggiuntive, tra cui i vincoli getUserMedia
e createOffer/Answer, nonché TURN (per consentire la comunicazione tra browser dietro firewall).
Per ulteriori informazioni su WebRTC, consulta la guida introduttiva a WebRTC. C'è persino un libro WebRTC, disponibile nella versione cartacea e in diversi formati ebook.
Vincoli di risoluzione
Il vincolo è stato implementato in Chrome 24 e versioni successive. Possono essere utilizzati per impostare valori per la risoluzione video per le chiamate getUserMedia()
e RTCPeerConnection addStream()
.
Puoi trovare un esempio all'indirizzo simpl.info/getusermedia/constraints. Prova i diversi vincoli impostando un punto di interruzione e modificando i valori.
Un paio di trucchi... I vincoli getUserMedia
impostati in una scheda del browser influiscono sui vincoli per tutte le schede aperte successivamente. L'impostazione di un valore non consentito per i vincoli genera un messaggio di errore piuttosto criptico:
navigator.getUserMedia error: NavigatorUserMediaError {code: 1, PERMISSION_DENIED: 1}
Allo stesso modo, viene visualizzato l'errore se provi a utilizzare getUserMedia
dal file system locale, non su un server.
Acquisizione schermo in streaming
La funzionalità Acquisizione schede è ora disponibile nel canale Chrome Dev. In questo modo è possibile acquisire l'area visibile della scheda come flusso, che può essere quindi utilizzato localmente o con addStream()
di RTCPeerConnection. Molto utile per lo sceencasting e la condivisione delle pagine web. Per ulteriori informazioni, consulta la proposta relativa all'acquisizione di contenuti della scheda WebRTC.
Tienici informati commentando questo aggiornamento: ci piacerebbe sapere cosa stai facendo con queste API.
... e non dimenticarti di segnalare eventuali bug riscontrati all'indirizzo chromiumbugs.appspot.com.