SlideShare a Scribd company logo
1 of 35
Download to read offline
ビデオチャットアプリの
アーキテクチャ
ひとつひとつ

組み上げてみていく
SHOWROOM株式会社
熊⾕ 昂樹
誰
熊⾕昂樹 / kmagai
株式会社ディー・エヌ・エー ̶> SHOWROOM株式会社(出向中)
新卒3年⽬の(主に)アプリケーションエンジニア
GitHub: kmagai
Twitter: @kmagai_
Server
Firebase Cloud Messaging
HeartbeatActor
RoomSessionActor
Akka Actors
MySQLStorage
WebRTC ICE Server
ICE
SDP
SDP
Text / Image
ICE
overview
Text / Image
前半はWebRTCの⼀般的な実装の話
後半はメッセージングの話
Firebase
Cloud Messaging
WebRTC ICE Server
ICE
SDP
SDP
ICE
まずはビデオチャット部分
WebRTC
WebRTC 101
そもそもの話
これになりたい




😇
ローカルから⾒えるネットワー
ク情報
≠
インターネットから⾒える実際
のネットワーク情報
NATNAT WebRTC ❌❌
😇
通信⼿段が分からない
WebRTC ❌
SDPをお互いに交換すれば
WebRTC接続できる
🗒 🗒
🗒 🗒
SDP SDP
SDP(Session Description
Protocol)?
• メディアの種類/形式
• 暗号化の鍵
• ICE Candidate
など
🗒 🗒
🗒 🗒
SDP SDP
ICE Candidate =
相⼿から⾒た⾃分への接続⼿段
(IPとポート番号とか)
🗒 🗒
🗒 🗒
SDP SDP
SDPの取得
ICE Candidateを取得すれば、
あとはWebRTCのライブラリが
⾃動的に⽣成してくれる
🗒 🗒
🗒 🗒
SDP SDP
ICE Candidateの取得
1. ローカルから
2. NATの外側から
3. リレーサーバー経由
🗒
あらゆる接続経路・方法とは…
1. ローカルから
2. NATの外側から
3. 専用サーバー経由で
🗒
ICE Candidateの取得
1. ローカルから
2. NATの外側から
3. リレーサーバー経由
OSに問い合わせて取得
もしファイアウォール・NATが
存在しない場合はこれでも通信
できるかも…IP address: A

port B/UDP
あらゆる接続経路・方法とは…
1. ローカルから
2. NATの外側から
3. 専用サーバー経由で
🗒
SDP
ICE Candidateの取得
1. ローカルから
2. NATの外側から
3. リレーサーバー経由
接続できる可能性のあるパブリッ
クなルーティングパスを、NAT
の外側にあるSTUNサーバーに
問い合わせて集める
NAT
STUN Server
🗒 IP address: A

port B/UDP
あらゆる接続経路・方法とは…
1. ローカルから
2. NATの外側から
3. 専用サーバー経由で
🗒
SDP
ICE Candidateの取得
1. ローカルから
2. NATの外側から
3. リレーサーバー経由
どうしても接続できない場合に
P2Pを諦めてTURN Server(リ
レーサーバー)を経由する
NAT
TURN Server
❌
それでも繋げないことがある場合は…
SDPが⼿に⼊ったので、送受信
を考える

🗒 🗒
🗒 🗒
SDP SDP
通信相⼿のSDPをどうやって受
け取るのか?
相⼿が通信可能であればすぐに
接続したい
🗒 🗒
🗒 🗒
SDP SDP
Signaling Serverをつくる
サーバー側からクライアントに
Pushできればよい
e.g.
WebSocket
Firebase Cloud Messaging
🗒 🗒
Signaling Server
push
Firebase
Cloud Messaging
WebRTC ICE Server
SDP
SDP
ICE
こうなった
ICE
Server
Firebase Cloud Messaging
HeartbeatActor
RoomSessionActor
Akka Actors
MySQLStorage
次はメッセージング
これになりたい
できる!!!!!
テキストやバイナリを送れる
WebRTC

