Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
WebRTC でスマートカメラを開発するチュートリアルやってみた
Search
tetter
September 22, 2023
Technology
0
640
WebRTC でスマートカメラを開発するチュートリアルやってみた
WebRTC Meetup Tokyo #25 2023/09/22
1 本目の資料
動画は
こちら
tetter
September 22, 2023
Tweet
Share
More Decks by tetter
See All by tetter
TPAC 2025 の WebRTC トピック共有
tetter27
0
96
WebRTC と Wasm の関係を振り返ってみた
tetter27
0
670
MediaStream を利用した画像処理 2つのパターン
tetter27
0
520
TPAC 2023 のトピック厳選紹介
tetter27
0
520
WebRTC の現状と未来
tetter27
1
2.4k
Other Decks in Technology
See All in Technology
Knowledge Work の AI Backend
kworkdev
PRO
0
340
M&Aで拡大し続けるGENDAのデータ活用を促すためのDatabricks権限管理 / AEON TECH HUB #22
genda
0
310
[2025-12-12]あの日僕が見た胡蝶の夢 〜人の夢は終わらねェ AIによるパフォーマンスチューニングのすゝめ〜
tosite
0
230
スクラムマスターが スクラムチームに入って取り組む5つのこと - スクラムガイドには書いてないけど入った当初から取り組んでおきたい大切なこと -
scrummasudar
0
400
"人"が頑張るAI駆動開発
yokomachi
1
670
re:Invent2025 セッションレポ ~Spec-driven development with Kiro~
nrinetcom
PRO
2
160
なぜ あなたはそんなに re:Invent に行くのか?
miu_crescent
PRO
0
240
投資戦略を量産せよ 2 - マケデコセミナー(2025/12/26)
gamella
0
560
Kiro を用いたペアプロのススメ
taikis
4
2.1k
AI with TiDD
shiraji
1
330
LayerX QA Night#1
koyaman2
0
300
Everything As Code
yosuke_ai
0
460
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
1
210
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
54
48k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
100
How to Ace a Technical Interview
jacobian
281
24k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
420
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
The Language of Interfaces
destraynor
162
26k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
330
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.4k
[SF Ruby Conf 2025] Rails X
palkan
0
660
Odyssey Design
rkendrick25
PRO
0
450
Transcript
WebRTC でスマートカメラを開発するチュー トリアルやってみた tetter WebRTC Meetup Tokyo #25 SEP, 22,
2023 # for Beginners
自己紹介 2 NAME: - tetter (Tetta Maeda) FEATURES: - WebRTC
Meetup 運営 - AI / ML on Browser を試すのが好き @tttr_mt tetter27 2017 2018 2022 前職 (通信事業会社) Android 〃 EdgeAI NTTコミュニケーションズ株式会社 WebRTC CARRIER:
背景 3 - おもしろそうなチュートリアルができていたのでやってみた - Google I/O 2023 で追加されたらしい 非常にお手軽だったので動作を解説してみる
https://developers.home.google.com/codelabs/smarthome-webrtc
作ったもの 4
先に結論 5 - 一方向しか対応していないので少し物足りない - リアルタイムなモニタリングはできる - 別の NW のモニタリングも一応できる
https://developers.home.google.com/cloud-to-cloud/traits/camerastream?hl=ja
全体像 6 Firebase 自宅LAN Google Nest Hub (任意の) PC
全体像 (もうちょっと詳しく) 7 Firebase Cloud Function for Firebase 自宅LAN Realtime
Database Firebase Web app Google Nest Hub (任意の) PC </> Actions Google
事前準備 (1/2) 8 自宅LAN Google Nest Hub (任意の) PC Actions
Google Firebase Cloud Function for Firebase Realtime Database Firebase Web app </> 初期化 デプロイ 初期化 初期化 デプロイ 「WebRTC の表示」を登録
事前準備 (2/2) 9 自宅LAN Google Nest Hub (任意の) PC Actions
Google Firebase Cloud Function for Firebase Realtime Database Firebase Web app </> Home App トークン取得 登録 登録
大まかな処理の流れ 10 1. 各デバイスで Firebase へアクセスする 2. 経路候補を収集する 3. Firebase
で経路候補等の情報を交換する 4. お互いに到達できる経路を探す 5. 接続してストリームを送信
大まかな処理の流れ 11 1. 各デバイスで Firebase へアクセスする 2. 経路候補を収集する 3. Firebase
で経路候補等の情報を交換する 4. お互いに到達できる経路を探す 5. 接続してストリームを送信
1. 各デバイスで Firebase へアクセスする (1/2) 12 自宅LAN Google Nest Hub
(任意の) PC Actions Google Firebase Cloud Function for Firebase Realtime Database Firebase Web app </> ① App 取得 </> ② アクセス
1. 各デバイスで Firebase へアクセスする (2/2) 13 自宅LAN Google Nest Hub
(任意の) PC Actions Google Firebase Cloud Function for Firebase Realtime Database Firebase Web app </> ② アクセス </> ① 「WebRTCを表示して」
大まかな処理の流れ 14 1. 各デバイスで Firebase へアクセスする 2. 経路候補を収集する 3. Firebase
で経路候補等の情報を交換する 4. お互いに到達できる経路を探す 5. 接続してストリームを送信
2. 経路候補を収集する (1/3) 15 自宅LAN Google Nest Hub (任意の) PC
</> - 自身に割り当てられた IP アドレスを収集 - 「host」と表記される - お互い同じ NW ならこれで接続できる
2. 経路候補を収集する (2/3) 16 自宅LAN Google Nest Hub (任意の) PC
</> - STUN サーバに接続して跳ね返ってきた自身の IP を収集 - 「srflx (server reflexive) 」と表記される STUN
なぜ STUN が必要? 17 自宅LAN Google Nest Hub (任意の) PC
</> - 相手が別 NW にいる場合はローカル IP ではたどり着けない (*) - NAT (ルータ) が IP を変換しているため - STUN で確認した IP はインターネット側から見たときのグローバル IP なので到達可能! 別LAN STUN host srflx (*) IPv6 のグローバル IP が振られている場合はその限りではない
2. 経路候補を収集する (3/3) 18 自宅LAN Google Nest Hub (任意の) PC
</> - TURN サーバの IP アドレスを収集 - 「relay」と表記される TURN
relay 別LAN なぜ TURN が必要? 19 自宅LAN Google Nest Hub
(任意の) PC </> - NAT の相性が悪かったり Firewall があると接続できない - Symmetric NAT - UDP を遮断する F/W - 許可リスト設定の F/W - TURN はストリームを中継、変換してくれるので到達可能! - ただし、このチュートリアルではデフォルト OFF (*) TURN (*) おそらく TURN サーバの運用はコストがかかるし今回のユースケースでは過剰なため 例)
大まかな処理の流れ 20 1. 各デバイスで Firebase へアクセスする 2. 経路候補を収集する 3. Firebase
で経路候補等の情報を交換する (シグナリング) 4. お互いに到達できる経路を探す 5. 接続してストリームを送信
3. 経路候補等の情報を交換する (1/5) 21 - 自身への到達経路や使用するメディアなどを Session Description へ 記載して
SDP で交換する 今回生成された Session Description
3. 経路候補等の情報を交換する (2/5) 22 自宅LAN Google Nest Hub (任意の) PC
Firebase Cloud Function for Firebase Realtime Database Firebase Web app </> Write </> Offer SDP 経路候補を収集
3. 経路候補等の情報を交換する (3/5) 23 自宅LAN Google Nest Hub (任意の) PC
Firebase Cloud Function for Firebase Realtime Database Firebase Web app </> </> Offer SDP として登録 Read
3. 経路候補等の情報を交換する (4/5) 24 自宅LAN Google Nest Hub (任意の) PC
Firebase Cloud Function for Firebase Realtime Database Firebase Web app </> </> Answer SDP Write 経路候補を収集
3. 経路候補等の情報を交換する (5/5) 25 自宅LAN Google Nest Hub (任意の) PC
Firebase Cloud Function for Firebase Realtime Database Firebase Web app </> </> Read Answer SDP として登録
ちなみに 26 - 交換 (シグナリング) 方法は何でも良い - WebSocket とかも一般的 -
Firebase を除いたらバッチリ書き込まれていた
大まかな処理の流れ 27 1. 各デバイスで Firebase へアクセスする 2. 経路候補を収集する 3. Firebase
で経路候補等の情報を交換する 4. お互いに到達できる経路を探す 5. 接続してストリームを送信
4. お互いに到達できる経路を探す 28 - 自身への経路候補と相手への経路候補をお互いに入手 - それらの組み合わせでチェックリストを作ってお互い試す - (今回の場合) 接続できた経路の中から優先度が高い経路を採用
(*) • 候補 A • 候補 B • 候補 C • 候補 D • 候補 E • 候補 F • 候補 A x 候補 D • 候補 B x 候補 D • 候補 C x 候補 D • 候補 A x 候補 E • 候補 B x 候補 E • 候補 C x 候補 E • 候補 A x 候補 F • 候補 B x 候補 F • 候補 C x 候補 F Answer Offer チェックリスト (*) CameraStream トレイトは現在 Trickle ICE に対応していないらしい
大まかな処理の流れ 29 1. 各デバイスで Firebase へアクセスする 2. 経路候補を収集する 3. Firebase
で経路候補等の情報を交換する 4. お互いに到達できる経路を探す 5. 接続してストリームを送信 ICE
5. 接続してストリームを送信 (1/2) 30 自宅LAN Google Nest Hub (任意の) PC
</> - 無事ストリームを送信できた
5. 接続してストリームを送信 (2/2) 31 - chrome://webrtc-internals/ で採用経路やビットレートを確認 (*) (*) Edge
なら edge://webrtc-internals/、FireFox なら about:webrtc
結論 32 - 一方向しか対応していないので少し物足りない - リアルタイムなモニタリングはできる - 別の NW のモニタリングも一応できる
https://developers.home.google.com/cloud-to-cloud/traits/camerastream?hl=ja