За последние несколько недель с 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:

Эта демо-версия находится по адресу 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 !