SlideShare a Scribd company logo
1 of 52
Download to read offline
Profile 
yuta suzuki 
Trifort inc. 
developer(?) 
HTML / CSS / Javascript 
Travel
Agenda 
WebRTCの概要 
ブラウザ間通信の手順 
を使った実装 
まとめ
WebRTCの概要
WebRTCはリアルタイムWebの 
新しいカタチ
従来の通信方法 
WebRTC 
概要
従来の通信方法 
WebRTC 
概要 
テキストデータ 
音声・ビデオ
リアルタイム・コミュニケーション 
RTCはReal Time Communicationの略 
ブラウザからカメラやマイクを使用 
ブラウザ間の双方通信(P2P)を可能にする 
概要
対応ブラウザ非対応ブラウザ 
2014年8月時点 
対応ブラウザ
よくある勘違い
何もしなくても、そこのページに入ったら 
自動で通信が開始するんだよね? 
Case 1 
Q
after Case 1 
A 
アクセス時に乱数のidが発行され、それを 
相手のブラウザに認識させる必要があります。
Case 2 
Q 
ブラウザ同士で通信できるってことは 
サーバーとかネットワークの知識は必要ない?
そんなことはなく、サーバー、 
ネットワークの知識は必要です。 
Case 2 
A
ネットワークのお話
WebRTCはネットワーク上の問題を抱えています
WebRTCのネットワーク問題 
PCはNAT配下のプライベートIPアドレスを持つマシンで動いています。その為 
そのままでは相手がどこにいるのか分かりません。 
プライベートIPアドレスはルーターが割り振っています。 
?
NAT(Network Address Translation) 
プライベートIPアドレス 
192.168.0.15 
グローバルIPアドレス 
192.168.0.15 
203.0.113.100 
PC 
サーバー 
送信元 
送信先 
203.0.113.100 
ルーター 
サーバー 
送信元 
送信先 
203.0.113.100 
198.51.100.20 
198.51.100.20
NAT(Network Address Translation) 
203.0.113.100 
プライベートIPアドレス 
192.168.0.15 
サーバー 
グローバルIPアドレス 
192.168.0.15 
PC 
送信元 
送信先 
203.0.113.100 
サーバー 
ルーター 
送信元 
送信先 
203.0.113.100 
198.51.100.20 
198.51.100.20
NAT(Network Address Translation) 
プライベートIPアドレス? 
なに、それ???
それを解決する為に、2つのサーバーを使用します
ICEサーバー 
Signalingサーバー
ICEサーバーとは? 
ICEはInteractive Connectivity Establishmentの略です。 
NATを越える為に使用するサーバー。 
ICEサーバーには、STUNサーバー/TURNサーバーがあります。
STUNサーバー 
STUNサーバーはSimple Traversal of UDP through NATsの略 
でNATを突破する為に使用するサーバーです。 
自分の外側から見た情報(グローバルIP、プライベートIPやポートなど) 
を取得することができます。 
TURNサーバー 
TURNサーバーはTraversal Using Relay NATの略でSTUNサーバ 
が繋がらなかった場合に補助として設定している事が多いです。 
しかし、パケットがリレーする方式で通信するのでP2P通信ではなく 
なってしまいます。その為、CPUやネットワークの負荷が高くなりや 
すい傾向があります。
ICEサーバー 
Signalingサーバー
Signalingサーバーとは? 
相手を見つける為のマッチング用のサーバー。 
今回はnode.js、WebSocketで実装。
ブラウザ間通信までの手順
ICEサーバー 
(STUNサーバー) 
Signalingサーバー 
(WebSocket)
ICEサーバー 
(STUNサーバー) 自分の 
Signalingサーバー 
(WebSocket) 
ネットワーク情報 
を要求!
ICEサーバー 
(STUNサーバー) 自分の 
Signalingサーバー 
(WebSocket) 
ネットワーク情報 
を取得!
ICEサーバー 
(STUNサーバー) 
Signalingサーバー 
(WebSocket) 
接続候補情報 
を送信!
ICEサーバー 
(STUNサーバー) 
Signalingサーバー 
(WebSocket) 
接続候補情報 
を取得!
ICEサーバー 
(STUNサーバー) 
Signalingサーバー 
(WebSocket) 
接続候補情報 
を取得!
ICEサーバー 
(STUNサーバー) 
Signalingサーバー 
(WebSocket) 
接続候補情報 
を取得! 
P2P通信開始の 
オファーを送信!
ICEサーバー 
(STUNサーバー) 
Signalingサーバー 
(WebSocket) 
接続候補情報 
オファをー取を得受!信!
ICEサーバー 
(STUNサーバー) 
Signalingサーバー 
(WebSocket) 
接続候補情報 
を取得! 
P2P通信開始の 
許可を送信!
ICEサーバー 
(STUNサーバー) 
Signalingサーバー 
(WebSocket) 
接続候補情報 
を取得! 
許可を受信!
ICEサーバー 
(STUNサーバー) 
Signalingサーバー 
(WebSocket) 
接続候補情報 
を取得! 
P2P通信開始!
を使った実装
とは? 
WebRTCを利用したP2Pのデータ、ビデオ、 
オーディオ通信を簡単に実現することができるライブラリです。 
通信状態に影響される繊細な処理を吸収 
P2Pの接続できるまでの複雑な処理を簡略化 
NTTがこのpeer.jsをベースにしたSkyWayという 
プラットフォームを開発 
最新のVer.は0.3.9
の取得
Peerオブジェクトの作成 
var peer = new Peer({ 
key: 'xxxxxxxxxx', 
config: { 
'iceServers': [ 
{ url: ‘stun:stun.l.google.com:19302'} 
] 
} 
});
メディアへの接続 
navigator.getUserMedia = navigator.getUserMedia || 
navigator.webkitGetUserMedia || navigator.mozGetUserMedia; 
navigator.getUserMedia( 
{audio: true, video: true}, 
function success(stream){ 
var target = document.getElementById("my-video"); 
target.src = URL.createObjectURL(stream); 
window.localStream = stream; 
}, 
function error(){ 
console.log("mediaに接続できません"); 
} 
);
P2Pの接続開始 
peer.on('open', function(){ 
socket.emit("sendId",peer.id); 
});
先に接続している人はsocketで受信 
socket.on('connect', function() { 
socket.on(“getId",function(id){ 
var remoteCall = peer.call(id, window.localStream); 
remoteCall.on('stream', function(stream){ 
var video = '<li data-id="' + id + '"><video 
autoplay src="' + URL.createObjectURL(stream) + '"></ 
video></li>'; 
element.innerHTML += video; 
}); 
}); 
});
P2Pのエラーイベント 
peer.on('error', function(evt){ 
console.log(evt); 
});
まとめ
まとめ 
ブラウザ通信は接続してから行われます。 
メディアを起動して接続するまでの仕組みを 
含めて、WebRTCです。 
WebSocketとWebRTCはよく比較対象に 
されますが、用途が違います。 
IE、Safariの動きに注目。
ご清聴ありがとうございました。
参考 
■ W3C 
http://www.w3.org/TR/webrtc/ 
! 
■ HTML5Experts.jp 
http://html5experts.jp/mganeko/5554/ 
! 
■ HTML5rocks 
http://www.html5rocks.com/ja/tutorials/webrtc/datachannels/ 
! 
■ tjun memo 
http://tjun.org/blog/2013/12/webrtc_p2p/ 
! 
■ NullPointer's Blog 
http://paulownia.hatenablog.com/entry/20120506/1336324323 
! 
■ Publickey 
http://www.publickey1.jp/blog/12/webrtchtml5_conference_2012.html 
! 
■ WebブラウザでP 2 Pを実現する WebRTCのAPIと周辺技術 
http://www.slideshare.net/yoshiakisugimoto9/webrtc-slide

