네트워크 품질 검사

방에 들어가기 전 또는 통화 중에 사용자의 네트워크 품질을 검사하여 사용자 현재의 네트워크 품질 상태를 판단할 수 있습니다. 사용자의 네트워크 품질이 너무 나쁜 경우, 네트워크를 검사하거나 네트워크를 교체하여 정상적인 통화 품질을 보장하도록 사용자에게 권장해야 합니다.

여기서는 주로 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 이벤트를 모니터링함으로써 업스트림 네트워크 품질을 검사합니다.
4. downlinkTRTC를 사용하여 풀링하고, NETWORK_QUALITY 이벤트를 모니터링함으로써 다운스트림 네트워크 품질을 검사합니다.
5. 전체 과정은 약 15s 지속될 수 있으며, 마지막에 평균 네트워크 품질을 취하여 업/다운스트림 네트워크 상태를 대략적으로 판단합니다.
주의사항:
검사 과정에서 소량의 과금이 발생하게 됩니다. 배포 스트림 해상도를 지정하지 않으면, 기본적으로 해상도가 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보다 큰 경우, 작은 스트림을 구독하거나 오디오만 구독하는 방식(참고: 다중 사용자 비디오 통화 최적화)을 통해 다운스트림 대역폭 소비스를 낮출 수 있습니다.