画像変換・配信エンジン1枚の画像をもとにデバイスに最適化された画像を簡単に生成し、高速かつ高品質で配信します。ライブ配信エンジンインフラ運用不要のマネージドサービス。独自のライブ配信サービスを構築できます。【サーバー運用担当者必見!】WebRTCの使用帯域調査方法こんにちは、テリーです。ビデオ会議システムを構築する場合にもっともコストに影響を与えるのが、サーバー側のインターネット回線の通信使用料です。ユーザーとしては画質はきれいでなめらかであるほどよいことが多い。一方で、サーバー運用担当者としては、従量制で課金されることの多い通信データの量を落としてコストをギリギリまで下げたい、しかしユーザー満足度も高止まりさせたい、と日々思い悩んでいることでしょう。今回はビデオ会議における通信速度の確認方法について紹介します。以下の環境にて動作を確認しています。getStats関数の使い方WebRTCのpeerConnectionクラスにはgetStats関数があり、WebRTCに関連するたくさんの情報が手に入ります。接続が完了したあとにgetStatsを定期的に読むことで、リアルタイムの情報を取得、表示することができます。読み出しの間隔があまりに短いと読みにくいので3秒に1回あたりがオススメです。getStatsを使ったサンプルプログラムを以下に示します。getRTCStats関数は後述する自作の関数です。引数にgetStatsの戻り値(Promise<RTCStatsReport>型)を渡し、第二引数に情報を表示するhtmlのselectorを指定します。3000);以下は自作関数getRTCStatsの前半です。最初に第一引数statsObjectをawaitでRTCStatsReport型の値を取得します。RTCStatsReportは辞書のような型になっており、たくさんのデータが含まれています。これらをforEach関数でループして読んでいきます。typeプロパティがデータの種類を表します。要素の順番は保証されていないので、複数の要素が絡む場合には、forEachでいったん別の変数に代入します。kindプロパティに"video"、"audio"の値が入っており、映像関連の情報か音声関連の情報かを区別できます。自分のパソコンからサーバーにデータを送ることをアップロードといいますが、WebRTCではOutboundという表現をします。Soraの場合、1接続で1ビデオ、1音声までと決まっています。上述のoutboundRTPVideoStat変数から値を取得し、画面に表示するテキストを求めます。frameWidth、frameHeight、framesPerSecond、bytesSent、bytesReceivedです。bitrateを算出する関数getBitrateについては後述します。}ダウンロード情報の取得サーバーから自分のパソコンにデータを受け取ることをダウンロードといいますが、WebRTCではInboundという表現をします。ビデオ会議では複数の映像や音声が届きますので、配列変数inboundRTPVideoStatsに格納し、そのあと整理して表示します。frameWidth、frameHeight、framesPerSecond、bytesSent、bytesReceivedです。bitrateを算出する関数getBitrateについては後述します。Inbound情報の画面表示では、配列のデータを区別して、画面のどのDOMエレメントに表示するかを算出する処理が必要です。これは、接続の受信時にあらかじめDOMエレメントのIDを割り当てておくと簡単です。下記の例では、ビデオトラックを含むメディアストリームを求め、そのストリームIDを接続IDとしています(プログラムの6行目)。DOMエレメントのIDの命名規則は各自のWebアプリケーションに合わせ読み替えてください。上述のコードから呼ばれる、ビットレートを算出する自作関数getBitrateは、以下のとおりです。直近のビットレートを算出する関数はWebRTC標準関数のなかには存在しません。getStats関数で取得できる値は累計のデータバイト数です。Inboundの場合はbytesReceivedプロパティ、Outboundの場合はbytesSentプロパティに、累計のデータバイト数が入っています。そこで、本関数を呼び出すごと(3秒ごと)に前回(3秒前)のデータとの差を求め、インターバル間隔の3(秒)で割り、さらに8をかけることで、直近の平均ビットレートが求められます。送信、受信ともに計算工程が同じなため、同時に計算しています。戻り値は要素2つの配列で、1つ目が送信ビットレート、2つ目が受信ビットレートです。bitrateReceived];}サンプル期待どおり動作していることを確認するために、解像度、フレームレート、ビットレートをリアルタイムに表示するサンプルを作成しました。顔映像を100kbps、画面共有映像を3Mbpsとして接続しました。画面上部の手が映っているのが顔映像。bitrateが100kbps程度になっている。画面下部の画面共有映像はbitrateが2.6Mbps程度出ているまとめWebRTCのgetStats関数を使って、リアルタイムのビデオビットレートを画面に表示する方法を紹介しました。リアルタイムビットレートを表示しながら検証すると、「画質はもう少し下げられるかも?」といった主観的な判断が可能になります。プログラムミス、設定ミスなどで、開発者の意図と異なるビットレートが出ていることを発見することもできるでしょう。挑戦してみてください。Streaming」がおすすめです。SFUという技術を用いて、配信映像をサーバーに中継させる仕組みを用いています。一対多の会員制映像配信にとくに強みがあり、初期の利用コストを低価格に抑えることも可能です。ポストプロダクション向けに動画編集のコラボレーションシステムとして利用された実績もあります。徹)2002年よりケータイ向けライブ配信システムの開発・運用・販売を行い、プロ野球中継、音楽ライブコンサート、公営ギャンブル等の大規模ライブ配信システムの構築を担当。使ったサービスを短時間で考案・開発し、多数の優勝経験を持つ。ライブ配信サービス手軽に構築できます。すべての機能をお試しいただけます。お問い合わせ※サービスの詳細・お申し込みは、各サービスページをご確認ください。