139
WebSocket / WebRTCの技術紹介 2014/02/24 情報機器テクノロジセンタ 回り道 康博 公開版

WebSocket / WebRTCの技術紹介

Embed Size (px)

DESCRIPTION

WebSocket及びWebRTCの技術紹介資料です。 WebSocket : 概要、標準化状況、HTTPとの通信量比較、PUSH方式の比較、ブラウザの対応状況 WebRTC : 概要、標準化状況、通信(PeerConnection)確立までの流れ、利用事例、ブラウザの対応状況 (NTTアドバンステクノロジ(NTT-AT))

Citation preview

Page 1: WebSocket / WebRTCの技術紹介

WebSocket / WebRTCの技術紹介

2014/02/24

情報機器テクノロジセンタ 回り道 康博

公開版

Page 2: WebSocket / WebRTCの技術紹介

本日のテーマ

WebSocket WebRTC

2

Page 3: WebSocket / WebRTCの技術紹介

まずはWebSocket

3

Page 4: WebSocket / WebRTCの技術紹介

の前に HTTPのおさらい

4

Page 5: WebSocket / WebRTCの技術紹介

HTTP• Webにおける通信の基本 • HTTPリクエスト=レスポンスのやり取りの繰り返し

クライアント サーバ

HTTPリクエスト

HTTPレスポンス

(並列読み込みによる時間短縮は本題でないので割愛) 5

Page 6: WebSocket / WebRTCの技術紹介

HTTP• Webにおける通信の基本 • HTTPリクエスト=レスポンスのやり取りの繰り返し

クライアント サーバ

HTTPリクエスト

HTTPレスポンス

(並列読み込みによる時間短縮は本題でないので割愛)

HTML、JavaScript、CSS、…を順に要求

5

Page 7: WebSocket / WebRTCの技術紹介

HTTP• Webにおける通信の基本 • HTTPリクエスト=レスポンスのやり取りの繰り返し

クライアント サーバ

HTTPリクエスト

HTTPレスポンス

(並列読み込みによる時間短縮は本題でないので割愛)

HTML、JavaScript、CSS、…を順に要求

5

Page 8: WebSocket / WebRTCの技術紹介

HTTP• Webにおける通信の基本 • HTTPリクエスト=レスポンスのやり取りの繰り返し

クライアント サーバ

HTTPリクエスト

HTTPレスポンス

(並列読み込みによる時間短縮は本題でないので割愛)

HTML、JavaScript、CSS、…を順に要求

5

Page 9: WebSocket / WebRTCの技術紹介

HTTP• Webにおける通信の基本 • HTTPリクエスト=レスポンスのやり取りの繰り返し

クライアント サーバ

HTTPリクエスト

HTTPレスポンス

(並列読み込みによる時間短縮は本題でないので割愛)

HTML、JavaScript、CSS、…を順に要求

5

Page 10: WebSocket / WebRTCの技術紹介

HTTP• Webにおける通信の基本 • HTTPリクエスト=レスポンスのやり取りの繰り返し

クライアント サーバ

HTTPリクエスト

HTTPレスポンス

(並列読み込みによる時間短縮は本題でないので割愛)

HTML、JavaScript、CSS、…を順に要求

描画

5

Page 11: WebSocket / WebRTCの技術紹介

HTTPの欠点1. リソース(URI)単位でしか要求・取得ができない • 100リソースあったら、100回リクエストとレスポンスを繰り返す

2. 要求をクライアントからしか送れない • 素の方法ではサーバからPUSHできない

3. HTTPヘッダが大きい • 小さいデータを送ると、HTTPヘッダが相対的に大きい

6

Page 12: WebSocket / WebRTCの技術紹介

HTTPの欠点への対策1. リソース(URI)単位でしか要求・取得ができない

7

Page 13: WebSocket / WebRTCの技術紹介

HTTPの欠点への対策1. リソース(URI)単位でしか要求・取得ができない

ファイル数を減らす まとめられるファイルをまとめる

7

Page 14: WebSocket / WebRTCの技術紹介

HTTPの欠点への対策2. 要求をクライアントからしか送れない

8

Page 15: WebSocket / WebRTCの技術紹介

HTTPの欠点への対策2. 要求をクライアントからしか送れない

PUSH手法を導入する ポーリング、Comet…

8

Page 16: WebSocket / WebRTCの技術紹介

HTTPの欠点への対策

3. HTTPヘッダが大きい

9

Page 17: WebSocket / WebRTCの技術紹介

HTTPの欠点への対策

3. HTTPヘッダが大きい

お手上げ 9

Page 18: WebSocket / WebRTCの技術紹介

で、新しい仕様1. リソース(URI)単位でしか要求・取得ができない

2. 要求をクライアントからしか送れない

3. HTTPヘッダが大きい

10

Page 19: WebSocket / WebRTCの技術紹介

で、新しい仕様1. リソース(URI)単位でしか要求・取得ができない

2. 要求をクライアントからしか送れない

