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

In den letzten Wochen hat sich viel bei WebRTC getan. Zeit für ein Update!

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

getUserMedia ist jetzt in Chrome ohne Flags sowie in Opera und Firefox Nightly/Aurora verfügbar. Für Firefox müssen Sie jedoch Einstellungen festlegen. Sehen Sie sich die browserübergreifende Demo von getUserMedia unter simpl.info/gum an und sehen Sie sich die beeindruckenden Beispiele von Chris Wilson für die Verwendung von getUserMedia als Eingabe für Web Audio an.

webkitRTCPeerConnection ist jetzt in der stabilen Chrome-Version verfügbar und es ist kein Flag erforderlich. Die Unterstützung von TURN-Servern ist ab Chrome 24 verfügbar. Unter simpl.info/pc finden Sie eine sehr 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 ist sie derzeit als webkitRTCPeerConnection bekannt. Andere Namen und Implementierungen wurden eingestellt. Wenn sich der Standardisierungsprozess stabilisiert hat, wird das Präfix webkit entfernt.)

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

DataChannel

DataChannel ist eine WebRTC-API für die Peer-to-Peer-Kommunikation beliebiger Daten mit hoher Leistung und niedriger Latenz. Die API ist einfach – ähnlich wie WebSocket –, aber die Kommunikation erfolgt direkt zwischen Browsern. Daher kann DataChannel viel schneller als WebSocket sein, selbst 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, hinter einem Flag. Es kann jedoch sein, dass es nicht in dieser Version enthalten ist. Dies dient nur zu Testzwecken, ist möglicherweise nicht voll funktionsfähig und die Kommunikation mit der Firefox-Implementierung ist 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. Vergessen Sie aber nicht, Ihre about:config-Einstellungen festzulegen.

Hier sehen Sie einen Screenshot von DataChannel in Firefox:

Screenshot von 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 soll Anfang 2013 in Firefox 18 veröffentlicht werden. Die Unterstützung für zusätzliche Funktionen wie getUserMedia und createOffer/Answer-Einschränkungen sowie TURN (um die Kommunikation zwischen Browsern hinter Firewalls zu ermöglichen) ist geplant.

Weitere Informationen zu WebRTC finden Sie unter Erste Schritte mit WebRTC. Es gibt sogar ein WebRTC-Buch, das als Druckausgabe und in verschiedenen E-Book-Formaten erhältlich ist.

Einschränkungen bei der Auflösung

Einschränkungen wurden in Chrome 24 und höher implementiert. Diese können verwendet werden, um Werte für die Videoauflösung für getUserMedia()- und RTCPeerConnection-addStream()-Aufrufe festzulegen.

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

Ein paar Fallstricke… getUserMedia-Einschränkungen, die in einem Browsertab festgelegt werden, wirken sich auf Einschränkungen für alle nachfolgend geöffneten Tabs aus. Wenn Sie einen unzulässigen Wert für Einschränkungen festlegen, wird eine eher 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 zu verwenden, nicht auf einem Server.

Streaming von Screenshots

Die Tab-Erfassung ist jetzt im Chrome-Entwicklerkanal verfügbar. So kann der sichtbare Bereich des Tabs als Stream erfasst werden, der dann lokal oder mit 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 Tab-Inhalten mit WebRTC.

Bitte geben Sie uns Feedback zu diesem Update, indem Sie es kommentieren. Wir sind gespannt, was Sie mit diesen APIs machen.

Vergessen Sie nicht, alle Fehler, die Sie finden, unter chromiumbugs.appspot.com zu melden.