本文にスキップする
Version: 5.3

メディア統計

WebPlanetKitは、最近のメディア統計を取得できるAPIを提供します。ここでは、このAPIを使用する方法と各メディアストリームタイプについて、どのようなタイプの情報が提供されるかを説明します。

メディア統計の概要

getCurrentStats()メソッドを使用してWebRTC統計の中から一部の統計を取得できます。

Tip

WebRTC統計について詳しくは、MozillaドキュメントのRTCStatsReportを参照してください。

getCurrentStats()メソッドは、APIを呼び出した当時の統計を示すWebPlanetKitStatisticsオブジェクトを返却します。WebPlanetKitStatisticsオブジェクトは、OutboundRtpStatsoutbound-rtp統計)とInboundRtpStatsinbound-rtp統計)で構成されます。

  • outbound-rtp統計には、ローカルユーザーのオーディオおよびビデオの統計が含まれます。
  • inbound-rtp統計には、1人以上のピアに対するオーディオおよびビデオの統計が含まれます。

メディア統計の詳細

メディアストリームタイプによって、次のような統計情報が提供されます。

Tip

アウトバウンドのオーディオストリーム

アウトバウンドのオーディオストリーム(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は、以下のとおりです。