3. HTTPヘッダが大きい

SPDY≒HTTP 2.0(まだdraft※)

※ 2014/02/13版 http://tools.ietf.org/html/draft-ietf-httpbis-http2-10 10

Page 20: WebSocket / WebRTCの技術紹介

で、新しい仕様1. リソース(URI)単位でしか要求・取得ができない

2. 要求をクライアントからしか送れない

3. HTTPヘッダが大きい WebSocket

SPDY≒HTTP 2.0(まだdraft※)

※ 2014/02/13版 http://tools.ietf.org/html/draft-ietf-httpbis-http2-10 10

Page 21: WebSocket / WebRTCの技術紹介

で、新しい仕様1. リソース(URI)単位でしか要求・取得ができない

2. 要求をクライアントからしか送れない

3. HTTPヘッダが大きい WebSocket

SPDY≒HTTP 2.0(ヘッダサイズ圧縮) WebSocket(HTTPを使わない)

SPDY≒HTTP 2.0(まだdraft※)

※ 2014/02/13版 http://tools.ietf.org/html/draft-ietf-httpbis-http2-10 10

Page 22: WebSocket / WebRTCの技術紹介

改めてWebSocket

11

Page 23: WebSocket / WebRTCの技術紹介

お話しすること• 概要 • 標準化状況 • 通信イメージ • HTTPとWebSocketの通信量の比較 • 同じくPUSH方式の比較 • ブラウザの対応状況

12

Page 24: WebSocket / WebRTCの技術紹介

お話ししないこと

• データ形式、パラメータ • 最新の標準化状況 • 現在進行形で新しいドラフトが出ている…

13

Page 25: WebSocket / WebRTCの技術紹介

WebSocketの概要• HTTPと同じくクライアント=サーバ型 • WebSocketクライアントとWebSocketサーバのペアで動作

• アプリケーション層のプロトコル、下位層はTCP • これもHTTPと同様

• クライアントとサーバの双方からデータを送受信

14

Page 26: WebSocket / WebRTCの技術紹介

WebSocketの概要• URIスキーム • ws://~(HTTPの「http://~」相当) • wss://~(HTTPの「https://~」相当)

• WebSocketプロトコルに未対応のネットワーク機器が多い • TLS/SSLの上をhttps://~のフリをしてこっそり流すのが常套

15

Page 27: WebSocket / WebRTCの技術紹介

ws://~

16

TCPHTTP

http://~

WebSocket

ws://~

HTTPプロトコルと異なるデータが流れてくるので 通信経路上のネットワーク機器が通信を遮断する可能性

Page 28: WebSocket / WebRTCの技術紹介

wss://~

17

TCPTLS/SSL

HTTP

https://~

WebSocket

wss://~

Page 29: WebSocket / WebRTCの技術紹介

wss://~

17

TCPTLS/SSL

HTTP

https://~

暗号化

WebSocket

wss://~

Page 30: WebSocket / WebRTCの技術紹介

wss://~

17

TCPTLS/SSL

HTTP

https://~

暗号化

WebSocket

wss://~

暗号化後のレイヤなので、通信経路上では見分けがつかない

Page 31: WebSocket / WebRTCの技術紹介

wss://~

17

TCPTLS/SSL

HTTP

https://~

暗号化

WebSocket

wss://~

暗号化後のレイヤなので、通信経路上では見分けがつかないws://~より引っかかりにくい

Page 32: WebSocket / WebRTCの技術紹介

WebSocketの標準化状況• WebSocketプロトコル(@IETF、RFC6455) • Proposed Standard • 通信規格側の仕様 • http://tools.ietf.org/html/rfc6455

• WebSocket API(@W3C) • Candidate Recommendation • Web API側(JavaScriptから使う側)の仕様 • http://www.w3.org/TR/websockets/

18

Page 33: WebSocket / WebRTCの技術紹介

WebSocketを端的に表すと

Web上でソケット通信っぽいことをするための規格

19

Page 34: WebSocket / WebRTCの技術紹介

WebSocket通信のイメージ

WebSocket

メッセージ

クライアント サーバ

20

Page 35: WebSocket / WebRTCの技術紹介

WebSocket通信のイメージ

WebSocket

メッセージ

WebSocketの確立 (HTTPからUPGRADE)

クライアント サーバ

20

Page 36: WebSocket / WebRTCの技術紹介

WebSocket通信のイメージ

WebSocket

メッセージ

WebSocketの確立 (HTTPからUPGRADE)

クライアント サーバ

20

Page 37: WebSocket / WebRTCの技術紹介

WebSocket通信のイメージ

WebSocket

メッセージ

WebSocketの確立 (HTTPからUPGRADE)

クライアント サーバ

20

Page 38: WebSocket / WebRTCの技術紹介

WebSocket通信のイメージ

WebSocket

メッセージ

WebSocketの確立 (HTTPからUPGRADE)

クライアント サーバ

20

Page 39: WebSocket / WebRTCの技術紹介

WebSocket通信のイメージ

