WebRTC ist jetzt auch unter Firefox, Android und iOS verfügbar

In den letzten Wochen hat es bei WebRTC viele Neuerungen gegeben. Es ist Zeit für ein Update!

Wir freuen uns besonders, dass WebRTC in mehreren Browsern und auf mehreren Plattformen verfügbar ist.

getUserMedia ist jetzt ohne Flags in Chrome, Opera und Firefox Nightly/Aurora verfügbar. In Firefox müssen Sie jedoch Einstellungen festlegen. Sehen Sie sich die getUserMedia-Demo unter simpl.info/gum an, die plattformübergreifend funktioniert. Außerdem empfehlen wir die beeindruckenden Beispiele von Chris Wilson zur Verwendung von getUserMedia als Eingabe für Web Audio.

webkitRTCPeerConnection ist jetzt in der stabilen Chrome-Version verfügbar und erfordert kein Flag. Die Unterstützung von TURN-Servern ist in Chrome 24 und höher verfügbar. Unter simpl.info/pc finden Sie eine äußerst einfache Demo der RTCPeerConnection-Implementierung von Chrome und unter apprtc.appspot.com eine hervorragende Videochat-Anwendung. (Eine kurze Erklärung zum Namen: Nach mehreren Iterationen heißt es derzeit webkitRTCPeerConnection. Andere Namen und Implementierungen wurden eingestellt. Sobald sich der Standards-Prozess stabilisiert hat, wird das Präfix webkit entfernt.)

WebRTC wurde jetzt auch für den Desktop in Firefox Nightly und Aurora sowie für iOS und Android über den Browser Bowser von Ericsson implementiert.

DataChannel

DataChannel ist eine WebRTC API für die hochleistungsfähige, latenzfreie Peer-to-Peer-Kommunikation beliebiger Daten. Die API ist einfach und ähnelt WebSocket. Die Kommunikation erfolgt jedoch direkt zwischen den Browsern. Daher kann DataChannel viel schneller als WebSocket sein, auch wenn ein Relay-Server (TURN) erforderlich ist (wenn das „Hole Punching“ zur Bewältigung von Firewalls und NATs fehlschlägt).

DataChannel ist für Version 25 von Chrome geplant, aber erst nach der Veröffentlichung wird es aktiviert. Diese Funktion ist nur für Tests gedacht, ist möglicherweise nicht vollständig funktionsfähig und die Kommunikation ist mit der Firefox-Implementierung nicht möglich. DataChannel sollte in späteren Versionen stabiler sein und so implementiert werden, dass die Interaktion mit DataChannel in Firefox möglich ist.

Firefox Nightly/Aurora unterstützt mozGetUserMedia, mozRTCPeerConnection und DataChannel. Denken Sie aber daran, die about:config-Einstellungen festzulegen.

Hier ist ein Screenshot von DataChannel in Firefox zu sehen:

Screenshot des Firefox DataChannel

Diese Demo finden Sie unter http://mozilla.github.com/webrtc-landing/data_test.html. Hier ein Code-Snippet:

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);
        }

Weitere Informationen und Demos zur Firefox-Implementierung finden Sie im Blog hacks.mozilla.org. Die grundlegende WebRTC-Unterstützung wird Anfang 2013 in Firefox 18 eingeführt. Außerdem ist Unterstützung für weitere Funktionen geplant, darunter getUserMedia und Einschränkungen für createOffer/Answer sowie TURN (für die Kommunikation zwischen Browsern hinter Firewalls).

Weitere Informationen zu WebRTC finden Sie unter Einstieg in WebRTC. Es gibt sogar ein WebRTC-Buch, das in gedruckter Form und in mehreren E-Book-Formaten erhältlich ist.

Einschränkungen bei der Auflösung

Einschränkungen wurden in Chrome 24 und höher implementiert. Damit können Werte für die Videoauflösung für getUserMedia()- und RTCPeerConnection-addStream()-Anrufe festgelegt werden.

Ein Beispiel finden Sie unter simpl.info/getusermedia/constraints. Experimentieren Sie mit verschiedenen Einschränkungen, indem Sie einen Wendepunkt festlegen und Werte anpassen.

Ein paar Dinge, die Sie beachten sollten: getUserMedia Einschränkungen, die auf einem Browsertab festgelegt werden, wirken sich auf alle anschließend geöffneten Tabs aus. Wenn Sie einen unzulässigen Wert für Einschränkungen festlegen, wird eine ziemlich kryptische Fehlermeldung angezeigt:

navigator.getUserMedia error:  NavigatorUserMediaError {code: 1, PERMISSION_DENIED: 1}

Ebenso tritt der Fehler auf, wenn Sie versuchen, getUserMedia aus dem lokalen Dateisystem und nicht auf einem Server zu verwenden.

Bildschirmaufnahme beim Streamen

Die Tab-Aufzeichnung ist jetzt im Chrome Dev-Kanal verfügbar. So kann der sichtbare Bereich des Tabs als Stream erfasst werden, der dann lokal oder mit der addStream() von RTCPeerConnection verwendet werden kann. Sehr nützlich für Screencasting und das Teilen von Webseiten. Weitere Informationen finden Sie im Vorschlag zur Erfassung von WebRTC-Tab-Inhalten.

Wir freuen uns auf eure Kommentare zu diesem Update. Erzählt uns gern, was ihr mit diesen APIs macht.

...und vergiss nicht, alle Fehler unter chromiumbugs.appspot.com zu melden.