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

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

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

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

webkitRTCPeerConnection теперь в стабильной версии Chrome и не имеет флагов. Поддержка сервера TURN доступна в Chrome 24 и выше. Существует сверхпростая демонстрация реализации RTCPeerConnection в Chrome на simpl.info/pc и отличное приложение для видеочата на 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 см. Getting Started With 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 !