Web
入室前や通話中に、ユーザーのネットワーク品質を検出し、ユーザーの現在のネットワーク品質を事前に判断することができます。ユーザーのネットワーク品質が低すぎる場合は、通常の通話品質を確保するためにネットワーク環境を変更するようにユーザーにアドバイスする必要があります。
このドキュメントでは、主にNETWORK_QUALITYイベントに基づいて通話前のネットワーク品質検出を実装する方法を紹介します。通話中にネットワーク品質を確認するには、NETWORK_QUALITYイベントを監視するのみです。
実装のフロー
1.TRTC.createClientを呼び出して、それぞれuplinkClientおよびdownlinkClientという2つのClientを作成します。
2. これら2つのClientは、同じルームに入ります。
3. uplinkClientを使用してプッシュし、NETWORK_QUALITYイベントを監視してアップリンクのネットワーク品質を確認します。
4. downlinkClientを使用してプルし、NETWORK_QUALITYイベントを監視してダウンリンクのネットワーク品質を確認します。
5. プロセス全体は約15秒間続く可能性があり、最後に平均ネットワーク品質を使用して、アップリンクとダウンリンクのネットワーク状態を大まかに判断します。
ご注意:
サンプルコード
let uplinkClient = null; // アップリンクネットワーク品質の確認に使用されますlet downlinkClient = null; //ダウンリンクネットワーク品質の確認に使用されますlet localStream = null; // テストされるストリームに使用されますlet testResult = {// アップリンクネットワーク品質のデータを記録しますuplinkNetworkQualities: [],// ダウンリンクネットワーク品質のデータを記録しますdownlinkNetworkQualities: [],average: {uplinkNetworkQuality: 0,downlinkNetworkQuality: 0}}// 1. アップリンクネットワーク品質を確認しますasync function testUplinkNetworkQuality() {uplinkClient = TRTC.createClient({sdkAppId: 0, // sdkAppIdを記入しますuserId: 'user_uplink_test',userSig: '', // uplink_testのuserSigmode: 'rtc'});localStream = TRTC.createStream({ audio: true, video: true });// 実際のサービスシーンに応じてvideo profileを設定しますlocalStream.setVideoProfile('480p');await localStream.initialize();uplinkClient.on('network-quality', event => {const { uplinkNetworkQuality } = event;testResult.uplinkNetworkQualities.push(uplinkNetworkQuality);});// テスト用ルームを追加します。競合を避けるためにルーム番号はランダムである必要がありますawait uplinkClient.join({ roomId: 8080 });await uplinkClient.publish(localStream);}// 2. ダウンリンクネットワーク品質を確認しますasync function testDownlinkNetworkQuality() {downlinkClient = TRTC.createClient({sdkAppId: 0, // sdkAppIdを記入しますuserId: 'user_downlink_test',userSig: '', // userSigmode: 'rtc'});downlinkClient.on('stream-added', async event => {await downlinkClient.subscribe(event.stream, { audio: true, video: true });// サブスクリプションに成功した後、ネットワーク品質イベントの監視を開始しますdownlinkClient.on('network-quality', event => {const { downlinkNetworkQuality } = event;testResult.downlinkNetworkQualities.push(downlinkNetworkQuality);});})// テスト用ルームを追加します。競合を避けるためにルーム番号はランダムである必要がありますawait downlinkClient.join({ roomId: 8080 });}// 3. 確認を開始しますtestUplinkNetworkQuality();testDownlinkNetworkQuality();// 4. 15秒後に確認を停止し、平均ネットワーク品質を計算しますsetTimeout(() => {// アップリンクの平均ネットワーク品質を計算しますif (testResult.uplinkNetworkQualities.length > 0) {testResult.average.uplinkNetworkQuality = Math.ceil(testResult.uplinkNetworkQualities.reduce((value, current) => value + current, 0) / testResult.uplinkNetworkQualities.length);}if (testResult.downlinkNetworkQualities.length > 0) {// ダウンリンクの平均ネットワーク品質を計算しますtestResult.average.downlinkNetworkQuality = Math.ceil(testResult.downlinkNetworkQualities.reduce((value, current) => value + current, 0) / testResult.downlinkNetworkQualities.length);}// 確認が終了し、関連する状態がクリアされます。uplinkClient.leave();downlinkClient.leave();localStream.close();}, 15 * 1000);
結果の分析
上記の手順により、アップリンクの平均ネットワーク品質とダウンリンクの平均ネットワーク品質を取得できます。ネットワーク品質の列挙値は次のとおりです:
数値 | 意味 |
0 | ネットワーク状態は不明で、現在のclientインスタンスがまだアップリンク/ダウンリンク接続を確立していないことを示しています |
1 | ネットワーク状態が優れています |
2 | ネットワーク状態が良好です |
3 | ネットワーク状態が一般です |
4 | ネットワーク状態が悪いです |
5 | ネットワーク状態が非常に悪いです |
6 | ネットワーク接続が切断されています。注:ダウンリンクネットワーク品質がこの値の場合、すべてのダウンリンク接続が切断されていることを示します |
ご注意:
推奨事項:ネットワーク品質が3を超える場合は、ユーザーにネットワークを確認してネットワーク環境を変更するように提案する必要があります。そうでない場合、通常のオーディオビデオ通話を確保することが困難になります。
次のポリシーを使用して、帯域幅の消費を削減することもできます:
アップリンクネットワーク品質が3より大きい場合、LocalStream.setVideoProfile()インターフェースを使用してビットレートを低減したりLocalStream.muteVideo()を使用してビデオを閉じたりして、アップリンク帯域幅の消費を削減することができます。
ダウンリンクネットワーク品質が3より大きい場合、低画質ストリームをサブスクリプションしたり(高・低画質ストリーム伝送を有効にするを参照)オーディオのみをサブスクリプションしたりして、ダウンリンク帯域幅の消費を削減することができます。