Медиавозможности html5. webrtc

41
WebRTC Константин Ершов, frontend meetup, Ярославль, 25.03.2015

Upload: oelifantiev

Post on 26-Jul-2015

486 views

Category:

Internet


1 download

TRANSCRIPT

Page 1: Медиавозможности HTML5. WebRTC

WebRTC

Константин Ершов,frontend meetup, Ярославль, 25.03.2015

Page 2: Медиавозможности HTML5. WebRTC

Real Time Communication

Page 3: Медиавозможности HTML5. WebRTC

Краткая история

Page 4: Медиавозможности HTML5. WebRTC

Краткая история

Page 5: Медиавозможности HTML5. WebRTC

Краткая история

Page 6: Медиавозможности HTML5. WebRTC

Краткая история

Page 7: Медиавозможности HTML5. WebRTC

WebRTC

Page 8: Медиавозможности HTML5. WebRTC

Принципы WebRTC

- open source

- стандартизированное API

- реализация в веб-браузерах

- эффективность по сравнению с существующими технологиями

Page 9: Медиавозможности HTML5. WebRTC

WebRTC APIs

- MediaStream (getUserMedia)

- RTCPeerConnection

- RTCDataChannel

Page 10: Медиавозможности HTML5. WebRTC

Получение медиа-потока