WebSocket

メッセージ

WebSocketの確立 (HTTPからUPGRADE)

クライアント サーバ

双方から任意のデータを送信

20

Page 40: WebSocket / WebRTCの技術紹介

WebSocket通信のイメージ

WebSocket

メッセージ

クライアント サーバ

21

Page 41: WebSocket / WebRTCの技術紹介

WebSocket通信のイメージ

WebSocket

メッセージ

クライアント サーバ

送信完了前に別の送信を開始しても可

21

Page 42: WebSocket / WebRTCの技術紹介

WebSocket通信のイメージ

WebSocket

メッセージクロスしても可

クライアント サーバ

送信完了前に別の送信を開始しても可

21

Page 43: WebSocket / WebRTCの技術紹介

WebSocket通信のイメージ

WebSocket

メッセージ 22

Page 44: WebSocket / WebRTCの技術紹介

WebSocketのフレーム• 制御フレーム • Closeフレーム • Pingフレーム • Pongフレーム

• データフレーム • Textフレーム • Binaryフレーム

• 継続フレーム 23

Page 45: WebSocket / WebRTCの技術紹介

WebSocketのフレームサイズ4 byte

フラグ+基本ペイロード長 (2 byte) 拡張ペイロード長 (0 or 2 or 8 byte) Masking-key (0 or 4 byte) !合計 最小2 byte~最大14 byte

ペイロードデータ(データ格納部) ~8 EiB

24

Page 46: WebSocket / WebRTCの技術紹介

一方、HTTPレスポンスヘッダAccept-Ranges:bytes Age:243815 Content-Length:371 Content-Type:text/css Date:Thu, 13 Feb 2014 07:14:14 GMT ETag:"a7ac8-173-4a66f8ada8500" Last-Modified:Fri, 24 Jun 2011 06:45:08 GMT Server:Apache …

25

Page 47: WebSocket / WebRTCの技術紹介

一方、HTTPレスポンスヘッダAccept-Ranges:bytes Age:243815 Content-Length:371 Content-Type:text/css Date:Thu, 13 Feb 2014 07:14:14 GMT ETag:"a7ac8-173-4a66f8ada8500" Last-Modified:Fri, 24 Jun 2011 06:45:08 GMT Server:Apache …

ここだけで約20 byte

25

Page 48: WebSocket / WebRTCの技術紹介

一方、HTTPレスポンスヘッダAccept-Ranges:bytes Age:243815 Content-Length:371 Content-Type:text/css Date:Thu, 13 Feb 2014 07:14:14 GMT ETag:"a7ac8-173-4a66f8ada8500" Last-Modified:Fri, 24 Jun 2011 06:45:08 GMT Server:Apache …

上記で約200 byte (一般に数百 byteのオーダー)

ここだけで約20 byte

25

Page 49: WebSocket / WebRTCの技術紹介

HTTPとWebSocketの通信量

• 以下の仮定を置いて比較 • HTTPはヘッダ長は200 byte • WebSocketはマスクあり(4 byteのMasking-keyあり)

26

Page 50: WebSocket / WebRTCの技術紹介

本文が10 byteの場合• HTTP • 200(byte) + 10(byte) = 210(byte)

!

• WebSocket • 基本ペイロード長の範囲に収まる • 6(byte) + 10(byte) = 16(byte)

27

Page 51: WebSocket / WebRTCの技術紹介

本文が10 byteの場合• HTTP • 200(byte) + 10(byte) = 210(byte)

!

• WebSocket • 基本ペイロード長の範囲に収まる • 6(byte) + 10(byte) = 16(byte)

圧倒的な差

27

Page 52: WebSocket / WebRTCの技術紹介

本文が1024 byteの場合• HTTP • 200(byte) + 1024(byte) = 1224(byte)

!

• WebSocket • 拡張ペイロード長で+2 byte • 8(byte) + 1024(byte) = 1032(byte)

28

Page 53: WebSocket / WebRTCの技術紹介

本文が1024 byteの場合• HTTP • 200(byte) + 1024(byte) = 1224(byte)

!

• WebSocket • 拡張ペイロード長で+2 byte • 8(byte) + 1024(byte) = 1032(byte)

これでも差が大きい

28

Page 54: WebSocket / WebRTCの技術紹介

通信量はWebSocketが有利

• 本文が小さいほどHTTPとの差が顕著 • 小さいメッセージを頻繁にやり取りするケースで、WebSocketは特に有利

29

Page 55: WebSocket / WebRTCの技術紹介

話は変わって Webの世界のサーバPUSH

30

Page 56: WebSocket / WebRTCの技術紹介

PUSH方式の変遷

31

Page 57: WebSocket / WebRTCの技術紹介

PUSH方式の変遷

ポーリング

31

Page 58: WebSocket / WebRTCの技術紹介

PUSH方式の変遷

ポーリング

Comet(※)

※ Comet: Ajax+ロングポーリングによるサーバPUSHの総称 31

Page 59: WebSocket / WebRTCの技術紹介