More Related Content

What's hot

WebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample updateWebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample updatemganeko
 
WebRTC/ORTCの最新動向まるわかり!
WebRTC/ORTCの最新動向まるわかり!WebRTC/ORTCの最新動向まるわかり!
WebRTC/ORTCの最新動向まるわかり!Yusuke Naka
 
WebRTC配信とハードウェアエンコーダ
WebRTC配信とハードウェアエンコーダWebRTC配信とハードウェアエンコーダ
WebRTC配信とハードウェアエンコーダtnoho
 
AWS CDKに魅入られた PHPer がオススメする
AWS CDKに魅入られた PHPer がオススメするAWS CDKに魅入られた PHPer がオススメする
AWS CDKに魅入られた PHPer がオススメするTaichi Inaba
 
WebブラウザでC#実行 WebAssemblyの技術
WebブラウザでC#実行 WebAssemblyの技術WebブラウザでC#実行 WebAssemblyの技術
WebブラウザでC#実行 WebAssemblyの技術Sho Okada
 
テストコードの DRY と DAMP
テストコードの DRY と DAMPテストコードの DRY と DAMP
テストコードの DRY と DAMPYusuke Kagata
 
IoT用途で簡単に使えるWebRTC Engineを作った話
IoT用途で簡単に使えるWebRTC Engineを作った話IoT用途で簡単に使えるWebRTC Engineを作った話
IoT用途で簡単に使えるWebRTC Engineを作った話ToshiyaNakakura1
 
