WebRTCのシグナリングをSignalRでやってみた(解説編)
2019-06-26
azblob://2022/11/11/eyecatch/2019-06-26-webrtc-signaling-by-signalr-1-000.jpg

皆さんはじめまして! FIXERでアルバイトをしている門下佳樹です。
先輩社員の方々が面白いブログ記事をたくさん書いているので、私も書いてみたいと思い、この度、記事を書いてみました!

はじめに

今回は「WebRTCのシグナリング処理をSignalRでやってみる」ということに挑戦しました。もともと私はWebRTCという技術に興味を持っており、アルバイトとして入社した際に最初に開発に加わったプロジェクトが、WebRTCを用いたビデオ会議システム「CVC」でした。 「WebRTC? シグナリング?? SignalR???」という方のために、今回は解説編として簡単に解説します。

WebRTCとは

WebRTCは簡単に言うと「ブラウザなどでプラグイン無しでP2P通信を実現する技術」です。P2Pで動画、音声、テキスト、バイナリの各種データを送受信することができます。基本はP2Pですが、サーバーを経由することも可能です。 WebRTCはビデオチャットサービスなどに使われることが多く、弊社のサービスの一つ、Cloud Video Conference CVCでも使われています。

シグナリングとは

WebRTCでは、通信を行う際に「シグナリング」という処理を行う必要があります。シグナリングでは、通信を行うホストのIPアドレスや使用するコーデックといった、通信・メディアに関する情報をSDP(Session Description Protocol)という形式で記述し、SDPを相互に交換することで、「どこの、誰と、どのようなデータを送受信するのか」を把握します。 WebRTCの通信はP2Pで行われますが、シグナリングをしないと、どこの誰と通信するのかが分かりません。そのため、シグナリングはサーバー・クライアントモデルで行われます。シグナリングの方法はWebRTCの規格では定められていないので、文字列がやり取りできるのであれば、どのような方法でも構いません。手動でもできますが、一般的にはWebSocketが使われることが多いようです。

SignalRとは

SignalRは、WebアプリケーションにリアルタイムWebの機能を組み込むことができるライブラリです。サーバーからクライアントに随時データを送ったり、サーバーをハブとしてクライアント間のリアルタイムチャットを実装したりすることができます。通信方法は、

  • WebSocket
  • Server-Send Events(SSE)
  • ロングポーリング

の3つの方法から、サーバーとクライアントの状況に応じて適切なものが選ばれます。イメージ的にはNode.jsにおけるSocket.ioのようなものです。

ASP.NET Core SignalR の概要 | Microsoft Docs

おわりに

今回は解説編として、WebRTC、シグナリング、SignalRについて解説しました。次回は実装編として、簡単なビデオチャットアプリを作っていきます。