PUSH方式の変遷

ポーリング

Server Sent Events

Comet(※)

※ Comet: Ajax+ロングポーリングによるサーバPUSHの総称 31

Page 60: WebSocket / WebRTCの技術紹介

PUSH方式の変遷

ポーリング

Server Sent Events WebSocket

Comet(※)

※ Comet: Ajax+ロングポーリングによるサーバPUSHの総称 31

Page 61: WebSocket / WebRTCの技術紹介

ポーリングによるPUSH

クライアント サーバ

HTTPリクエスト

HTTPレスポンス

• クライアント契機でHTMLやXML/jsonを取得 • 疑似PUSH Ajax

32

Page 62: WebSocket / WebRTCの技術紹介

ポーリングによるPUSH

クライアント サーバ

HTTPリクエスト

HTTPレスポンス

• クライアント契機でHTMLやXML/jsonを取得 • 疑似PUSH Ajax

32

Page 63: WebSocket / WebRTCの技術紹介

ポーリングによるPUSH

クライアント サーバ

HTTPリクエスト

HTTPレスポンス

• クライアント契機でHTMLやXML/jsonを取得 • 疑似PUSH Ajax

32

Page 64: WebSocket / WebRTCの技術紹介

ポーリングによるPUSH

クライアント サーバ

HTTPリクエスト

HTTPレスポンス

画面を更新

• クライアント契機でHTMLやXML/jsonを取得 • 疑似PUSH Ajax

32

Page 65: WebSocket / WebRTCの技術紹介

ポーリングによるPUSH

クライアント サーバ

HTTPリクエスト

HTTPレスポンス

画面を更新

• クライアント契機でHTMLやXML/jsonを取得 • 疑似PUSH Ajax

32

Page 66: WebSocket / WebRTCの技術紹介

CometによるPUSH

クライアント サーバ

HTTPリクエスト

HTTPレスポンス

• サーバ契機でHTMLやXML/jsonを取得 • サーバからの即応性が改善された擬似PUSH

33

Page 67: WebSocket / WebRTCの技術紹介

CometによるPUSH

クライアント サーバ

HTTPリクエスト

HTTPレスポンス

• サーバ契機でHTMLやXML/jsonを取得 • サーバからの即応性が改善された擬似PUSH

33

Page 68: WebSocket / WebRTCの技術紹介

CometによるPUSH

クライアント サーバ

HTTPリクエスト

HTTPレスポンス

• サーバ契機でHTMLやXML/jsonを取得 • サーバからの即応性が改善された擬似PUSH データ発生まで

レスポンスを保留

33

Page 69: WebSocket / WebRTCの技術紹介

CometによるPUSH

クライアント サーバ

HTTPリクエスト

HTTPレスポンス

• サーバ契機でHTMLやXML/jsonを取得 • サーバからの即応性が改善された擬似PUSH データ発生まで

レスポンスを保留

33

Page 70: WebSocket / WebRTCの技術紹介

CometによるPUSH

クライアント サーバ

HTTPリクエスト

HTTPレスポンス

• サーバ契機でHTMLやXML/jsonを取得 • サーバからの即応性が改善された擬似PUSH データ発生まで

レスポンスを保留

画面を更新

33

Page 71: WebSocket / WebRTCの技術紹介

CometによるPUSH

クライアント サーバ

HTTPリクエスト

HTTPレスポンス

• サーバ契機でHTMLやXML/jsonを取得 • サーバからの即応性が改善された擬似PUSH データ発生まで

レスポンスを保留

次のPUSH用の リクエストを投げる

画面を更新

33

Page 72: WebSocket / WebRTCの技術紹介

CometによるPUSH

クライアント サーバ

HTTPリクエスト

HTTPレスポンス

• サーバ契機でHTMLやXML/jsonを取得 • サーバからの即応性が改善された擬似PUSH データ発生まで

レスポンスを保留

次のPUSH用の リクエストを投げる

画面を更新

33

Page 73: WebSocket / WebRTCの技術紹介

CometによるPUSH

クライアント サーバ

HTTPリクエスト

HTTPレスポンス

• サーバ契機でHTMLやXML/jsonを取得 • サーバからの即応性が改善された擬似PUSH データ発生まで

レスポンスを保留

次のPUSH用の リクエストを投げる

画面を更新

33

Page 74: WebSocket / WebRTCの技術紹介

CometによるPUSH

クライアント サーバ

HTTPリクエスト

HTTPレスポンス

• サーバ契機でHTMLやXML/jsonを取得 • サーバからの即応性が改善された擬似PUSH データ発生まで

レスポンスを保留

この辺でデータが発生するとラグ

次のPUSH用の リクエストを投げる

画面を更新

33

Page 75: WebSocket / WebRTCの技術紹介

Server Sent EventsによるPUSH

クライアント サーバ

HTTPリクエスト

HTTPレスポンス

• Cometを洗練させたWeb標準(W3C CR) • 本格的なPUSH

34

