미디어 통계
WebPlanetKit은 최근의 미디어 통계를 얻을 수 있는 API를 제공합니다. 여기서는 이 API를 사용하는 방법과 각 미디어 스트림 유형에 대해 어떤 유형의 정보가 제공되는지 설명합니다.
미디어 통계 개요
getCurrentStats()
메서드를 사용하여 WebRTC 통계 중 일부 통계를 얻을 수 있습니다.
WebRTC 통계에 대한 자세한 내용은 Mozilla 문서의 RTCStatsReport를 참조하세요.
getCurrentStats()
메서드는 API 호출 당시의 통계를 나타내는 WebPlanetKitStatistics
객체를 반환합니다. WebPlanetKitStatistics
객체는 OutboundRtpStats
(outbound-rtp
통계)와 InboundRtpStats
(inbound-rtp
통계)로 구성됩니다.
outbound-rtp
통계에는 로컬 사용자의 오디오 및 비디오 통계가 포함됩니다.inbound-rtp
통계에는 한 명 이상의 피어에 대한 오디오 및 비디오 통계가 포함됩니다.
미디어 통계 상세 설명
미디어 스트림 유형별로 다음과 같은 통계 정보가 제공됩니다.
outbound-rtp
통계의 속성에 대한 자세한 내용은 RTCOutboundRtpStreamStats를 참조하세요.inbound-rtp
통계의 속성에 대한 자세한 내용은 RTCInboundRtpStreamStats를 참조하세요.
아웃바운드 오디오 스트림
아웃바운드 오디오 스트림(outbound-rtp
오디오)의 경우 다음 정보가 제공됩니다. 각 속성의 링크에서 자세한 설명을 볼 수 있습니다.
속성 | 설명 |
---|---|
kind | 이 스트림의 미디어 유형 |
ssrc | 이 스트림의 식별자 |
packetsSent | 이 스트림에서 전송된 총 패킷 수 |
bytesSent | 이 스트림에서 전송된 총 바이트 수 |
아웃바운드 비디오 스트림
아웃바운드 비디오 스트림(outbound-rtp
비디오)의 경우 다음 정보가 제공됩니다. 각 속성의 링크에서 자세한 설명을 볼 수 있습니다.
속성 | 설명 |
---|---|
kind | 이 스트림의 미디어 유형 |
ssrc | 이 스트림의 식별자 |
rid | 그룹 통화에서 비디오 해상도 수준을 나타냅니다. |
contentType | 이 스트림이 화면 공유용인 경우 이 속성의 값은 screenshare 가 됩니다. 그렇지 않으면 이 속성은 존재하지 않습니다. |
packetsSent | 이 스트림에서 전송된 총 패킷 수 |
bytesSent | 이 스트림에서 전송된 총 바이트 수 |
firCount | 이 스트림의 총 FIR(Full Intra Request) 패킷 수 |
pliCount | 이 스트림의 총 PLI(Picture Loss Indication) 패킷 수 |
nackCount | 이 스트림의 총 NACK(Negative Acknowledgement) 패킷 수 |
frameWidth | 비디오 프레임의 너비 |
frameHeight | 비디오 프레임의 높이 |
framesSent | 이 스트림에서 전송된 총 프레임 수 |
framesPerSecond | 마지막 1초 동안 인코딩된 프레임 수 |
targetBitrate | 이 스트림의 목표 비트레이트 |
인바운드 오디오 스트림
인바운드 오디오 스트림(inbound-rtp
오디오)의 경우 다음 정보가 제공됩니다. 각 속성의 링크에서 자세한 설명을 볼 수 있습니다.
속성 | 설명 |
---|---|
kind | 이 스트림의 미디어 유형 |
ssrc | 이 스트림의 식별자 |
packetsReceived | 이 스트림에서 수신된 총 패킷 수 |
bytesReceived | 이 스트림에서 수신된 총 바이트 수 |
packetsLost | 이 스트림에서 손실된 총 패킷 수 |
jitter | 수신된 패킷의 지연 변동 |
인바운드 비디오 스트림
인바운드 비디오 스트림(inbound-rtp
비디오)의 경우 다음 정보가 제공됩니다. 각 속성의 링크에서 자세한 설명을 볼 수 있습니다.
속성 | 설명 |
---|---|
kind | 이 스트림의 미디어 유형 |
ssrc | 이 스트림의 식별자 |
packetsReceived | 이 스트림에서 수신된 총 패킷 수 |
bytesReceived | 이 스트림에서 수신된 총 바이트 수 |
packetsLost | 이 스트림에서 손실된 총 패킷 수 |
jitter | 수신된 패킷의 지연 변동 |
firCount | 이 스트림의 총 FIR 패킷 수 |
pliCount | 이 스트림의 총 PLI 패킷 수 |
nackCount | 이 스트림의 총 NACK 패킷 수 |
frameWidth | 비디오 프레임의 너비 |
frameHeight | 비디오 프레임의 높이 |
framesReceived | 이 스트림에서 수신된 총 프레임 수 |
framesDecoded | 이 스트림에서 디코딩된 총 프레임 수 |
framesDropped | 이 스트림에서 드롭(drop)된 총 프레임 수 |
framesPerSecond | 마지막 1초 동안 디코딩된 프레임 수 |
통화 유형별 미디어 통계
이 섹션에서는 각 통화 유형에 대해 어떤 유형의 통계가 제공되는지 설명합니다.
1대1 통화
OutboundRtpStats
에는 로컬 사용자의 오디오 전송에 대한 하나의 오디오 스트림 통계와 로컬 사용자의 비디오 전송에 대한 하나의 비디오 스트림 통계가 포함됩니다. 로컬 사용자가 화면 공유를 수행하는 경우 OutboundRtpStats
에는 로컬 사용자의 화면 공유에 대한 또 다른 비디오 스트림 통계가 포함됩니다.
InboundRtpStats
에는 피어에 대한 오디오 스트림 통계 한 개와 비디오 스트림 통계 여러 개가 포함됩니다.
그룹 통화
OutboundRtpStats
에는 로컬 사용자의 오디오 전송에 대한 오디오 스트림 통계와 3개의 비디오 스트림 통계(해상도 수준별로 하나씩)가 포함되어 있습니다. 로컬 사용자가 화면 공유를 수행하는 경우 OutboundRtpStats
에는 로컬 사용자의 화면 공유에 대한 또 다른 비디오 스트림 통계가 포함됩니다.
InboundRtpStats
에는 방에 대한 오디오 스트림 통계 한 개와 각 피어에 대한 비디오 스트림 통계 여러 개가 포함되어 있습니다.
화면 공유 통계
화면 공유에 대한 통계는 OutboundRtpStats
또는 InboundRtpStats
에 비디오 스트림 통계로 포함됩니다.
로컬 사용자의 화면 공유 통계
로컬 사용자의 화면 공유에 대한 통계는 OutboundRtpStats
에 포함됩니다. 비디오 스트림 통계 중 화면 공유 통계만 contentType
속성을 가지며 그 값은 screenshare
입니다.
따라서 로컬 사용자의 화면 공유에 대한 통계를 얻으려면 OutboundRtpStats
중에서 kind
속성이 video
이고 contentType
속성이 screenshare
인 개체를 구합니다.
planetKit.getCurrentStats().then((stats) => {
const outboundRtpStats = stats['outbound-rtp'];
outboundRtpStats.forEach((outboundRtpStat) => {
if (outboundRtpStat.kind === 'video' && outboundRtpStat.contentType === 'screenshare') {
// This outboundRtpStat is the statistics for the local user's screen share
}
});
})
피어의 화면 공유 통계
피어 한 명 이상의 화면 공유에 대한 통계가 InboundRtpStats
에 포함됩니다.
1대1 통화에서는 피어가 특정되므로 통계를 구분할 수 있지만, 그룹 통화에서는 ssrc
로 통계를 구분해야 합니다.
그룹 통화에서 각 피어는 PeerInfo
라는 자체 상태 정보를 가지며, 여기에는 비디오 스트림 식별자인 vSsrc
및 화면 공유 식별자인 dSsrc
와 같은 속성이 포함됩니다.
피어의 화면 공유에 대한 통계를 얻으려면 InboundRtpStats
중에서 kind
속성이 video
이고 ssrc
속성이 피어의 dSsrc
값과 일치하는 개체를 구합니다.
다음 예제 코드는 그룹 통화에 대한 샘플 코드입니다.
planetKit.getCurrentStats().then((stats) => {
const inboundRtpStats = stats['inbound-rtp'];
const samplePeerInfo = planetKit.getPeerInfo('testPeerId');
inboundRtpStats.forEach((inboundRtpStat) => {
if (inboundRtpStat.kind === 'video' && inboundRtpStat.ssrc === samplePeerInfo.dSsrc) {
// This inboundRtpStat is the statistics for a peer's screen share
}
});
})
관련 API
미디어 통계와 관련된 API는 다음과 같습니다.