WebRTC raggiunge Firefox, Android e iOS

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:

Screenshot di Firefox DataChannel

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.