WebRTCの技術解説 第二版 公開版 本編
WebRTCの技術解説 第二版 公開版 本編WebRTCの技術解説 第二版 公開版 本編
WebRTCの技術解説 第二版 公開版 本編Contest Ntt-west
 
WebRTC SFU mediasoup sample
WebRTC SFU mediasoup sampleWebRTC SFU mediasoup sample
WebRTC SFU mediasoup samplemganeko
 
いまどき(これから)のPHP開発
いまどき(これから)のPHP開発いまどき(これから)のPHP開発
いまどき(これから)のPHP開発Kenjiro Kubota
 
プロが解説!Hinemosによる運用管理テクニック!
プロが解説!Hinemosによる運用管理テクニック!プロが解説!Hinemosによる運用管理テクニック!
プロが解説!Hinemosによる運用管理テクニック!hinemos_atomitech
 
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansaiHisateru Tanaka
 
とにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みるとにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みるMasatoshi Tada
 
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Masahito Zembutsu
 
PHP の GC の話
PHP の GC の話PHP の GC の話
PHP の GC の話y-uti
 
WebRTCハンズオン
WebRTCハンズオンWebRTCハンズオン
WebRTCハンズオンYusuke Naka
 
TRICK 2022 Results
TRICK 2022 ResultsTRICK 2022 Results
TRICK 2022 Resultsmametter
 
スマホアプリ開発者のためのWeb api開発入門の入門
スマホアプリ開発者のためのWeb api開発入門の入門スマホアプリ開発者のためのWeb api開発入門の入門
スマホアプリ開発者のためのWeb api開発入門の入門Kenyu Miura
 

What's hot (20)

WebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample updateWebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample update
 
WebRTCで動かす“テレイグジスタンス”ロボット
WebRTCで動かす“テレイグジスタンス”ロボットWebRTCで動かす“テレイグジスタンス”ロボット
WebRTCで動かす“テレイグジスタンス”ロボット
 
WebRTC/ORTCの最新動向まるわかり!
WebRTC/ORTCの最新動向まるわかり!WebRTC/ORTCの最新動向まるわかり!
WebRTC/ORTCの最新動向まるわかり!
 
WebRTC配信とハードウェアエンコーダ
WebRTC配信とハードウェアエンコーダWebRTC配信とハードウェアエンコーダ
WebRTC配信とハードウェアエンコーダ
 
AWS CDKに魅入られた PHPer がオススメする
AWS CDKに魅入られた PHPer がオススメするAWS CDKに魅入られた PHPer がオススメする
AWS CDKに魅入られた PHPer がオススメする
 
WebブラウザでC#実行 WebAssemblyの技術
WebブラウザでC#実行 WebAssemblyの技術WebブラウザでC#実行 WebAssemblyの技術
WebブラウザでC#実行 WebAssemblyの技術
 
テストコードの DRY と DAMP
テストコードの DRY と DAMPテストコードの DRY と DAMP
テストコードの DRY と DAMP
 
IoT用途で簡単に使えるWebRTC Engineを作った話
IoT用途で簡単に使えるWebRTC Engineを作った話IoT用途で簡単に使えるWebRTC Engineを作った話
IoT用途で簡単に使えるWebRTC Engineを作った話
 