Page 76: WebSocket / WebRTCの技術紹介

Server Sent EventsによるPUSH

クライアント サーバ

HTTPリクエスト

HTTPレスポンス

• Cometを洗練させたWeb標準(W3C CR) • 本格的なPUSH

34

Page 77: WebSocket / WebRTCの技術紹介

Server Sent EventsによるPUSH

クライアント サーバ

HTTPリクエスト

HTTPレスポンス

• Cometを洗練させたWeb標準(W3C CR) • 本格的なPUSH データ発生のたびに

送信する

34

Page 78: WebSocket / WebRTCの技術紹介

Server Sent EventsによるPUSH

クライアント サーバ

HTTPリクエスト

HTTPレスポンス

• Cometを洗練させたWeb標準(W3C CR) • 本格的なPUSH

分割(chunked)データ扱い

データ発生のたびに送信する

34

Page 79: WebSocket / WebRTCの技術紹介

Server Sent EventsによるPUSH

クライアント サーバ

HTTPリクエスト

HTTPレスポンス

• Cometを洗練させたWeb標準(W3C CR) • 本格的なPUSH

分割(chunked)データ扱い

データ発生のたびに送信する

画面を更新

34

Page 80: WebSocket / WebRTCの技術紹介

Server Sent EventsによるPUSH

クライアント サーバ

HTTPリクエスト

HTTPレスポンス

• Cometを洗練させたWeb標準(W3C CR) • 本格的なPUSH

分割(chunked)データ扱い

クローズしていないのでさらに送れる

データ発生のたびに送信する

画面を更新

34

Page 81: WebSocket / WebRTCの技術紹介

Server Sent EventsによるPUSH

クライアント サーバ

HTTPリクエスト

HTTPレスポンス

• Cometを洗練させたWeb標準(W3C CR) • 本格的なPUSH

分割(chunked)データ扱い

クローズしていないのでさらに送れる

データ発生のたびに送信する

画面を更新

34

Page 82: WebSocket / WebRTCの技術紹介

WebSocketによるPUSH

サーバ

• HTTPの縛りを外して作られたWeb標準 • 本格的なPUSH

WebSocket

メッセージ 35

Page 83: WebSocket / WebRTCの技術紹介

WebSocketによるPUSH

サーバ

• HTTPの縛りを外して作られたWeb標準 • 本格的なPUSH

WebSocket

メッセージ 35

Page 84: WebSocket / WebRTCの技術紹介

WebSocketによるPUSH

サーバ

• HTTPの縛りを外して作られたWeb標準 • 本格的なPUSH

WebSocket

メッセージ 35

データ発生のたびに送信する

Page 85: WebSocket / WebRTCの技術紹介

WebSocketによるPUSH

サーバ

• HTTPの縛りを外して作られたWeb標準 • 本格的なPUSH

画面を更新

WebSocket

メッセージ 35

データ発生のたびに送信する

Page 86: WebSocket / WebRTCの技術紹介

WebSocketによるPUSH

サーバ

• HTTPの縛りを外して作られたWeb標準 • 本格的なPUSH

画面を更新

WebSocket

メッセージ 35

データ発生のたびに送信する

Page 87: WebSocket / WebRTCの技術紹介

PUSH方式まとめ

ポーリング

Comet

Server Sent Events WebSocket 36

Page 88: WebSocket / WebRTCの技術紹介

PUSH方式まとめ

ポーリング

Comet

Server Sent Events WebSocket新

36

Page 89: WebSocket / WebRTCの技術紹介

PUSH方式まとめ

ポーリング

Comet

Server Sent Events WebSocket新

HTTPの拡張で進化

36

Page 90: WebSocket / WebRTCの技術紹介

PUSH方式まとめ

ポーリング

Comet

Server Sent Events WebSocket新

HTTPの拡張で進化 突然変異

36

Page 91: WebSocket / WebRTCの技術紹介

ブラウザのWeb Socket API対応状況ブラウザ名 対応状況

Internet Explorer 10以降Chrome 13以降Firefox 11以降Opera 12.10以降

iOS (UIWebView) 6.0以降iOS (Safari Mobile) 同上Android (WebView) 4.4Android (Chrome) 18以降

• PCの現行ブラウザは基本的に使用可能(但しIE9以下は×) • モバイルはAndroidのWebView(アプリ組み込み用エンジン)が難 • なおWebSocketクライアントが必ずしもブラウザである必要はない

37

Page 92: WebSocket / WebRTCの技術紹介

WebSocketのまとめ• Webでソケット通信的なことを行うための規格 • WebSocketプロトコルとWebSocket APIから成る • 通信量はHTTPで同内容を送るより少ない • 双方向通信に向いている • モダンブラウザの多くで対応済み • 但しAndroidのWebViewは未

38

Page 93: WebSocket / WebRTCの技術紹介

続いてWebRTC

39

Page 94: WebSocket / WebRTCの技術紹介

