Weitere ähnliche Inhalte
Ähnlich wie WebRTCでドラゴンボールごっこ (20)
Mehr von girigiribauer (9)
Kürzlich hochgeladen (12)
WebRTCでドラゴンボールごっこ
- 2. WebRTCとは
• RTCは、Real Time Communication の略
• ローカルデバイスにアクセスするための
getUserMedia API
• ブラウザとブラウザ同士が直接通信する
Peer-to-Peer connections API
- 8. getUserMedia API で
どんなことできるの?
• 顔認識させたり
(試してみたけどけっこう重い、
特別な理由がない限りはネイティブア
プリ向き?)
https://github.com/liuliu/ccv
- 20. getUserMedia APIの
基本的な使い方
• 仕様はこちら
http://dev.w3.org/2011/webrtc/editor/
getusermedia.html#navigatorusermedia
• 呼び出し方は以下の通り
navigator.webkitGetUserMedia(
constraints, // devices
successCallback, // ok
errorCallback // ng
);
- 21. getUserMedia APIの
基本的な使い方
• constraints は、どのデバイスに許可
出すかの指定をオブジェクトで行う
• successCallback は、ユーザーが許可した
ときに呼ばれるコールバック関数
- 22. getUserMedia APIの
基本的な使い方
• successCallback の引数として
LocalMediaStream オブジェクトが取得で
きる
• errorCallback は、それ以外のときに
呼ばれるコールバック関数
- 33. ここまでのサンプル
• http://web-utage.com/sample/
dragonball_super_saiyan/
- 34. 軽くまとめ
• 1. 表示用の canvas を用意(表示するだ
けなら video タグだけでOK)
• 2. createObjectURL を使って、デバイス
アクセス用のBlobURLを取得する
• 3. video タグの src に BlobURL をつっこ
む(と表示される)
- 40. 1. canvas をピクセル単位で
いろいろいじる
• context.getImageData()
配列でピクセルの値を取得
• context.putImageData()
配列のピクセルの値をセット
• この間でピクセルの数値を変えちゃえ
ば、簡単にエフェクトかけられる
- 41. 1. canvas をピクセル単位で
いろいろいじる
• var data = context.getImageData(0, 0, 370, 370);
(中略、黒→黄色とか)
context.putImageData(data, 0, 0);
• きっと画像処理の分野から応用すれ
ば、いろいろ良さげなライブラリたく
さん出てきそう
- 42. 2. CSS filter
• Chrome18から使える
http://caniuse.com/#feat=css-filters
• 任意の要素に対して、CSS でフィルター
かけられる(bodyタグでも)
• このページが比較的分かりやすい
http://www.html5rocks.com/en/tutorials/filters/
understanding-css/
- 43. 2. CSS filter
• grayscale : 白黒フィルター、0 ∼ 100% の
範囲
• sepia : セピア色、上に同じく
• saturate : 油絵の具で塗ったような感じ
• hue-rotate : 色相を回転させる
• invert : 色を反転させる
- 44. 2. CSS filter
• opacity : 不透明度(なんでこれあるのか
分からないけど、読む限りハードウェ
アアクセラレーションでこっちのがパ
フォーマンスが良いらしい)
• brightness : 明るさの変化、白く飛ばし
た感じ
- 45. 2. CSS filter
• contrast : コントラスト比をいじる
• blur : ぼかし
• drop-shadow : 影効果(これもopacityと
同じで、CSSにbox-shadowってのがあ
る)
- 46. 2. CSS filter
• スペースでつなげて複数指定もできる
(ただやりすぎると重くなるので注意)
• -webkit-filter: brightness(0.5) grayscale(1.0);
→元々黄色いやつを白く飛ばしておくとか
- 48. ここまでのサンプル
• http://web-utage.com/sample/
dragonball_super_saiyan/
- 49. 軽くまとめ
• 結局 canvas に反映しちゃえば、あとは
canvas に対する操作と何ら変わらない
• Chrome に限れば CSS filter も使えるの
で表現の幅が広がる
(&canvas なら楽できる)
• 後は既存の手法とのいいとこ取り
- 52. navigator.getUserMedia は
別名で呼べない
• TypeError: Illegal invocation ってエラー
• navigator.getUserMedia を別変数で参照し
て呼んでもダメ
• プレフィックスの違いを吸収したいと
きは、関数呼び出しをまるごと返す
- 53. navigator.getUserMedia は
別名で呼べない
var getUserMedia = function(t, onsuccess, onerror) {
if (navigator.getUserMedia) {
return navigator.getUserMedia(t, onsuccess, onerror);
} else if (navigator.webkitGetUserMedia) {
return navigator.webkitGetUserMedia(t, onsuccess, onerror);
} else if (navigator.mozGetUserMedia) {
return navigator.mozGetUserMedia(t, onsuccess, onerror);
} else if (navigator.msGetUserMedia) {
return navigator.msGetUserMedia(t, onsuccess, onerror);
} else {
onerror(new Error("No getUserMedia implementation found."));
}
};
http://www.html5rocks.com/ja/tutorials/webgl/jsartoolkit_webrtc/#toc-webrtc より
- 55. 毎フレームの処理が重くなりがち、
requestAnimationFrame を使った方が
よさげ
var requestAnimationFrame = (function() {
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.msRequestAnimationFrame ||
window.oRequestAnimationFrame ||
function(callback, element) {
setTimeout(callback, 1000 / 60);
};
})();
- 57. なぜ映像は取れて、
音だけ使えないのか?
• ゆくゆくは WebRTC と WebAudioAPI と
の統合が図られているから、かも?
(英語ちょっと自信ない。。)
• このへんとか参考になるかも
http://www.html5rocks.com/en/tutorials/
getusermedia/intro/#toc-webaudio-api
- 58. 必ずしもJavaScriptで
解決しなくてもよい
• ガタガタ揺らすエフェクトは、
JavaScript で CSS の position プロパティ
いじるとか、斜めなら canvas 内の
ピクセルいじるしかない
• 今なら CSS animation 内で transform を
使うだけで揺らせる(斜めにも)
- 63. Web がネイティブになる世界
• デバイスとかの機能を Web API で呼ぶ
といった、インターフェースが徐々に
Web ベースになってきてる
• そのうちネイティブはブラウザエンジ
ンだけになって、やがて Web がネイ
ティブになる世界(例 : FirefoxOSとか)
Hinweis der Redaktion
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n