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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
tetter
September 22, 2023
Technology
700
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
WebRTC でスマートカメラを開発するチュートリアルやってみた
WebRTC Meetup Tokyo #25 2023/09/22
1 本目の資料
動画は
こちら
tetter
September 22, 2023
More Decks by tetter
See All by tetter
TPAC 2025 の WebRTC トピック共有
tetter27
0
150
WebRTC と Wasm の関係を振り返ってみた
tetter27
0
730
MediaStream を利用した画像処理 2つのパターン
tetter27
0
570
TPAC 2023 のトピック厳選紹介
tetter27
0
560
WebRTC の現状と未来
tetter27
1
2.5k
Other Decks in Technology
See All in Technology
RAG を使わないという選択肢
tatsutaka
1
270
就職⽀援サービスにおけるキャリアアドバイザーのシフトスケジューリング
recruitengineers
PRO
1
150
気軽に使える"情報のハブ"としてのNotion活用 〜フロー情報の集積点 と、 Claude Code × Notion AI〜
syucream
1
150
2026TECHFRESH畢業分享會 - Lightning Talk - 資料也要 CI/CD? 用 Airbyte 自動化資料同步
line_developers_tw
PRO
0
1.3k
LayerXにおけるセキュリティ管理の現在地と次の一手
tosho
0
240
徹底討論!ECS vs EKS!
daitak
0
160
気づかぬうちにセキュリティ負債を生むAPIキー運用
sgwrmctk
0
180
スタートアップにAmazon EKSは早すぎる? マルチプロダクト戦略を加速する Platform Engineeringの実践 / Is Amazon EKS Too Soon for Startups? Practical Platform Engineering to Accelerate a Multi-Product Strategy
elmodev09
0
330
現地で盛り上がった WWDC26 Keynote
zozotech
PRO
1
260
[チョークトーク資料]AWS DevOps Agent を使いこなす / AWS Dev Ops Agent Chalk Talk AWS Summit Japan 2026
kinunori
3
550
Kiroで書いた 設計書 が AI レビューの 採点基準 になる
ezaki
0
130
AWS Security Hub CSPMの成功・失敗体験
cmusudakeisuke
0
250
Featured
See All Featured
The World Runs on Bad Software
bkeepers
PRO
72
12k
Paper Plane
katiecoart
PRO
1
51k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.5k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
55k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
WENDY [Excerpt]
tessaabrams
11
38k
Heart Work Chapter 1 - Part 1
lfama
PRO
7
36k
How to Think Like a Performance Engineer
csswizardry
28
2.7k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.8k
Music & Morning Musume
bryan
47
7.2k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
370
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