お話しすること• 概要 • 標準化状況 • 音声・映像通信までの流れ • PeerConnectionの課題 • WebRTCの利用事例 • ブラウザの対応状況

40

Page 95: WebSocket / WebRTCの技術紹介

お話ししないこと

• MediaCaptureの利用事例 • MediaCaptureはカメラやマイクの入力をキャプチャするための仕様

• MediaCaptureと別のメディア操作用APIを組み合わせることでいろいろ応用できる

41

Page 96: WebSocket / WebRTCの技術紹介

概要• RTC=Real-Time Communication • 音声/ビデオチャット、データ通信を使ったリアルタイムコミュニケーション • WebRTCは単一の規格でなく、WebでRTCを行うための仕様群

42

Page 97: WebSocket / WebRTCの技術紹介

表現を変えると

• Web標準でSkype等の機能を実現するための仕様群 • OS毎にネイティブアプリを作らずに • Flashやブラウザプラグインを使わずに

43

Page 98: WebSocket / WebRTCの技術紹介

WebRTCの標準化状況•WebRTC (@W3C)

• Working Draft • PeerConnectionとDataChannel、DTMFなども • http://www.w3.org/TR/webrtc/

• Media Capture and Streams(@W3C) • Working Draft • ブラウザから動画(カメラ)や音声(マイク)へアクセスするための仕様 • http://www.w3.org/TR/mediacapture-streams/

• RTCWEB(@IETF) • draft • プロトコルやコーデックの取り決め等々 • https://tools.ietf.org/wg/rtcweb/ 以下の各ドラフト

44

Page 99: WebSocket / WebRTCの技術紹介

WebRTCの利用例

• 1対1のビデオチャット • 画面共有、ファイル共有 • コンタクトセンタ • グループチャット • 他のコミュニケーション規格(SIP、PSTN、…)と相互接続

Dialogicのサイトより引用 https://www.dialogic.com/ja/landing/webrtc.aspx

45

Page 100: WebSocket / WebRTCの技術紹介

WebRTCの利用例

• 1対1のビデオチャット • 画面共有、ファイル共有 • コンタクトセンタ • グループチャット • 他のコミュニケーション規格(SIP、PSTN、…)と相互接続

この辺からハードルが高い

Dialogicのサイトより引用 https://www.dialogic.com/ja/landing/webrtc.aspx

45

Page 101: WebSocket / WebRTCの技術紹介

WebRTCを構成する仕様

•PeerConnection • DataChannel •MediaStream

46

Page 102: WebSocket / WebRTCの技術紹介

PeerConnection

• クライアント同士をP2Pで接続するための仕様 • 下位層はUDP

47

Page 103: WebSocket / WebRTCの技術紹介

DataChannel

• 任意のデータをPeerConnection経由で送るための仕様 • テキストメッセージとか写真とか資料とか、使い方は自由

48

Page 104: WebSocket / WebRTCの技術紹介

MediaCapture• 正確にはWebRTCの一部ではない • Specificationも別

• ブラウザからマイクやカメラへアクセスするための仕様 • MeiaCaptureで取得したStreamをPeerConnection経由で通信相手とやり取り • 単独で使える

49

Page 105: WebSocket / WebRTCの技術紹介

PeerConnectionの流れ

50

Page 106: WebSocket / WebRTCの技術紹介

一般的な流れWebアプリケーションサーバ

クライアントA

クライアントB

STUNサーバ

• Webアプリ • シグナリング機能

51

Page 107: WebSocket / WebRTCの技術紹介

一般的な流れWebアプリケーションサーバ

クライアントA

クライアントB

STUNサーバ①クライアントはSTUNサーバで自身のグローバルIP/Portを確認

• Webアプリ • シグナリング機能

51

Page 108: WebSocket / WebRTCの技術紹介

一般的な流れWebアプリケーションサーバ

クライアントA

クライアントB

STUNサーバ

②クライアントは自分のIP/Portやアプリ用情報を添えて接続要求を送信

①クライアントはSTUNサーバで自身のグローバルIP/Portを確認

• Webアプリ • シグナリング機能

51

Page 109: WebSocket / WebRTCの技術紹介

一般的な流れWebアプリケーションサーバ

クライアントA

クライアントB

STUNサーバ

②クライアントは自分のIP/Portやアプリ用情報を添えて接続要求を送信

③繋ぎたい相手のIP/Portをシグナリング機能で確認して接続

①クライアントはSTUNサーバで自身のグローバルIP/Portを確認

• Webアプリ • シグナリング機能

51

Page 110: WebSocket / WebRTCの技術紹介

STUN• STUN=Simple Traversal of UDP through NAT • またの名をUDPホールパンチング • NATの内側にあるノードからグローバルのIP/Port(トランスポートアドレス)を確認して「穴」を開ける仕組み

52

Page 111: WebSocket / WebRTCの技術紹介

前述の流れで繋がらないケースWebアプリケーションサーバ

クライアントA

クライアントB

STUNサーバ

53

Page 112: WebSocket / WebRTCの技術紹介