WebRTCの技術解説 第二版 公開版 本編
WebRTCの技術解説 第二版 公開版 本編WebRTCの技術解説 第二版 公開版 本編
WebRTCの技術解説 第二版 公開版 本編
 
WebRTC SFU mediasoup sample
WebRTC SFU mediasoup sampleWebRTC SFU mediasoup sample
WebRTC SFU mediasoup sample
 
いまどき(これから)のPHP開発
いまどき(これから)のPHP開発いまどき(これから)のPHP開発
いまどき(これから)のPHP開発
 
プロが解説!Hinemosによる運用管理テクニック!
プロが解説!Hinemosによる運用管理テクニック!プロが解説!Hinemosによる運用管理テクニック!
プロが解説!Hinemosによる運用管理テクニック!
 
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
 
とにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みるとにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みる
 
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
 
PHP の GC の話
PHP の GC の話PHP の GC の話
PHP の GC の話
 
WebRTCハンズオン
WebRTCハンズオンWebRTCハンズオン
WebRTCハンズオン
 
TRICK 2022 Results
TRICK 2022 ResultsTRICK 2022 Results
TRICK 2022 Results
 
nginx入門
nginx入門nginx入門
nginx入門
 
スマホアプリ開発者のためのWeb api開発入門の入門
スマホアプリ開発者のためのWeb api開発入門の入門スマホアプリ開発者のためのWeb api開発入門の入門
スマホアプリ開発者のためのWeb api開発入門の入門
 

Similar to WebRTCとPeer.jsを使った実装

ビデオ通話・P2Pがコモディティ化する世界 WebRTCによるこれからを探る
ビデオ通話・P2Pがコモディティ化する世界 WebRTCによるこれからを探るビデオ通話・P2Pがコモディティ化する世界 WebRTCによるこれからを探る
ビデオ通話・P2Pがコモディティ化する世界 WebRTCによるこれからを探るKensaku Komatsu
 
Magic Leap で WebRTC 触ってみた
Magic Leap で WebRTC 触ってみたMagic Leap で WebRTC 触ってみた
Magic Leap で WebRTC 触ってみたNishoMatsusita
 
レポート
レポートレポート
レポートxin song
 
websocket-survery
websocket-surverywebsocket-survery
websocket-surveryhogemaru_
 
レポート
レポートレポート
レポートxin song
 
WebRTC Boot Camp (WebRTC Conference Japan 2016) 事前公開版
WebRTC Boot Camp (WebRTC Conference Japan 2016) 事前公開版WebRTC Boot Camp (WebRTC Conference Japan 2016) 事前公開版
WebRTC Boot Camp (WebRTC Conference Japan 2016) 事前公開版You_Kinjoh
 
SkyWayで作るボイスチャット
SkyWayで作るボイスチャットSkyWayで作るボイスチャット
SkyWayで作るボイスチャットtioken
 
Vuzix Developer Conference
Vuzix Developer ConferenceVuzix Developer Conference
Vuzix Developer ConferenceKeiji Ariyama
 
はじめてのWeb of Things
はじめてのWeb of ThingsはじめてのWeb of Things
はじめてのWeb of ThingsSaki Homma
 
はじめてのWeb of Things
はじめてのWeb of ThingsはじめてのWeb of Things
はじめてのWeb of ThingsSaki Homma
 
ひとつひとつ組み上げてみていくビデオチャットアプリのアーキテクチャ
ひとつひとつ組み上げてみていくビデオチャットアプリのアーキテクチャひとつひとつ組み上げてみていくビデオチャットアプリのアーキテクチャ
ひとつひとつ組み上げてみていくビデオチャットアプリのアーキテクチャKoki Kumagai
 
WebRTCについて
WebRTCについてWebRTCについて
WebRTCについてBeMarble
 
今、本当に“オープン”が必要なそのワケ ブロケードが考えるNFVの今、SDNへの未来とは?
今、本当に“オープン”が必要なそのワケ ブロケードが考えるNFVの今、SDNへの未来とは?今、本当に“オープン”が必要なそのワケ ブロケードが考えるNFVの今、SDNへの未来とは?
今、本当に“オープン”が必要なそのワケ ブロケードが考えるNFVの今、SDNへの未来とは?Brocade
 
