狠狠撸

狠狠撸Share a Scribd company logo
奥别产搁罢颁の话
2014/06/25
kawasaki.rb #013
金城 雄 (きんじょう ゆう)
Twitter : @youkinjoh
GitHub : @youkinjoh
このスライドは
http://www.slideshare.net/You_Kinjoh/fundamentals-andapplicationsofhtml5secondedition からの抜粋です。
デモ参加のお願い
Android
or
Webカメラ有りのパソコン(主にMac)
できるだけ最新のChrome
インターネット必須
WebRTC
WebRTC
リアルタイムコミュニケーションのAPI
ボイス?ビデオチャット
P2P
http://www.slideshare.net/mganeko/2013-web-rtctechcross/6 より引用
キャリア型通信
手段の例
市場
ユーザ
メリット
事業者
メリット
利用方法
固定電話 携帯電話 (TV放送)
インフラを持つキャリアが支配
世界中の人と会話できる
×
単独で利用
http://www.slideshare.net/mganeko/2013-web-rtctechcross/6 を改変して引用
Over The Top
手段の例
市場
ユーザ
メリット
事業者
メリット
利用方法
Skype, WebEx
(YouTube, Ustream)
キャリアに縛られない独自の仕組みを
提供する少数のベンダーが参加可能
世界中の人と無料/安価で会話できる
限定的なAPI提供
一部連携可能
ユーザが組み合わせて利用
http://www.slideshare.net/mganeko/2013-web-rtctechcross/6 を改変して引用
Webブラウザ型
手段の例
市場
ユーザ
メリット
事業者
メリット
利用方法
WebRTC
特別な仕組みは不要
誰でも参加可能
専用アプリ無しで会話できる
完全にプログラマブル部品として
利用可能
製品/サービスに組み込んで利用
http://www.slideshare.net/mganeko/2013-web-rtctechcross/6 を改変して引用
キャリア型通信 Over The Top Webブラウザ型
手段の例
市場
ユーザ
メリット
事業者
メリット
利用方法
固定電話
携帯電話
(TV放送)
Skype, WebEx
(Youtube,
Ustream)
WebRTC
インフラを持つ
キャリアが支配
キャリアに縛られない
独自の仕組みを提供
する少数のベンダー
が参加可能
特別な仕組みは不要
誰でも参加可能
世界中の人と
会話できる
世界中の人と無料/
安価で会話できる
専用アプリ無しで
会話できる
×
限定的なAPI提供
一部連携可能
完全にプログラマブル
部品として利用可能
単独で利用
ユーザが組み合わせて
利用
製品/サービスに
組み込んで利用
http://www.slideshare.net/mganeko/2013-web-rtctechcross/6 を改変して引用
WebRTC
2つの仕様
Media Capture and Streams
(getUserMedia)
WebRTC 1.0: Real-time
Communication Between
Browsers
Media Capture and Streams
(getUserMedia)
ブラウザからマイクやカメラにアクセス
利用範囲はWebRTC以外とも
音声処理(with Web Audio API)
ボイスチェンジャー etc.
画像処理(with Canvas)
顔検出 etc.
顔認識ができるようになるのも時間の問題か?
DEMO
SAMPLE
<!DOCTYPE html>
<video id="video" />
<script>
navigator.getUserMedia(
{video: true, audio: true},
function(stream) {
var video = document
.getElementById('video');
video.src = /slideshow/20140627-story-ofwebrtc/36293601/window.URL
.createObjectURL(stream);
video.play();
}
);
</script>
解説用に書いたコードです。 ベンダープレフィックスがないため動きません。
<!DOCTYPE html>
<video id="video" />
<script>
navigator.getUserMedia(
{video: true, audio: true},
function(stream) {
var video = document
.getElementById('video');
video.src = /slideshow/20140627-story-ofwebrtc/36293601/window.URL
.createObjectURL(stream);
video.play();
}
);
</script>
解説用に書いたコードです。 ベンダープレフィックスがないため動きません。
ビデオ要素の表示と
Script要素
<!DOCTYPE html>
<video id="video" />
<script>
navigator.getUserMedia(
{video: true, audio: true},
function(stream) {
var video = document
.getElementById('video');
video.src = /slideshow/20140627-story-ofwebrtc/36293601/window.URL
.createObjectURL(stream);
video.play();
}
);
</script>
解説用に書いたコードです。 ベンダープレフィックスがないため動きません。
ユーザメディアの取得開始
<!DOCTYPE html>
<video id="video" />
<script>
navigator.getUserMedia(
{video: true, audio: true},
function(stream) {
var video = document
.getElementById('video');
video.src = /slideshow/20140627-story-ofwebrtc/36293601/window.URL
.createObjectURL(stream);
video.play();
}
);
</script>
解説用に書いたコードです。 ベンダープレフィックスがないため動きません。
取得するユーザメディアは
カメラとマイク
<!DOCTYPE html>
<video id="video" />
<script>
navigator.getUserMedia(
{video: true, audio: true},
function(stream) {
var video = document
.getElementById('video');
video.src = /slideshow/20140627-story-ofwebrtc/36293601/window.URL
.createObjectURL(stream);
video.play();
}
);
</script>
解説用に書いたコードです。 ベンダープレフィックスがないため動きません。
ユーザメディア取得時の動作を指定
<!DOCTYPE html>
<video id="video" />
<script>
navigator.getUserMedia(
{video: true, audio: true},
function(stream) {
var video = document
.getElementById('video');
video.src = /slideshow/20140627-story-ofwebrtc/36293601/window.URL
.createObjectURL(stream);
video.play();
}
);
</script>
解説用に書いたコードです。 ベンダープレフィックスがないため動きません。
ビデオ要素の取得
ユーザメディアの指定
再生開始
<!DOCTYPE html>
<video id="video" />
<script>
navigator.getUserMedia(
{video: true, audio: true},
function(stream) {
var video = document
.getElementById('video');
video.src = /slideshow/20140627-story-ofwebrtc/36293601/window.URL
.createObjectURL(stream);
video.play();
}
);
</script>
解説用に書いたコードです。 ベンダープレフィックスがないため動きません。
WebRTC 1.0: Real-time
Communication Between
Browsers
ブラウザとブラウザを接続
シグナリングの仕組みは別途必要
SIP
XMPP
WebSocket <- 今のところ一番使われている
etc.
DEMO
WebRTC 1.0: Real-time
Communication Between
Browsers
NAT通過? ネゴシエーション
ICE(STUN + TURN + α)
STUN
P2P?UDPホールパンチング
TURN
サーバ経由
WebRTC 1.0: Real-time
Communication Between
Browsers
SDP
セッション開始に必要な情報を記述
DTLS
UDP版TLS
WebRTC 1.0: Real-time
Communication Between
Browsers
データ通信
DTLSで全て暗号化される
MediaStream (SRTP?SRTCP)
音声データ?映像データ
DataChannel (SCTP)
テキストデータ?バイナリデータ
WebRTC 1.0: Real-time
Communication Between
Browsers
SRTP?SRTCP
リアルタイムデータ転送プロトコル
SCTP
TCPに似たプロトコル
設定で、信頼性と引き換えにリアルタ
イム性の向上が可能
Web Server
WebSocket
Server
ICE Server
(STUN)
Browser Browser
NAT NAT
HTML+JS+CSS
Global IP/Port
signaling
HTML+JS+CSS
Global IP/Port
signaling
data
WebRTCData
BlackMagic
別資料
https://speakerdeck.com/feross/webrtc-data-black-magic
P18 53 をご覧下さい
WebRTC 1.0: Real-time
Communication Between
Browsers
APIが複雑でわかりにくい
抽象化した仕様の多い
HTML5の他のAPIと比べると
非常に複雑
それでも、従来のリアルタイム通信の
処理よりは断然楽
ジッタやパケットロス等の対策は、
ブラウザが全て対応してくれる
WebRTC まとめ1
シグナリング経路が別途必要
NAT通過の仕組みがある
P2Pでセキュアに通信
ボイス?ビデオチャットが可能
テキスト?バイナリの通信も可能
WebRTC まとめ2
APIが複雑
ライブラリを使うという選択肢も
特に面倒な部分はブラウザが処理
ジッタ?パケットロス等の対策
メディアの最適化等も
定番と言われるようなライブラリはまだありません。

More Related Content

奥别产搁罢颁の话