前述の流れで繋がらないケースWebアプリケーションサーバ

クライアントA

クライアントB

STUNサーバ

ルータのNAT機能やファイアウォールにガードされて、外から中に入れない  →シンメトリックNATの可能性

×

53

Page 113: WebSocket / WebRTCの技術紹介

「シンメトリックNAT」 以外のNAT

• NATの内側のノードが外へアクセスする時、NATは内側と外側のIP/Port同士をマッピングする • リクエストを投げると、外からレスポンスが帰ってこれる

• かつ任意のアドレスから「マッピング済みのIP/Port」へアクセスするとクライアントへ転送してくれる

• なのでSTUNサーバから取得したIP/Portを使って、第三者であるクライアントBがAへ接続できる

54

Page 114: WebSocket / WebRTCの技術紹介

一般的な流れ(改)Webアプリケーションサーバ

クライアントA

クライアントB

STUNサーバ

STUNサーバで確認した IP/Port

55

Page 115: WebSocket / WebRTCの技術紹介

一般的な流れ(改)Webアプリケーションサーバ

クライアントA

クライアントB

STUNサーバ

STUNサーバから見えるIP/Portは第三者も使える  →同じIP/PortでBもアクセスできる

STUNサーバで確認した IP/Port

55

Page 116: WebSocket / WebRTCの技術紹介

シンメトリックNAT• 「内側から外へアクセスした時の相手先からのアクセス」のみポートマッピングが有効 • それ以外は遮断される

• STUNサーバでないクライアントBは、STUNサーバ向けに開けられたIP/Portを使ってもAへ接続できない

56

Page 117: WebSocket / WebRTCの技術紹介

シンメトリックNATでの流れWebアプリケーションサーバ

クライアントA

クライアントB

STUNサーバ

STUNサーバで確認した IP/Port

57

Page 118: WebSocket / WebRTCの技術紹介

シンメトリックNATでの流れWebアプリケーションサーバ

クライアントA

クライアントB

STUNサーバ

STUNサーバから見えるIP/PortはSTUNサーバ専用  →Bからはアクセスできない

STUNサーバで確認した IP/Port

57

Page 119: WebSocket / WebRTCの技術紹介

シンメトリックNAT vs TURNWebアプリケーションサーバ

クライアントA

クライアントB

TURNサーバ向けの IP/Port

58

Page 120: WebSocket / WebRTCの技術紹介

シンメトリックNAT vs TURNWebアプリケーションサーバ

クライアントA

クライアントB

TURNサーバ

TURNサーバ経由でAとBを接続

TURNサーバ向けの IP/Port

58

Page 121: WebSocket / WebRTCの技術紹介

シンメトリックNAT vs TURNWebアプリケーションサーバ

クライアントA

クライアントB

TURNサーバ

TURNサーバ経由でAとBを接続

TURNサーバ向けの IP/Port

TURNサーバからの接続なので通れる=勝利 58

Page 122: WebSocket / WebRTCの技術紹介

TURN• Traversal Using Relay NAT • NATの内側にあるノードに対して透過的な経路(トンネル)を提供する • すべての通信をパススルーするので、ノードが増えるほどTURNサーバの帯域が消費される • STUNサーバに比べて運用コストが高い

59

Page 123: WebSocket / WebRTCの技術紹介

ICE• Interactive Connectivity Establishment • 常にSTUNを使うとシンメトリックNATの時に到達できない

• 常にTURNを使うとコストが高い • ICEは、STUNが使えない時だけTURNへフォールバックする • WebRTCのPeerConnectionはICEに対応

60

Page 124: WebSocket / WebRTCの技術紹介

PeerConnectionのまとめ

ネットワーク周りの ハードルが高い

普通のWeb APIと勝手が違うポイント 61

Page 125: WebSocket / WebRTCの技術紹介

ここでスライドを振り返るWebアプリケーションサーバ

クライアントA

クライアントB

STUNサーバ

②クライアントは自分のIP/Portやアプリ用情報を添えて接続要求を送信

③繋ぎたい相手のIP/Portをシグナリング機能で確認して接続

①クライアントはSTUNサーバで自身のグローバルIP/Portを確認

• Webアプリ • シグナリング機能

62

Page 126: WebSocket / WebRTCの技術紹介

ここでスライドを振り返るWebアプリケーションサーバ

クライアントA

クライアントB

STUNサーバ

②クライアントは自分のIP/Portやアプリ用情報を添えて接続要求を送信

③繋ぎたい相手のIP/Portをシグナリング機能で確認して接続

①クライアントはSTUNサーバで自身のグローバルIP/Portを確認

• Webアプリ • シグナリング機能

62

ここにWebSocketを使うことが多い

Page 127: WebSocket / WebRTCの技術紹介

WebRTCとWebSocket• WebRTCはシグナリングが必要だが、シグナリングの手段は任意(仕様外)

• WebSocketはリアルタイムPUSHに向いている • WebRTCに対応しているブラウザはWebSocketにも対応している

63

