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
570
WebRTC でスマートカメラを開発するチュートリアルやってみた
WebRTC Meetup Tokyo #25 2023/09/22
1 本目の資料
動画は
こちら
tetter
September 22, 2023
Tweet
Share
More Decks by tetter
See All by tetter
WebRTC と Wasm の関係を振り返ってみた
tetter27
0
540
MediaStream を利用した画像処理 2つのパターン
tetter27
0
490
TPAC 2023 のトピック厳選紹介
tetter27
0
470
WebRTC の現状と未来
tetter27
1
2.3k
Other Decks in Technology
See All in Technology
Should Our Project Join the CNCF? (Japanese Recap)
whywaita
PRO
0
300
Oracle Cloud Infrastructure:2025年6月度サービス・アップデート
oracle4engineer
PRO
2
310
強化されたAmazon Location Serviceによる新機能と開発者体験
dayjournal
3
260
How Community Opened Global Doors
hiroramos4
PRO
1
130
20250625 Snowflake Summit 2025活用事例 レポート / Nowcast Snowflake Summit 2025 Case Study Report
kkuv
1
370
Flutter向けPDFビューア、pdfrxのpdfium WASM対応について
espresso3389
0
100
あなたの声を届けよう! 女性エンジニア登壇の意義とアウトプット実践ガイド #wttjp / Call for Your Voice
kondoyuko
4
510
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
26k
asken AI勉強会(Android)
tadashi_sato
0
140
ハッカソン by 生成AIハッカソンvol.05
1ftseabass
PRO
0
150
登壇ネタの見つけ方 / How to find talk topics
pinkumohikan
6
600
Yamla: Rustでつくるリアルタイム性を追求した機械学習基盤 / Yamla: A Rust-Based Machine Learning Platform Pursuing Real-Time Capabilities
lycorptech_jp
PRO
4
180
Featured
See All Featured
VelocityConf: Rendering Performance Case Studies
addyosmani
331
24k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.9k
Designing for Performance
lara
609
69k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
181
53k
Testing 201, or: Great Expectations
jmmastey
42
7.6k
Balancing Empowerment & Direction
lara
1
390
Music & Morning Musume
bryan
46
6.6k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.7k
Faster Mobile Websites
deanohume
307
31k
Docker and Python
trallard
44
3.5k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
107
19k
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