DataChannel
テキスト・画像はサーバーに保
存したい…
(同時にお絵かきしたりすると
かのユースケースには合いそう)
WebRTC

DataChannel
😇
こうかな?
Firebase Cloud Messaging
MySQLStorage
API Server
⼤量のメッセージを捌く… 😇
→ 並⾏処理したいけど⼤変…
Firebase Cloud Messaging
MySQLStorage
API Server
Akka
• 並⾏処理
• スケーラビリティ
• 耐障害性
Server
Firebase Cloud Messaging
RoomSessionActor
Akka Actors
MySQLStorage
並列処理の実現
⼀つ⼀つのActorの処理⾃体は
直列でミュータブルなデータを
Actor間で共有しない
↓
普通に書けばスレッドセーフ
Server
Firebase Cloud Messaging
Akka Actors
MySQLStorage
RoomSessionActor
Actor
責務をActorに切り分ける
e.g. RoomSessionActorはチャッ
トルーム単位でActorをつくる
Server
Firebase Cloud Messaging
RoomSessionActor
Akka Actors
MySQLStorage
まだ問題が…
Server
Firebase Cloud Messaging
Akka Actors
MySQLStorage
RoomSessionActor
対障害性の問題
このままではクラッシュした時
にハンドリングできない
Server
Firebase Cloud Messaging
RoomSessionActor
Akka Actors
MySQLStorage
crash!
責務の切り分け問題
RoomSessionActorの⽣成や管
理の責務はどこが持つのか?
Server
Firebase Cloud Messaging
RoomSessionActor
Akka Actors
MySQLStorage
どこから⽣成されるべき?
親(HeartbeatActor)をつくる
RoomSessionActorのライフサ
イクル管理の責務を担う
e.g. エラーハンドリング、
RoomSessionActor⽣成、メッ
セージフォワーディング、死活
監視
Server
Firebase Cloud Messaging
HeartbeatActor
RoomSessionActor
Akka Actors
MySQLStorage
Server
Firebase Cloud Messaging
HeartbeatActor
RoomSessionActor
Akka Actors
MySQLStorage
WebRTC ICE Server
ICE
SDP
SDP
Text / Image
ICE
Text / Image
おわり
GitHub: kmagai
Twitter: @kmagai_

More Related Content

What's hot

Azureクラウドのネイティブアプリ、IoTとエッジAIの管理ソリューション
Azureクラウドのネイティブアプリ、IoTとエッジAIの管理ソリューションAzureクラウドのネイティブアプリ、IoTとエッジAIの管理ソリューション
Azureクラウドのネイティブアプリ、IoTとエッジAIの管理ソリューションJingun Jung
 
KinectプログラミングStepByStep
KinectプログラミングStepByStepKinectプログラミングStepByStep
KinectプログラミングStepByStep信之 岩永
 
C# でブロックチェーン実装
C# でブロックチェーン実装C# でブロックチェーン実装
C# でブロックチェーン実装Yuto Takei
 
WebRTCについてざっと
WebRTCについてざっとWebRTCについてざっと
WebRTCについてざっとFumiyasu Sumiya
 
C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021Atsushi Nakamura
 
Node.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたことNode.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたことbitbank, Inc. Tokyo, Japan
 
Unno Wataru Nutanix Advent Calendar 2018
Unno Wataru Nutanix Advent Calendar 2018Unno Wataru Nutanix Advent Calendar 2018
Unno Wataru Nutanix Advent Calendar 2018Wataru Unno
 
Test automation strategy for .net core 3 transition
Test automation strategy for .net core 3 transitionTest automation strategy for .net core 3 transition
Test automation strategy for .net core 3 transitionTatsuya Ishikawa
 
6万行の TypeScript 移行とその後
6万行の TypeScript 移行とその後6万行の TypeScript 移行とその後
6万行の TypeScript 移行とその後Shingo Sasaki
 
Kinectプログラミング Step by Step
Kinectプログラミング Step by StepKinectプログラミング Step by Step
Kinectプログラミング Step by StepAkira Hatsune
 
