Submit Search
Upload
ひとつひとつ組み上げてみていくビデオチャットアプリのアーキテクチャ
•
0 likes
•
728 views
Koki Kumagai
Follow
2017/04/24 青山エンジニア勉強交流会 19:30 ~ by @kmagai
Read less
Read more
Software
Report
Share
Report
Share
1 of 35
Download now
Download to read offline
Recommended
WebRTC on Edge
WebRTC on Edge
Saki Homma
iPhoneでなんちゃってWebRTC
iPhoneでなんちゃってWebRTC
Kensaku Komatsu
Breakouts でPresentation API の拡張提案したよ
Breakouts でPresentation API の拡張提案したよ
Saki Homma
.NET Core 3.0 で Blazor を使用したフルスタック C# Web アプリの構築
.NET Core 3.0 で Blazor を使用したフルスタック C# Web アプリの構築
Joni
Write slides and books in VSCode + Markdown
Write slides and books in VSCode + Markdown
ロフト くん
LINE BOOT AWARDS に挑む ~テクノロジーファーストでもいいじゃない
LINE BOOT AWARDS に挑む ~テクノロジーファーストでもいいじゃない
Kazumi IWANAGA
Desktop app dev strategy for .net core 3.0
Desktop app dev strategy for .net core 3.0
Atsushi Nakamura
Settings SyncとCodespaceで体験する新世代へのパラダイムシフト
Settings SyncとCodespaceで体験する新世代へのパラダイムシフト
Atsushi Nakamura
Recommended
WebRTC on Edge
WebRTC on Edge
Saki Homma
iPhoneでなんちゃってWebRTC
iPhoneでなんちゃってWebRTC
Kensaku Komatsu
Breakouts でPresentation API の拡張提案したよ
Breakouts でPresentation API の拡張提案したよ
Saki Homma
.NET Core 3.0 で Blazor を使用したフルスタック C# Web アプリの構築
.NET Core 3.0 で Blazor を使用したフルスタック C# Web アプリの構築
Joni
Write slides and books in VSCode + Markdown
Write slides and books in VSCode + Markdown
ロフト くん
LINE BOOT AWARDS に挑む ~テクノロジーファーストでもいいじゃない
LINE BOOT AWARDS に挑む ~テクノロジーファーストでもいいじゃない
Kazumi IWANAGA
Desktop app dev strategy for .net core 3.0
Desktop app dev strategy for .net core 3.0
Atsushi Nakamura
Settings SyncとCodespaceで体験する新世代へのパラダイムシフト
Settings SyncとCodespaceで体験する新世代へのパラダイムシフト
Atsushi Nakamura
Deploy TypeScript Application by CodePipeline
Deploy TypeScript Application by CodePipeline
bitbank, Inc. Tokyo, Japan
Azureクラウドのネイティブアプリ、IoTとエッジAIの管理ソリューション
Azureクラウドのネイティブアプリ、IoTとエッジAIの管理ソリューション
Jingun Jung
KinectプログラミングStepByStep
KinectプログラミングStepByStep
信之 岩永
SkyWay Vision & Mission
SkyWay Vision & Mission
Yoshiki Mizushima
20201127 .NET 5
20201127 .NET 5
Takayoshi Tanaka
C# でブロックチェーン実装
C# でブロックチェーン実装
Yuto Takei
WebRTCについてざっと
WebRTCについてざっと
Fumiyasu Sumiya
C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021
Atsushi Nakamura
Node.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたこと
bitbank, Inc. Tokyo, Japan
Unno Wataru Nutanix Advent Calendar 2018
Unno Wataru Nutanix Advent Calendar 2018
Wataru Unno
ゼロから始めるQ#
ゼロから始めるQ#
Takayoshi Tanaka
Test automation strategy for .net core 3 transition
Test automation strategy for .net core 3 transition
Tatsuya Ishikawa
6万行の TypeScript 移行とその後
6万行の TypeScript 移行とその後
Shingo Sasaki
Kinectプログラミング Step by Step
Kinectプログラミング Step by Step
Akira Hatsune
Fukuten 20200117 up
Fukuten 20200117 up
Ken'ichirou Kimura
(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話
Masanori Masui
α版 継続的にテスト可能な設計を考える
α版 継続的にテスト可能な設計を考える
Atsushi Nakamura
継続的にテスト可能な設計を考える
継続的にテスト可能な設計を考える
Atsushi Nakamura
いつでもどこでも .NET
いつでもどこでも .NET
Yuta Matsumura
ASP.NET CoreとAzure AD B2Cを使ったサクっと認証
ASP.NET CoreとAzure AD B2Cを使ったサクっと認証
Yuta Matsumura
組み込みブラウザとメディアﰀ仕様あれこれ
組み込みブラウザとメディアﰀ仕様あれこれ
Masashi Umeda
5分でわかるWebRTCの仕組み - html5minutes vol.01
5分でわかるWebRTCの仕組み - html5minutes vol.01
西畑 一馬
More Related Content
What's hot
Deploy TypeScript Application by CodePipeline
Deploy TypeScript Application by CodePipeline
bitbank, Inc. Tokyo, Japan
Azureクラウドのネイティブアプリ、IoTとエッジAIの管理ソリューション
Azureクラウドのネイティブアプリ、IoTとエッジAIの管理ソリューション
Jingun Jung
KinectプログラミングStepByStep
KinectプログラミングStepByStep
信之 岩永
SkyWay Vision & Mission
SkyWay Vision & Mission
Yoshiki Mizushima
20201127 .NET 5
20201127 .NET 5
Takayoshi Tanaka
C# でブロックチェーン実装
C# でブロックチェーン実装
Yuto Takei
WebRTCについてざっと
WebRTCについてざっと
Fumiyasu Sumiya
C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021
Atsushi Nakamura
Node.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたこと
bitbank, Inc. Tokyo, Japan
Unno Wataru Nutanix Advent Calendar 2018
Unno Wataru Nutanix Advent Calendar 2018
Wataru Unno
ゼロから始めるQ#
ゼロから始めるQ#
Takayoshi Tanaka
Test automation strategy for .net core 3 transition
Test automation strategy for .net core 3 transition
Tatsuya Ishikawa
6万行の TypeScript 移行とその後
6万行の TypeScript 移行とその後
Shingo Sasaki
Kinectプログラミング Step by Step
Kinectプログラミング Step by Step
Akira Hatsune
Fukuten 20200117 up
Fukuten 20200117 up
Ken'ichirou Kimura
(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話
Masanori Masui
α版 継続的にテスト可能な設計を考える
α版 継続的にテスト可能な設計を考える
Atsushi Nakamura
継続的にテスト可能な設計を考える
継続的にテスト可能な設計を考える
Atsushi Nakamura
いつでもどこでも .NET
いつでもどこでも .NET
Yuta Matsumura
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 CodePipeline
Azureクラウドのネイティブアプリ、IoTとエッジAIの管理ソリューション
Azureクラウドのネイティブアプリ、IoTとエッジAIの管理ソリューション
KinectプログラミングStepByStep
KinectプログラミングStepByStep
SkyWay Vision & Mission
SkyWay Vision & Mission
20201127 .NET 5
20201127 .NET 5
C# でブロックチェーン実装
C# でブロックチェーン実装
WebRTCについてざっと
WebRTCについてざっと
C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021
Node.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたこと
Unno Wataru Nutanix Advent Calendar 2018
Unno Wataru Nutanix Advent Calendar 2018
ゼロから始めるQ#
ゼロから始めるQ#
Test automation strategy for .net core 3 transition
Test automation strategy for .net core 3 transition
6万行の TypeScript 移行とその後
6万行の TypeScript 移行とその後
Kinectプログラミング Step by Step
Kinectプログラミング Step by Step
Fukuten 20200117 up
Fukuten 20200117 up
(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話
α版 継続的にテスト可能な設計を考える
α版 継続的にテスト可能な設計を考える
継続的にテスト可能な設計を考える
継続的にテスト可能な設計を考える
いつでもどこでも .NET
いつでもどこでも .NET
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.01
西畑 一馬
WebRTC Boot Camp (WebRTC Conference Japan 2016) 事前公開版
WebRTC Boot Camp (WebRTC Conference Japan 2016) 事前公開版
You_Kinjoh
Web on Kernel
Web on Kernel
dynamis
知ってると得するかもしれないConstraintsたち
知ってると得するかもしれないConstraintsたち
Kensaku Komatsu
Kilimanjaro Event
Kilimanjaro Event
dynamis
Magic Leap で WebRTC 触ってみた
Magic Leap で WebRTC 触ってみた
NishoMatsusita
SORACOM Conference Discovery 2017 | E3. デバイスからのクラウド連携パターン
SORACOM Conference Discovery 2017 | E3. デバイスからのクラウド連携パターン
SORACOM,INC
getUserMedia
getUserMedia
Yusuke Naka
ビデオ通話・P2Pがコモディティ化する世界 WebRTCによるこれからを探る
ビデオ通話・P2Pがコモディティ化する世界 WebRTCによるこれからを探る
Kensaku Komatsu
Microsoft Intelligent Edge Technologies
Microsoft Intelligent Edge Technologies
Takeshi Fukuhara
WebRTCとPeer.jsを使った実装
WebRTCとPeer.jsを使った実装
Yuta Suzuki
Deploy TypeScript with CodePipeline in Fargate
Deploy TypeScript with CodePipeline in Fargate
bitbank, Inc. Tokyo, Japan
WebRTC meetup Tokyo 1
WebRTC meetup Tokyo 1
mganeko
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
Saki Homma
Browser and Mozilla
Browser and Mozilla
dynamis
HTML5開発最前線
HTML5開発最前線
yoshikawa_t
SORACOM Technology Camp 2018 | A3. IoT×クラウドデザインパターン
SORACOM Technology Camp 2018 | A3. IoT×クラウドデザインパターン
SORACOM,INC
.NET の過去、現在、そして未来
.NET の過去、現在、そして未来
Akira Inoue
レポート
レポート
xin song
Similar to ひとつひとつ組み上げてみていくビデオチャットアプリのアーキテクチャ
(20)
組み込みブラウザとメディアﰀ仕様あれこれ
組み込みブラウザとメディアﰀ仕様あれこれ
5分でわかるWebRTCの仕組み - html5minutes vol.01
5分でわかるWebRTCの仕組み - html5minutes vol.01
WebRTC Boot Camp (WebRTC Conference Japan 2016) 事前公開版
WebRTC Boot Camp (WebRTC Conference Japan 2016) 事前公開版
Web on Kernel
Web on Kernel
知ってると得するかもしれないConstraintsたち
知ってると得するかもしれないConstraintsたち
Kilimanjaro Event
Kilimanjaro Event
Magic Leap で WebRTC 触ってみた
Magic Leap で WebRTC 触ってみた
SORACOM Conference Discovery 2017 | E3. デバイスからのクラウド連携パターン
SORACOM Conference Discovery 2017 | E3. デバイスからのクラウド連携パターン
getUserMedia
getUserMedia
ビデオ通話・P2Pがコモディティ化する世界 WebRTCによるこれからを探る
ビデオ通話・P2Pがコモディティ化する世界 WebRTCによるこれからを探る
Microsoft Intelligent Edge Technologies
Microsoft Intelligent Edge Technologies
WebRTCとPeer.jsを使った実装
WebRTCとPeer.jsを使った実装
Deploy TypeScript with CodePipeline in Fargate
Deploy TypeScript with CodePipeline in Fargate
WebRTC meetup Tokyo 1
WebRTC meetup Tokyo 1
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
Browser and Mozilla
Browser and Mozilla
HTML5開発最前線
HTML5開発最前線
SORACOM Technology Camp 2018 | A3. IoT×クラウドデザインパターン
SORACOM Technology Camp 2018 | A3. IoT×クラウドデザインパターン
.NET の過去、現在、そして未来
.NET の過去、現在、そして未来
レポート
レポート
ひとつひとつ組み上げてみていくビデオチャットアプリのアーキテクチャ
1.
ビデオチャットアプリの アーキテクチャ ひとつひとつ 組み上げてみていく SHOWROOM株式会社 熊⾕ 昂樹
2.
誰 熊⾕昂樹 / kmagai 株式会社ディー・エヌ・エー
̶> SHOWROOM株式会社(出向中) 新卒3年⽬の(主に)アプリケーションエンジニア GitHub: kmagai Twitter: @kmagai_
3.
Server Firebase Cloud Messaging HeartbeatActor RoomSessionActor Akka
Actors MySQLStorage WebRTC ICE Server ICE SDP SDP Text / Image ICE overview Text / Image
4.
前半はWebRTCの⼀般的な実装の話 後半はメッセージングの話
5.
Firebase Cloud Messaging WebRTC ICE
Server ICE SDP SDP ICE まずはビデオチャット部分
6.
WebRTC WebRTC 101 そもそもの話 これになりたい
7.
😇 ローカルから⾒えるネットワー ク情報 ≠ インターネットから⾒える実際 のネットワーク情報 NATNAT WebRTC ❌❌
8.
😇 通信⼿段が分からない WebRTC ❌
9.
SDPをお互いに交換すれば WebRTC接続できる 🗒 🗒 🗒 🗒 SDP
SDP
10.
SDP(Session Description Protocol)? • メディアの種類/形式 •
暗号化の鍵 • ICE Candidate など 🗒 🗒 🗒 🗒 SDP SDP
11.
ICE Candidate = 相⼿から⾒た⾃分への接続⼿段 (IPとポート番号とか) 🗒
🗒 🗒 🗒 SDP SDP
12.
SDPの取得 ICE Candidateを取得すれば、 あとはWebRTCのライブラリが ⾃動的に⽣成してくれる 🗒 🗒 🗒
🗒 SDP SDP
13.
ICE Candidateの取得 1. ローカルから 2.
NATの外側から 3. リレーサーバー経由 🗒
14.
あらゆる接続経路・方法とは… 1. ローカルから 2. NATの外側から 3.
専用サーバー経由で 🗒 ICE Candidateの取得 1. ローカルから 2. NATの外側から 3. リレーサーバー経由 OSに問い合わせて取得 もしファイアウォール・NATが 存在しない場合はこれでも通信 できるかも…IP address: A port B/UDP
15.
あらゆる接続経路・方法とは… 1. ローカルから 2. NATの外側から 3.
専用サーバー経由で 🗒 SDP ICE Candidateの取得 1. ローカルから 2. NATの外側から 3. リレーサーバー経由 接続できる可能性のあるパブリッ クなルーティングパスを、NAT の外側にあるSTUNサーバーに 問い合わせて集める NAT STUN Server 🗒 IP address: A port B/UDP
16.
あらゆる接続経路・方法とは… 1. ローカルから 2. NATの外側から 3.
専用サーバー経由で 🗒 SDP ICE Candidateの取得 1. ローカルから 2. NATの外側から 3. リレーサーバー経由 どうしても接続できない場合に P2Pを諦めてTURN Server(リ レーサーバー)を経由する NAT TURN Server ❌ それでも繋げないことがある場合は…
17.
SDPが⼿に⼊ったので、送受信 を考える 🗒 🗒 🗒 🗒 SDP
SDP
18.
通信相⼿のSDPをどうやって受 け取るのか? 相⼿が通信可能であればすぐに 接続したい 🗒 🗒 🗒 🗒 SDP
SDP
19.
Signaling Serverをつくる サーバー側からクライアントに Pushできればよい e.g. WebSocket Firebase Cloud
Messaging 🗒 🗒 Signaling Server push
20.
Firebase Cloud Messaging WebRTC ICE
Server SDP SDP ICE こうなった ICE
21.
Server Firebase Cloud Messaging HeartbeatActor RoomSessionActor Akka
Actors MySQLStorage 次はメッセージング
22.
これになりたい
23.
できる!!!!! テキストやバイナリを送れる WebRTC DataChannel
24.
テキスト・画像はサーバーに保 存したい… (同時にお絵かきしたりすると かのユースケースには合いそう) WebRTC DataChannel 😇
25.
こうかな? Firebase Cloud Messaging MySQLStorage API
Server
26.
⼤量のメッセージを捌く… 😇 → 並⾏処理したいけど⼤変… Firebase
Cloud Messaging MySQLStorage API Server
27.
Akka • 並⾏処理 • スケーラビリティ •
耐障害性 Server Firebase Cloud Messaging RoomSessionActor Akka Actors MySQLStorage
28.
並列処理の実現 ⼀つ⼀つのActorの処理⾃体は 直列でミュータブルなデータを Actor間で共有しない ↓ 普通に書けばスレッドセーフ Server Firebase Cloud Messaging Akka
Actors MySQLStorage RoomSessionActor
29.
Actor 責務をActorに切り分ける e.g. RoomSessionActorはチャッ トルーム単位でActorをつくる Server Firebase Cloud
Messaging RoomSessionActor Akka Actors MySQLStorage
30.
まだ問題が… Server Firebase Cloud Messaging Akka
Actors MySQLStorage RoomSessionActor
31.
対障害性の問題 このままではクラッシュした時 にハンドリングできない Server Firebase Cloud Messaging RoomSessionActor Akka
Actors MySQLStorage crash!
32.
責務の切り分け問題 RoomSessionActorの⽣成や管 理の責務はどこが持つのか? Server Firebase Cloud Messaging RoomSessionActor Akka
Actors MySQLStorage どこから⽣成されるべき?
33.
親(HeartbeatActor)をつくる RoomSessionActorのライフサ イクル管理の責務を担う e.g. エラーハンドリング、 RoomSessionActor⽣成、メッ セージフォワーディング、死活 監視 Server Firebase Cloud
Messaging HeartbeatActor RoomSessionActor Akka Actors MySQLStorage
34.
Server Firebase Cloud Messaging HeartbeatActor RoomSessionActor Akka
Actors MySQLStorage WebRTC ICE Server ICE SDP SDP Text / Image ICE Text / Image
35.
おわり GitHub: kmagai Twitter: @kmagai_
Download now