Page 128: WebSocket / WebRTCの技術紹介

WebRTCとWebSocket• WebRTCはシグナリングが必要だが、シグナリングの手段は任意(仕様外)

• WebSocketはリアルタイムPUSHに向いている • WebRTCに対応しているブラウザはWebSocketにも対応している

ということでWebSocketが使われる 63

Page 129: WebSocket / WebRTCの技術紹介

WebRTCの利用事例• PeerConnection周りを肩代わりするサービス • PeerJS • SkyWay

• WebRTCを使ったコミュニケーションプラットフォーム • OpenTok(TokBox)

• WebRTCとSIP等を相互接続する製品 • PowerMedia XMS(Dialogic社)

64

Page 130: WebSocket / WebRTCの技術紹介

PeerJS• http://peerjs.com/ • OSS(MIT License) • クライアント用ライブラリ(WebRTCのラッパ)の提供 • 対になるサーバの提供(クラウドサービス) !

• 通信周りの実装が簡単に • ブラウザ間の実装差を吸収

65

Page 131: WebSocket / WebRTCの技術紹介

SkyWay

• http://nttcom.github.io/skyway/ • NTTコミュニケーションズが提供 • PeerJSベース • APIキー(Webアプリ)毎のアクティブ接続状況を確認する機能

66

Page 132: WebSocket / WebRTCの技術紹介

字幕付きボイスチャット• SkyWayのデモアプリの一つ • Web Speech API(※)を組み合わせて、声をテキスト化して画面に表示 ※ Chromeに実装されている、音声認識のAPI

67

Page 133: WebSocket / WebRTCの技術紹介

字幕付きボイスチャット• SkyWayのデモアプリの一つ • Web Speech API(※)を組み合わせて、声をテキスト化して画面に表示 ※ Chromeに実装されている、音声認識のAPI

音声チャットの内容がその場でテキスト化されて画面に表示される

67

Page 134: WebSocket / WebRTCの技術紹介

OpenTok• http://tokbox.com/opentok • TokBox社 • 多者間通話 • 録画 • WebRTC単体ではP2P=1対1、多者間通話の実現はWebアプリ開発者による作り込みが必要

• TokBoxはプラットフォーム機能として提供、簡単に機能を組み込めるように

68

Page 135: WebSocket / WebRTCの技術紹介

PowerMedia XMS• https://www.dialogic.com/ja/products/media-server-software/xms.aspx • Dialogic社 • メディアサーバ • WebRTCと別のメディア(SIP等)を相互接続 • ラッパライブラリによるWebRTC接続とUI部品

• 音声/動画コーデックを相互変換

69

Page 136: WebSocket / WebRTCの技術紹介

PowerMedia XMS

PowerMedia XMS

Web Portal

SRTP

Signaling over WebSocket

Agent

IP/PSTN Network

Application Server

RTP

SIP

Media Ctrl

• 既存オペレーターサービスのWebRTCへの置換 • ユーザーはスマホから電話発信及び受信 • Dialogic JS APIを利用してApp. Serverと接続

• XMS Highlights: • オペレーションコストの削減 • WebRTC JS APIの簡便さ • SIP/WebRTCのインターワーキング • WebRTC通話

http://ngw.ntt-at.co.jp/product/media/products/PowerMedia_XMS.html

SIPクライアントとWebRTCクライアントを相互接続 音声/動画コーデックを変換

Dialogic WebRTC JS API

70

Page 137: WebSocket / WebRTCの技術紹介

ブラウザのWebRTC対応状況ブラウザ名 PeerConnection DataChannel MediaStream

Internet Explorer × 同左 同左Chrome ○/prefixed(※) 同左 同左Firefox ○/prefixed(※) 同左 同左Opera ○/prefixed(※) 同左 同左

iOS (UIWebView) × 同左 同左iOS (Mobile Safari) × 同左 同左Android (WebView) × 同左 同左Android (Chrome) ○/prefixed(※) 同左 同左• Chrome、Firefox、Operaが対応 • APIが流動的なため、各ブラウザともベンダプレフィックス付き • 実装が過渡的なため、本資料ではバージョン番号を明記しない

71

2014/02/24現在

Page 138: WebSocket / WebRTCの技術紹介

WebRTCの問題• 仕様が流動的 • ブラウザ間、あるいは同一ブラウザでもバージョンによって実装に差異がある

• 当面はPeerJS等のライブラリに依存せざるを得ない • Webアプリ開発者が個別に対応するのは辛い

• IE(Microsoft)とSafari(Apple)が未対応 • 国内ではあまり活発でない • 日本はテレビ電話/ビデオチャットを使う文化が弱い…らしい

72

Page 139: WebSocket / WebRTCの技術紹介

NTTアドバンステクノロジ株式会社 情報機器テクノロジセンタ 〒212-0014 神奈川県川崎市幸区大宮町1310 ミューザ川崎セントラルタワー

TEL : 044-589-6094 FAX : 044-541-1381 http://www.ntt-at.co.jp/