ネットワーク品質の検出

ルームに入る前や通話中に、ユーザーのネットワーク品質を検出することで、その時点のユーザーのネットワーク品質を判断することができます。ユーザーのネットワーク品質が悪すぎる場合は、正常な通話品質を確保するために、ネットワークを確認するか、ネットワークを変更するよう、ユーザーにアドバイスする必要があります。

この文章では、 NETWORK_QUALITY イベントに基づいて、通話中および通話前にネッ トワーク品質検出を実装する方法について説明します。

通話中のネットワーク品質検出

参照するイベント:NETWORK_QUALITY
const trtc = TRTC.create();
trtc.on(TRTC.EVENT.NETWORK_QUALITY, event => {
console.log(`network-quality, uplinkNetworkQuality:${event.uplinkNetworkQuality}, downlinkNetworkQuality: ${event.downlinkNetworkQuality}`)
console.log(`uplink rtt:${event.uplinkRTT} loss:${event.uplinkLoss}`)
console.log(`downlink rtt:${event.downlinkRTT} loss:${event.downlinkLoss}`)
})

通話前のネットワーク品質検出

実装プロセス

1. TRTC.create を呼び出して、uplinkTRTC と downlinkTRTC という 2 つの trtc オブジェクトを作成します。
2.この 2 つの TRTC は同じルームに入ります。
3.uplinkTRTC を使用してプッシュし、 NETWORK_QUALITY イベントをリスニングすることで上がりのネットワーク品質を検出します。
3.downlinkTRTC を使用してプルし、 NETWORK_QUALITY イベントをリスニングすることで下りのネットワーク品質を検出します。
5.全過程は約 15 秒間続き、最終的に平均的なネットワーク品質が取得され、上がり・下りのネットワーク状況を大まかに判断します
ご注意:
検出の過程で少量 課金が発生します。リリースストリームの解像度を指定しない場合、デフォルトのリリース解像度は 640*480 のビデオストリームです。

API 呼び出し順序

network-quality-call-sequence


コード例

let uplinkTRTC = null; // Used to detect uplink network quality
let downlinkTRTC = null; // Used to detect downlink network quality
let localStream = null; // Stream used for testing
let testResult = {
// Record uplink network quality data
uplinkNetworkQualities:[],
// Record downlink network quality data
downlinkNetworkQualities:[],
average:{
uplinkNetworkQuality:0,
downlinkNetworkQuality:0
}
}

// 1. Test uplink network quality
async function testUplinkNetworkQuality() {
uplinkTRTC = TRTC.create();

uplinkTRTC.enterRoom({
roomId:8080,
sdkAppId:0, // Fill in sdkAppId
userId:'user_uplink_test',
userSig:'', // userSig of uplink_test
scene:'rtc'
})

uplinkTRTC.on(TRTC.EVENT.NETWORK_QUALITY, event => {
const { uplinkNetworkQuality } = event;
testResult.uplinkNetworkQualities.push(uplinkNetworkQuality);
});

}

// 2. Detect downlink network quality
async function testDownlinkNetworkQuality() {
downlinkTRTC = TRTC.create();
downlinkTRTC.enterRoom({
roomId:8080,
sdkAppId:0, // Fill in sdkAppId
userId:'user_downlink_test',
userSig:'', // userSig
scene:'rtc'
});

downlinkTRTC.on(TRTC.EVENT.NETWORK_QUALITY, event => {
const { downlinkNetworkQuality } = event;
testResult.downlinkNetworkQualities.push(downlinkNetworkQuality);
})
}

// 3. Start detection
testUplinkNetworkQuality();
testDownlinkNetworkQuality();

// 4. Stop detection after 15s and calculate the average network quality
setTimeout(() => {
// Calculate the average uplink network quality
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) {
// Calculate the average downlink network quality
testResult.average.downlinkNetworkQuality = Math.ceil(
testResult.downlinkNetworkQualities.reduce((value, current) => value + current, 0) / testResult.downlinkNetworkQualities.length
);
}
// Detection is over, clean up related states.
uplinkTRTC.exitRoom();
downlinkTRTC.exitRoom();
}, 15 * 1000);

結果分析

上記のステップを経て、上がりの平均ネットワーク品質、下りの平均ネットワーク品質を得ることができます。ネットワーク品質の列挙値を以下に示します。
数値
意味
0
ネットワーク状態が不明で、現在の TRTC インスタンスがまだ上がり/下りリンク接続を確立していないことを示します
1
優れたネットワーク状況
2
良好なネットワーク状況
3
まあまあのネットワーク状況
4
悪いネットワーク状況
5
非常に悪いネットワーク状況
6
ネットワーク接続が切断されました 注意:下りネットワーク品質がこの値の場合、すべての下り接続が切断されていることを意味します
提案:
ネットワーク品質が 3 より大きい場合、ネットワークの確認とネットワーク環境の変更を行うようユーザーを案内する必要があります。そうしないと、正常なオーディオ・ビデオ通話を保証することは困難です。また、以下のポリシーによって帯域幅の消費を削減することができます。
上がりネットワーク品質が 3 より大きい場合、 TRTC.updateLocalVideo() インターフェースによってビットレートを下げるか、 TRTC.stopLocalVideo() によってビデオをオフにすることで、上がり帯域幅の消費を低減ことができます。
下りネットワーク品質が 3 より大きい場合、スモールストリームまたはオーディオのみをサブスクリプションすることで(多人数ビデオ通話の最適化を参照) 、下り帯域幅の消費を抑えることができます。