複数ユーザーで構成されるビデオセッションのユーザー体験を最適化する
読む所要時間: 9 分
教育、社会交流、職場のコラボレーションなどのシナリオでは、誰もが会話に参加するために、複数ユーザーでも円滑に動作する優れたビデオ環境が不可欠です。その必要性や価値は明らかですが、ブラウザーやモバイルデバイス向けの、複数ユーザー対応の高性能なビデオアプリケーションの構築は困難です。構築するビデオUIは、直感的であるとともに、ユーザーが使用するデバイスやネットワークの種類を問わず優れたビデオ体験を提供する必要があります。
2019年、Twilioはネットワーク帯域幅プロフィールAPIを導入しました。このAPIは、ユースケースに基づき帯域幅を特定の参加者に割り当てるのに役立ちます。今回Twilioでは、ネットワーク帯域幅プロフィールAPIの機能強化版をリリースしました。機能強化版では、帯域幅とCPUの両方について、複数ユーザー利用を意識した効率的なビデオアプリケーションの構築を支援します。この効率性により、ユーザーのコンピューターのファンがうるさく回転する状況がなくなり、ビデオ品質は向上し、開発者サポートの負担が軽減されます。その他のアップデート項目として、ビデオトラックのスイッチオフのきめ細かい制御や、ユニークなレイアウトの作成が可能となっています。本稿では、ネットワーク帯域幅プロフィールAPIの機能強化版を使用する利点と、その使用例をご紹介します。
CPUリソースと帯域幅の利用を節約する
ビデオアプリケーションは多岐にわたってCPUリソースを消費します。まず、アプリケーションのインタラクションとUIレンダリングに関する全般的な処理です。そして、メディアのデコード・エンコードの処理です。CPUサイクルは、ルームの参加者に対応する受信ビデオトラックそれぞれのデコードに費やされます。ビデオトラックが多いほど、また解像度が高いほど、多くのCPUリソースが使用されます。ダウンストリームの帯域幅についても同じことが言えます。ビデオトラックが多く、解像度が高いほど、多くの帯域幅が使用されます。
ビデオアプリケーションによるCPUリソースと帯域幅の浪費が発生するのは、解像度の高いビデオをエンコードして、解像度の低いビデオにレンダリングするときです。たとえば、1280x720ピクセルのビデオトラックをクライアントから受信し、176x144ピクセルの領域にレンダリング(表示)する場合、ユーザーのコンピューターでCPUリソースと帯域幅が浪費されます。
ネットワーク帯域幅プロフィールAPIの初期リリースにおいて、開発者側でよく発生したミスは、UI上の実際のビデオレンダリング領域よりもはるかに大きいrenderDimensions
値を使用することでした。この気づきに基づき、Twilioはネットワーク帯域幅プロフィールAPIをアップデートし、この問題を解決しました。
ネットワーク帯域幅プロフィールAPIの最新リリースでは、JavaScript、iOS、Androidの各SDKについて2つの最適化機能を導入しました。
- 表示されていないビデオトラックは自動的にオフになり、CPUリソースと帯域幅が節約されます。
- Twilio Media Serverは、クライアントアプリケーションで実際に使用されるレンダリングサイズに対して、より適合するサイズのビデオトラックをクライアントに配信します。
また、特定のタイミングでビデオトラックをオンに切り替えたり、各ビデオトラックの望ましい解像度を指定することが、手動制御できるようになりました。
開発をはじめる
ネットワーク帯域幅プロフィールAPIの最新バージョンでは、これらの新機能はデフォルトで有効になりますが、必要に応じて明示的に無効にできます。
JavaScript
1つ目の設定はclientTrackSwitchOffControl
です。auto
に設定すると、ドキュメントの表示状況、トラックへのアタッチ、ビデオ要素の表示状況に基づき、RemoteVideoTrack
をオン/オフのどちらにするかが自動的に判断されます。RemoteVideoTrack
がオフに切り替わるタイミングは、ドキュメントがもう表示されないときや、トラックにビデオ要素がアタッチされていないとき、またはトラックにアタッチされたビデオ要素が表示されていないときです。manual
に設定すると、ビデオトラックを明示的にオン・オフすることができます。その際、RemoteVideoTrack.switchOn()
またはRemoteVideoTrack.switchOff()
メソッドを使用します。
2つ目の設定はcontentPreferencesMode
です。auto
に設定するとSDKによりビデオ要素のレイアウトサイズが自動検出され、Media Serverに通知されます。次に、Media Serverは検出されたレイアウトサイズに適合するサイズのビデオストリームを配信します。UIのレイアウト変更に応じてビデオタイルの相対サイズが変化し、各ビデオ要素に関連付けられた帯域幅とCPUリソースの割り当ても調整されます。contentPreferencesMode
をmanual
に設定すると、各ビデオトラックの望ましい解像度を、setContentPreferences()
メソッドを使用してMedia Serverに明示的に通知できます。
Android
Androidでも、新しいネットワーク帯域幅プロフィール設定のclientTrackSwitchOffControl
を導入しました。設定できる値はauto
またはmanual
です。auto
に設定すると、SDKでは、レンダラーアタッチメント、ビューの表示状況、アプリケーションライフサイクルに基づき、トラックをオフにするかどうかが判断されます。manual
に設定すると、トラックを明示的にオン・オフにできます。その際、RemoteVideoTrack.switchOn()
またはRemoteVideoTrack.switchOff()
メソッドを使用します。
その他に、新しいネットワーク帯域幅プロフィールオプションのVideoContentPreferencesMode
があります。auto
に設定すると、Twilio Media Serverはビデオビューのサイズに適合するビデオコンテンツをクライアントに配信します。ビデオ品質は、サイズの大きいVideoView
またはVideoTextureView
によりレンダリングされるRemoteVideoTrack
のほうが、サイズの小さいVideoView
またはVideoTextureView
によりレンダリングされるRemoteVideoTrack
の場合よりも向上します。配信されるビデオのサイズを手動でさらに制御したい場合は、manual
モードを選択し、RemoteVideoTrack.setContentPreferences()
メソッドを使用します。
iOS
iOS SDKについても同様です。clientTrackSwitchOffControl
フィールドとcontentPreferencesMode
フィールドがネットワーク帯域幅プロフィールオプションに追加されました。clientTrackSwitchOffControl
フィールドをauto
に設定すると、SDKでは、レンダラーアタッチメント、ビューの表示状況、アプリケーションライフサイクルに基づき、トラックをオフにするかどうかが判断されます。manual
に設定すると、トラックを明示的にオン・オフにできます。その際、RemoteVideoTrack.switchOn()
またはRemoteVideoTrack.switchOff()
メソッドを使用します。
contentPreferencesMode
をauto
に設定すると、Twilio Media Serverは、ビデオビューのサイズに適合するビデオコンテンツをクライアントに配信します。ビデオ品質は、サイズの大きいVideoView
によりレンダリングされるRemoteVideoTrack
のほうが、サイズの小さいVideoView
によりレンダリングされるRemoteVideoTrack
の場合よりも向上します。配信されるビデオのサイズを手動でさらに制御したい場合は、manual
モードを選択し、RemoteVideoTrack.setContentPreferences()
メソッドを使用します。