WebRTC появился в Firefox, Android и iOS

За последние несколько недель с WebRTC многое произошло. Время для обновления!

В частности, мы очень рады видеть появление WebRTC на нескольких браузерах и платформах.

getUserMedia теперь доступен в Chrome без флагов, а также в Opera и Firefox Nightly/Aurora (хотя для Firefox вам потребуется установить настройки ). Взгляните на кроссбраузерную демонстрацию getUserMedia по адресу simpl.info/gum — и ознакомьтесь с удивительными примерами Криса Уилсона по использованию getUserMedia в качестве входных данных для веб-аудио.

webkitRTCPeerConnection теперь находится в стабильной версии Chrome и не имеет флагов. Поддержка сервера TURN доступна в Chrome 24 и более поздних версиях. На simpl.info/pc есть сверхпростая демонстрация реализации Chrome RTCPeerConnection, а на apprtc.appspot.com — отличное приложение для видеочата. (Небольшое пояснение по поводу имени: после нескольких итераций оно в настоящее время известно как webkitRTCPeerConnection . Другие имена и реализации устарели. Когда процесс стандартизации стабилизируется, префикс webkit будет удален.)

WebRTC теперь также реализован для настольных компьютеров в Firefox Nightly и Aurora, а также для iOS и Android через браузер Ericsson Bowser .

Канал данных

DataChannel — это API WebRTC для высокопроизводительной одноранговой передачи произвольных данных с низкой задержкой. API прост и похож на WebSocket, но связь происходит напрямую между браузерами, поэтому DataChannel может быть намного быстрее, чем WebSocket, даже если требуется сервер ретрансляции (TURN) (когда «пробивание отверстий» для борьбы с брандмауэрами и NAT не удается).

DataChannel запланирован для версии 25 Chrome под флагом, хотя эта версия может отсутствовать. Это будет только для экспериментов, может быть не полностью функциональным, и связь с реализацией Firefox будет невозможна. DataChannel в более поздних версиях должен быть более стабильным и будет реализован таким образом, чтобы обеспечить взаимодействие с DataChannel в Firefox.

Firefox Nightly/Aurora поддерживает mozGetUserMedia , mozRTCPeerConnection и DataChannel (но не забудьте установить настройки about:config!)

Вот скриншот DataChannel, работающего в Firefox:

Скриншот канала данных Firefox

Эта демонстрация находится по адресу http://mozilla.github.com/webrtc-landing/data_test.html . Вот фрагмент кода:

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

Дополнительную информацию и демонстрационные версии реализации Firefox можно найти в блоге hacks.mozilla.org . Базовая поддержка WebRTC должна появиться в Firefox 18 в начале 2013 года, а также запланирована поддержка дополнительных функций, включая ограничения getUserMedia и createOffer/Answer, а также TURN (чтобы разрешить связь между браузерами за брандмауэрами).

Дополнительные сведения о WebRTC см. в разделе «Начало работы с WebRTC» . Есть даже книга WebRTC , доступная в печатном виде и в нескольких форматах электронных книг.

Ограничения разрешения

Ограничения реализованы в Chrome 24 и более поздних версиях . Их можно использовать для установки значений разрешения видео для вызовов getUserMedia() и RTCPeerConnection addStream() .

Пример можно найти по адресу simpl.info/getusermedia/constraints . Поиграйте с различными ограничениями, установив точку останова и изменив значения.

Пара ошибок... Ограничения getUserMedia , установленные на одной вкладке браузера, влияют на ограничения для всех вкладок, открываемых впоследствии. Установка недопустимого значения для ограничений дает довольно загадочное сообщение об ошибке:

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

Аналогично ошибка, если вы попытаетесь использовать getUserMedia из локальной файловой системы, а не на сервере!

Потоковое захват экрана

Tab Capture теперь доступен на канале Chrome Dev . Это позволяет захватывать видимую область вкладки в виде потока, который затем можно использовать локально или с помощью addStream() RTCPeerConnection. Очень полезно для трансляции сцен и обмена веб-страницами. Дополнительную информацию см. в предложении WebRTC Tab Content Capture .

Держите нас в курсе, комментируя это обновление: нам бы хотелось узнать, что вы делаете с этими API.

...и не забывайте сообщать обо всех обнаруженных ошибках на сайте chromiumbugs.appspot.com !