Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ビデオ通話システムの謎を解け!

 ビデオ通話システムの謎を解け!

リモートワークが一般的になり爆発的な普及を見せたビデオ通話サービス。今ではリモートワークだけでなく、リモート飲み会など生活にも溶け込むものとなりました。では、そんなビデオ通話サービスの裏側では一体どのような技術が使われているのでしょうか。また、他の技術では何が問題となるのでしょうか。

そこで今回、HTTPという身近な技術からメリット・デメリットを考えていき、なぜWebRTCが使われているのか?を段階的に紹介させていただきました。資料の後半ではWebRTCでは何が問題になるのか、それを解決するための手法はどのようなものがあるのかについても説明します

DeNA_Tech

July 21, 2020
Tweet

More Decks by DeNA_Tech

Other Decks in Technology

Transcript

  1. HTTP • クライアントからサーバに問い合わせることでコンテンツを取得する通信手段 • 一方向だ... • 双方向を実現する手法もある! • ポーリング •

    定期的にリクエストし、擬似的に双方向通信 • リアルタイム性△ • 通信のたびにコネクション張る。オーバーヘッド大 • WebSocket • コネクション張りっぱなしにして、ソケット通信 • 双方向!リアルタイム性◯ • では、WebSocketでよさそう…? 12 ポーリング WebSocket
  2. え?TCP? • TCPは信頼性の高い通信を実現するためのプロトコル • 第4層 - トランスポート層 • HTTPより下 •

    HOGEと送ったら必ずHOGEと伝わる • HGEOにもHGEにもならない • 順序を保証したり、足りないデータを再送する仕組みがある • パケットを正確に受信できるまで、次のパケットを待つ • これビデオ通話に必要でしょうか? 14 第7層 アプリケーション層 第6層 プレゼンテーション層 第5層 セッション層 第4層 トランスポート層 第3層 ネットワーク層 第2層 データリンク層 第1層 物理層
  3. ここまでまとめると... • ビデオ通話システムに必要なのは • 双方向通信 • リアルタイム性 • HTTPで考えてみる •

    WebSocketなら双方向・リアルタイムで通信できそう、良さそう • しかし、TCP上のプロトコルであるため大容量を高速に配信するのは辛い • UDPで双方向・リアルタイム通信できる方法さえあれば... 16
  4. WebRTC • 双方向に、リアルタイムで、UDPで通信する技術 • 色々な機能が詰め込まれている技術 • 音声・映像の圧縮 • マイク・カメラ等のデバイス認識・選択 •

    UDP上で独自の再送制御など • P2P(1対1)で通信 • クライアント同士でコネクションを張る • どうやってクライアント同士繋ぐのか? 20
  5. シグナリングサーバ、実際に作ってみた • singo • tockn/singo: Simple WebRTC Signaling Server written

    in Go • signal (信号) + Go = singo • P2Pフルメッシュで複数人とコネクション確立できるシグナリングサーバ • Starしてね⭐ 24
  6. これでZoom作れんの? • 結論から言うと、無理 • 繋がらない問題 • シグナリングサーバだけでは繋がらない場合がある • シンメトリックNATなど •

    P2Pフルメッシュ辛い • クライアント側が人数分のコネクションを持つことになる • 全員へ個別に音声・映像を送信 • 人が増えるたびに処理が重くなる... 25
  7. MCU (Multipoint Control Unit) • サーバで映像を合成しちゃう技術 • 複数人相手でも、クライアントはコネクション一つで済む • デメリット

    • サーバの負荷大 • リアルタイム映像合成 • クライアント側で映像を弄れない • 特定の映像を大画面にしたりとか 27 MCUサーバ 4つの映像を1つの映像に合成
  8. SFU (Selective Forwarding Unit) • サーバが映像を転送する技術 • 複数人相手でも、クライアントはコネクション一つにできる • 一つのコネクション内に複数の映像を入れる

    • マルチストリーム • デメリット • 仕組み・実装が複雑 • MCUよりはクライアントに負荷 28 SFUサーバ 一つのコネクションに 複数の映像を転送 (マルチストリーム)