(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話Masanori Masui
 
α版 継続的にテスト可能な設計を考える
α版 継続的にテスト可能な設計を考えるα版 継続的にテスト可能な設計を考える
α版 継続的にテスト可能な設計を考えるAtsushi Nakamura
 
継続的にテスト可能な設計を考える
継続的にテスト可能な設計を考える継続的にテスト可能な設計を考える
継続的にテスト可能な設計を考えるAtsushi Nakamura
 
いつでもどこでも .NET
いつでもどこでも .NETいつでもどこでも .NET
いつでもどこでも .NETYuta Matsumura
 
ASP.NET CoreとAzure AD B2Cを使ったサクっと認証
ASP.NET CoreとAzure AD B2Cを使ったサクっと認証ASP.NET CoreとAzure AD B2Cを使ったサクっと認証
ASP.NET CoreとAzure AD B2Cを使ったサクっと認証Yuta Matsumura
 

What's hot (20)

Deploy TypeScript Application by CodePipeline
Deploy TypeScript Application by CodePipelineDeploy TypeScript Application by CodePipeline
Deploy TypeScript Application by CodePipeline
 
Azureクラウドのネイティブアプリ、IoTとエッジAIの管理ソリューション
Azureクラウドのネイティブアプリ、IoTとエッジAIの管理ソリューションAzureクラウドのネイティブアプリ、IoTとエッジAIの管理ソリューション
Azureクラウドのネイティブアプリ、IoTとエッジAIの管理ソリューション
 
KinectプログラミングStepByStep
KinectプログラミングStepByStepKinectプログラミングStepByStep
KinectプログラミングStepByStep
 
SkyWay Vision & Mission
SkyWay Vision & MissionSkyWay Vision & Mission
SkyWay Vision & Mission
 
20201127 .NET 5
20201127 .NET 520201127 .NET 5
20201127 .NET 5
 
C# でブロックチェーン実装
C# でブロックチェーン実装C# でブロックチェーン実装
C# でブロックチェーン実装
 
WebRTCについてざっと
WebRTCについてざっとWebRTCについてざっと
WebRTCについてざっと
 
C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021
 
Node.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたことNode.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたこと
 
Unno Wataru Nutanix Advent Calendar 2018
Unno Wataru Nutanix Advent Calendar 2018Unno Wataru Nutanix Advent Calendar 2018
Unno Wataru Nutanix Advent Calendar 2018
 
ゼロから始めるQ#
ゼロから始めるQ#ゼロから始めるQ#
ゼロから始めるQ#
 
Test automation strategy for .net core 3 transition
Test automation strategy for .net core 3 transitionTest automation strategy for .net core 3 transition
Test automation strategy for .net core 3 transition
 
6万行の TypeScript 移行とその後
6万行の TypeScript 移行とその後6万行の TypeScript 移行とその後
6万行の TypeScript 移行とその後
 
Kinectプログラミング Step by Step
Kinectプログラミング Step by StepKinectプログラミング Step by Step
Kinectプログラミング Step by Step
 
Fukuten 20200117 up
Fukuten 20200117 upFukuten 20200117 up
Fukuten 20200117 up
 
(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話
 
α版 継続的にテスト可能な設計を考える
α版 継続的にテスト可能な設計を考えるα版 継続的にテスト可能な設計を考える
α版 継続的にテスト可能な設計を考える
 
継続的にテスト可能な設計を考える
継続的にテスト可能な設計を考える継続的にテスト可能な設計を考える
継続的にテスト可能な設計を考える
 
いつでもどこでも .NET
いつでもどこでも .NETいつでもどこでも .NET
いつでもどこでも .NET
 
ASP.NET CoreとAzure AD B2Cを使ったサクっと認証
ASP.NET CoreとAzure AD B2Cを使ったサクっと認証ASP.NET CoreとAzure AD B2Cを使ったサクっと認証
ASP.NET CoreとAzure AD B2Cを使ったサクっと認証
 

Similar to ひとつひとつ組み上げてみていくビデオチャットアプリのアーキテクチャ

組み込みブラウザとメディアﰀ仕様あれこれ
組み込みブラウザとメディアﰀ仕様あれこれ組み込みブラウザとメディアﰀ仕様あれこれ
組み込みブラウザとメディアﰀ仕様あれこれMasashi Umeda
 
5分でわかるWebRTCの仕組み - html5minutes vol.01
5分でわかるWebRTCの仕組み - html5minutes vol.015分でわかるWebRTCの仕組み - html5minutes vol.01
5分でわかるWebRTCの仕組み - html5minutes vol.01西畑 一馬
 
WebRTC Boot Camp (WebRTC Conference Japan 2016) 事前公開版
WebRTC Boot Camp (WebRTC Conference Japan 2016) 事前公開版WebRTC Boot Camp (WebRTC Conference Japan 2016) 事前公開版
WebRTC Boot Camp (WebRTC Conference Japan 2016) 事前公開版You_Kinjoh
 
Web on Kernel
Web on KernelWeb on Kernel
Web on Kerneldynamis
 
知ってると得するかもしれないConstraintsたち
知ってると得するかもしれないConstraintsたち知ってると得するかもしれないConstraintsたち
知ってると得するかもしれないConstraintsたちKensaku Komatsu
 
Kilimanjaro Event
Kilimanjaro EventKilimanjaro Event
Kilimanjaro Eventdynamis
 
Magic Leap で WebRTC 触ってみた
Magic Leap で WebRTC 触ってみたMagic Leap で WebRTC 触ってみた
Magic Leap で WebRTC 触ってみたNishoMatsusita
 
SORACOM Conference Discovery 2017 | E3. デバイスからのクラウド連携パターン
SORACOM Conference Discovery 2017 | E3. デバイスからのクラウド連携パターンSORACOM Conference Discovery 2017 | E3. デバイスからのクラウド連携パターン
SORACOM Conference Discovery 2017 | E3. デバイスからのクラウド連携パターンSORACOM,INC
 
ビデオ通話・P2Pがコモディティ化する世界 WebRTCによるこれからを探る
ビデオ通話・P2Pがコモディティ化する世界 WebRTCによるこれからを探るビデオ通話・P2Pがコモディティ化する世界 WebRTCによるこれからを探る
ビデオ通話・P2Pがコモディティ化する世界 WebRTCによるこれからを探るKensaku Komatsu
 
Microsoft Intelligent Edge Technologies
Microsoft Intelligent Edge TechnologiesMicrosoft Intelligent Edge Technologies
Microsoft Intelligent Edge TechnologiesTakeshi Fukuhara
 
WebRTCとPeer.jsを使った実装
WebRTCとPeer.jsを使った実装WebRTCとPeer.jsを使った実装
WebRTCとPeer.jsを使った実装Yuta Suzuki
 
Deploy TypeScript with CodePipeline in Fargate
Deploy TypeScript with CodePipeline in FargateDeploy TypeScript with CodePipeline in Fargate
Deploy TypeScript with CodePipeline in Fargatebitbank, Inc. Tokyo, Japan
 
WebRTC meetup Tokyo 1
WebRTC meetup  Tokyo 1WebRTC meetup  Tokyo 1
WebRTC meetup Tokyo 1mganeko
 
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-Saki Homma
 
Browser and Mozilla
Browser and MozillaBrowser and Mozilla
Browser and Mozilladynamis
 
HTML5開発最前線
HTML5開発最前線HTML5開発最前線
HTML5開発最前線yoshikawa_t
 
SORACOM Technology Camp 2018 | A3. IoT×クラウドデザインパターン
SORACOM Technology Camp 2018 | A3. IoT×クラウドデザインパターンSORACOM Technology Camp 2018 | A3. IoT×クラウドデザインパターン
SORACOM Technology Camp 2018 | A3. IoT×クラウドデザインパターンSORACOM,INC
 
.NET の過去、現在、そして未来
.NET の過去、現在、そして未来.NET の過去、現在、そして未来
.NET の過去、現在、そして未来Akira Inoue
 
レポート
レポートレポート
レポートxin song
 

Similar to ひとつひとつ組み上げてみていくビデオチャットアプリのアーキテクチャ (20)

組み込みブラウザとメディアﰀ仕様あれこれ
組み込みブラウザとメディアﰀ仕様あれこれ組み込みブラウザとメディアﰀ仕様あれこれ
組み込みブラウザとメディアﰀ仕様あれこれ
 
5分でわかるWebRTCの仕組み - html5minutes vol.01
5分でわかるWebRTCの仕組み - html5minutes vol.015分でわかるWebRTCの仕組み - html5minutes vol.01
5分でわかるWebRTCの仕組み - html5minutes vol.01
 
WebRTC Boot Camp (WebRTC Conference Japan 2016) 事前公開版
WebRTC Boot Camp (WebRTC Conference Japan 2016) 事前公開版WebRTC Boot Camp (WebRTC Conference Japan 2016) 事前公開版
WebRTC Boot Camp (WebRTC Conference Japan 2016) 事前公開版
 
Web on Kernel
Web on KernelWeb on Kernel
Web on Kernel
 
知ってると得するかもしれないConstraintsたち
知ってると得するかもしれないConstraintsたち知ってると得するかもしれないConstraintsたち
知ってると得するかもしれないConstraintsたち
 
Kilimanjaro Event
Kilimanjaro EventKilimanjaro Event
Kilimanjaro Event
 
Magic Leap で WebRTC 触ってみた
Magic Leap で WebRTC 触ってみたMagic Leap で WebRTC 触ってみた
Magic Leap で WebRTC 触ってみた
 
SORACOM Conference Discovery 2017 | E3. デバイスからのクラウド連携パターン
SORACOM Conference Discovery 2017 | E3. デバイスからのクラウド連携パターンSORACOM Conference Discovery 2017 | E3. デバイスからのクラウド連携パターン
SORACOM Conference Discovery 2017 | E3. デバイスからのクラウド連携パターン
 
getUserMedia
getUserMediagetUserMedia
getUserMedia
 
ビデオ通話・P2Pがコモディティ化する世界 WebRTCによるこれからを探る
ビデオ通話・P2Pがコモディティ化する世界 WebRTCによるこれからを探るビデオ通話・P2Pがコモディティ化する世界 WebRTCによるこれからを探る
ビデオ通話・P2Pがコモディティ化する世界 WebRTCによるこれからを探る
 
Microsoft Intelligent Edge Technologies
Microsoft Intelligent Edge TechnologiesMicrosoft Intelligent Edge Technologies
Microsoft Intelligent Edge Technologies
 
WebRTCとPeer.jsを使った実装
WebRTCとPeer.jsを使った実装WebRTCとPeer.jsを使った実装
WebRTCとPeer.jsを使った実装
 
Deploy TypeScript with CodePipeline in Fargate
Deploy TypeScript with CodePipeline in FargateDeploy TypeScript with CodePipeline in Fargate
Deploy TypeScript with CodePipeline in Fargate
 
WebRTC meetup Tokyo 1
WebRTC meetup  Tokyo 1WebRTC meetup  Tokyo 1
WebRTC meetup Tokyo 1
 
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
 
Browser and Mozilla
Browser and MozillaBrowser and Mozilla
Browser and Mozilla
 
HTML5開発最前線
HTML5開発最前線HTML5開発最前線
HTML5開発最前線
 
SORACOM Technology Camp 2018 | A3. IoT×クラウドデザインパターン
SORACOM Technology Camp 2018 | A3. IoT×クラウドデザインパターンSORACOM Technology Camp 2018 | A3. IoT×クラウドデザインパターン
SORACOM Technology Camp 2018 | A3. IoT×クラウドデザインパターン
 
.NET の過去、現在、そして未来
.NET の過去、現在、そして未来.NET の過去、現在、そして未来
.NET の過去、現在、そして未来
 
レポート
レポートレポート
レポート
 

ひとつひとつ組み上げてみていくビデオチャットアプリのアーキテクチャ