メディア統計
WebPlanetKitは、最近のメディア統計を取得できるAPIを提供します。ここでは、このAPIを使用する方法と各メディアストリームタイプについて、どのようなタイプの情報が提供されるかを説明します。
メディア統計の概要
getCurrentStats()
メソッドを使用してWebRTC統計の中から一部の統計を取得できます。
WebRTC統計について詳しくは、MozillaドキュメントのRTCStatsReportを参照してください。
getCurrentStats()
メソッドは、APIを呼び出した当時の統計を示すWebPlanetKitStatistics
オブジェクトを返却します。WebPlanetKitStatistics
オブジェクトは、OutboundRtpStats
(outbound-rtp
統計)とInboundRtpStats
(inbound-rtp
統計)で構成されます。
outbound-rtp
統計には、ローカルユーザーのオーディオおよびビデオの統計が含まれます。inbound-rtp
統計には、1人以上のピアに対するオーディオおよびビデオの統計が含まれます。
メディア統計の詳細
メディアストリームタイプによって、次のような統計情報が提供されます。
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
には、ローカルユーザーのオーディオ送信に対する1つのオーディオストリーム統計と、ローカルユーザーのビデオ送信に対する1つのビデオストリーム統計が含まれます。ローカルユーザーが画面共有を実行する場合、OutboundRtpStats
にはローカルユーザーの画面共有に対する別のビデオストリーム統計が含まれます。
InboundRtpStats
には、ピアに対する1つのオーディオストリーム統計と、複数のビデオストリーム統計が含まれます。
グループ通話
OutboundRtpStats
には、ローカルユーザーのオーディオ送信に対するオーディオストリーム統計と、3つのビデオストリーム統計(解像度レベル別に1つずつ)が含まれます。ローカルユーザーが画面共有を実行する場合、OutboundRtpStats
にはローカルユーザーの画面共有に対する別のビデオストリーム統計が含まれます。
InboundRtpStats
には、ルームに対する1つのオーディオストリーム統計と各ピアに対する複数のビデオストリーム統計が含まれます。
画面共有統計
画面共有に対する統計は、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
}
});
})
ピアの画面共有統計
ピアが1人以上の画面共有に関する統計が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は、以下のとおりです。