navigator.getUserMedia( {audio: true, video: true}, //constraints function(mediaStream){ //callback var src = window.URL.createObjectURL(mediaStream); document.getElementById('myVideo').src = src; }, function(err){ //errback console.error(err); });

Page 11: Медиавозможности HTML5. WebRTC

Получение медиа-потока

navigator.getUserMedia( {audio: true, video: true}, //constraints function(mediaStream){ //callback var src = window.URL.createObjectURL(mediaStream); document.getElementById('myVideo').src = src; }, function(err){ //errback console.error(err); });

Page 12: Медиавозможности HTML5. WebRTC

Получение медиа-потока

navigator.getUserMedia( {audio: true, video: true}, //constraints function(mediaStream){ //callback var src = window.URL.createObjectURL(mediaStream); document.getElementById('myVideo').src = src; }, function(err){ //errback console.error(err); });

Page 13: Медиавозможности HTML5. WebRTC

Получение медиа-потока

navigator.getUserMedia( {audio: true, video: true}, //constraints function(mediaStream){ //callback var src = window.URL.createObjectURL(mediaStream); document.getElementById('myVideo').src = src; }, function(err){ //errback console.error(err); });

Page 14: Медиавозможности HTML5. WebRTC

Что можно делать с потоком?

- Анализ, обработка

- Передача через RTCPeerConnection

Page 15: Медиавозможности HTML5. WebRTC

Обработка аудио

Page 16: Медиавозможности HTML5. WebRTC

Audio Context (Web Audio API)

Page 17: Медиавозможности HTML5. WebRTC

Примеры обработки аудио

- http://webaudiodemos.appspot.com/

- http://webaudioplayground.appspot.com/

- https://github.com/Dinahmoe/tuna - пачка гитарных эффектов =)

Page 18: Медиавозможности HTML5. WebRTC

Обработка видео

Page 19: Медиавозможности HTML5. WebRTC

Получение кадраvar video = document.getElementById('myVideo'), canvas = document.createElement('canvas'), context = canvas.getContext('2d'), width = 640, height = 480;

setInterval(function(){ context.drawImage(video, 0, 0, width, height); var pngData = canvas.toDataURL(); // do something with ’data:image/png;base64,<base64_data>’

}, 1000/15);

Page 20: Медиавозможности HTML5. WebRTC

Примеры обработки видео

- https://github.com/auduno/headtrackr/

- https://github.com/idevelop/ascii-camera

Page 21: Медиавозможности HTML5. WebRTC

Что можно делать с потоком?

- Анализ, обработка

- Передача через RTCPeerConnection

Page 22: Медиавозможности HTML5. WebRTC

RTCPeerConnection

Page 23: Медиавозможности HTML5. WebRTC

Информация для установки соединения

- offer/answer (информация о медиаданных, их типе и используемых кодеках)

- ice candidates (инфрмация о интерфейсах и портах для установки p2p соединения)

Page 24: Медиавозможности HTML5. WebRTC

Порядок установки соединения

offer

answer

ice candidates

Page 25: Медиавозможности HTML5. WebRTC

Порядок установки соединения

offer

signaling server

answer

ice candidates

Page 26: Медиавозможности HTML5. WebRTC

signaling signaling

media

Page 27: Медиавозможности HTML5. WebRTC

NAT

signaling signaling

NAT

Page 28: Медиавозможности HTML5. WebRTC

NATNAT

signaling signaling

stun

media

stun

Page 29: Медиавозможности HTML5. WebRTC

NATNAT

signaling signaling

turnmedia

turn

Page 30: Медиавозможности HTML5. WebRTC

Код

Page 31: Медиавозможности HTML5. WebRTC

var pc = new RTCPeerConnection({iceServers: [...]});navigator.getUserMedia({audio: true, video: true}, function(stream){ pc.addStream(stream); pc.createOffer(function(offer){ pc.setLocalDescription(offer); signalingChannel.send("offer", JSON.stringify({ offer })) }); pc.onicecandidate = function(event){/*send ice to signalingChannel*/};

pc.onaddstream = function (evt) {remoteVideoTag.src = URL.createObjectURL(evt.stream);};}, console.error);

signalingChannel.on("answer", function(answer){ pc.setRemoteDescription(new RTCSessionDescription(answer));};

signalingChannel.on("icecandidate", function(iceCandidate){ pc.addIceCandidate(new RTCIceCandidate(iceCandidate));};

Исходящий вызов

Page 32: Медиавозможности HTML5. WebRTC

var pc;signalingChannel.onoffer = function(sdpOffer){ pc = new RTCPeerConnection({iceServers: [...]}); navigator.getUserMedia({audio: true, video: true}, function(stream){ pc.addStream(stream); pc.setRemoteDescription(new RTCSessionDescription(sdpOffer), function(){ pc.createAnswer(function(answer){ pc.setLocalDescription(answer); signalingChannel.send("answer", JSON.stringify({ answer })) }) });

pc.onicecandidate = function(event){/*send ice to signalingChannel*/}; pc.onaddstream = function (evt) {remoteVideoTag.src = URL.createObjectURL(evt.stream);}; }, console.error);};

signalingChannel.on("icecandidate", function(iceCandidate){ pc.addIceCandidate(new RTCIceCandidate(iceCandidate));};

Входящий вызов

Page 33: Медиавозможности HTML5. WebRTC

RTCDataChannel

Page 34: Медиавозможности HTML5. WebRTC

Особенности

- возможность одновременного использования нескольких каналов

- возможность расстановки приоритетов

- надежная и ненадежная семантика доставки

- встроенная система безопасности (DTLS) и контроль перегрузки

- возможность использования с видео и без видео

Page 35: Медиавозможности HTML5. WebRTC

RTCDataChannel

var pc = new RTCPeerConnection({}, { optional: [{RtpDataChannels: true}]});

var channel = pc.createDataChannel("sendDataChannel", { reliable: false});

channel.send(JSON.stringify({}));

Page 36: Медиавозможности HTML5. WebRTC

RTCDataChannel

var pc = new RTCPeerConnection({}, { optional: [{RtpDataChannels: true}]});var channel;pc.ondatachannel = function(event){ channel = event.channel; channel.onmessage = function(event){ //handle message }};

Page 37: Медиавозможности HTML5. WebRTC

Инструменты разработчика

- chrome://webrtc-internals

- opera://webrtc-internals

- about:webrtc

Page 38: Медиавозможности HTML5. WebRTC
Page 39: Медиавозможности HTML5. WebRTC

Поддержка браузерами

26+

29+

18+

22+

Page 40: Медиавозможности HTML5. WebRTC
Page 41: Медиавозможности HTML5. WebRTC

Материалы

- http://www.html5rocks.com/en/tutorials/webrtc/basics/

- http://www.html5rocks.com/en/tutorials/webrtc/infrastructure/

- https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection

- https://www.webrtc-experiment.com/