WebRTCと ORTCについて 整理しておこう
WebRTCとORTCについて整理しておこうWebRTCとORTCについて整理しておこう
WebRTCと ORTCについて 整理しておこう彰 村地
 
JavaプログラマのためのWebSocket概要
JavaプログラマのためのWebSocket概要JavaプログラマのためのWebSocket概要
JavaプログラマのためのWebSocket概要Shumpei Shiraishi
 

Similar to WebRTCとPeer.jsを使った実装 (20)

WebRTCについて
WebRTCについてWebRTCについて
WebRTCについて
 
ビデオ通話・P2Pがコモディティ化する世界 WebRTCによるこれからを探る
ビデオ通話・P2Pがコモディティ化する世界 WebRTCによるこれからを探るビデオ通話・P2Pがコモディティ化する世界 WebRTCによるこれからを探る
ビデオ通話・P2Pがコモディティ化する世界 WebRTCによるこれからを探る
 
Magic Leap で WebRTC 触ってみた
Magic Leap で WebRTC 触ってみたMagic Leap で WebRTC 触ってみた
Magic Leap で WebRTC 触ってみた
 
レポート
レポートレポート
レポート
 
websocket-survery
websocket-surverywebsocket-survery
websocket-survery
 
レポート
レポートレポート
レポート
 
WebRTC Boot Camp (WebRTC Conference Japan 2016) 事前公開版
WebRTC Boot Camp (WebRTC Conference Japan 2016) 事前公開版WebRTC Boot Camp (WebRTC Conference Japan 2016) 事前公開版
WebRTC Boot Camp (WebRTC Conference Japan 2016) 事前公開版
 
SkyWayで作るボイスチャット
SkyWayで作るボイスチャットSkyWayで作るボイスチャット
SkyWayで作るボイスチャット
 
Vuzix Developer Conference
Vuzix Developer ConferenceVuzix Developer Conference
Vuzix Developer Conference
 
はじめてのWeb of Things
はじめてのWeb of ThingsはじめてのWeb of Things
はじめてのWeb of Things
 
はじめてのWeb of Things
はじめてのWeb of ThingsはじめてのWeb of Things
はじめてのWeb of Things
 
5jCup WebRTC賞
5jCup WebRTC賞5jCup WebRTC賞
5jCup WebRTC賞
 
ひとつひとつ組み上げてみていくビデオチャットアプリのアーキテクチャ
ひとつひとつ組み上げてみていくビデオチャットアプリのアーキテクチャひとつひとつ組み上げてみていくビデオチャットアプリのアーキテクチャ
ひとつひとつ組み上げてみていくビデオチャットアプリのアーキテクチャ
 
WebRTC再び
WebRTC再びWebRTC再び
WebRTC再び
 
WebRTCについて
WebRTCについてWebRTCについて
WebRTCについて
 
今、本当に“オープン”が必要なそのワケ ブロケードが考えるNFVの今、SDNへの未来とは?
今、本当に“オープン”が必要なそのワケ ブロケードが考えるNFVの今、SDNへの未来とは?今、本当に“オープン”が必要なそのワケ ブロケードが考えるNFVの今、SDNへの未来とは?
今、本当に“オープン”が必要なそのワケ ブロケードが考えるNFVの今、SDNへの未来とは?
 
WebRTCと ORTCについて 整理しておこう
WebRTCとORTCについて整理しておこうWebRTCとORTCについて整理しておこう
WebRTCと ORTCについて 整理しておこう
 
10th jan 2013_miyazaki
10th jan 2013_miyazaki10th jan 2013_miyazaki
10th jan 2013_miyazaki
 
JavaプログラマのためのWebSocket概要
JavaプログラマのためのWebSocket概要JavaプログラマのためのWebSocket概要
JavaプログラマのためのWebSocket概要
 
Open contrailのご紹介
Open contrailのご紹介Open contrailのご紹介
Open contrailのご紹介
 

WebRTCとPeer.jsを使った実装