統計情報¶
Sora Android SDK では Sora を利用した WebRTC 接続中に Android クライアントから送信している 音声・映像やデータの状況(ビットレート、RTT、パケットロス等)を統計情報として確認することができます。
用語¶
WebRTC 統計情報¶
WebRTC 統計情報とは https://www.w3.org/TR/webrtc-stats/ に定義されている W3C の標準仕様であり、Sora Android SDK が返す WebRTC 統計情報もこの定義に沿っています。
統計情報取得方法¶
統計情報の取得には getStats を利用します。
注釈
getStats メソッドは Sora Android SDK 2025.4.0 から利用できます。
以下に getStats を使った統計情報取得の実装例を示します。
import android.util.Log
import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import jp.shiguredo.sora.sdk.channel.SoraMediaChannel
import kotlinx.coroutines.launch
import org.webrtc.RTCStatsReport
// SoraMediaChannel インスタンスが mediaChannel 変数に代入されていることを前提とします。
private var mediaChannel: SoraMediaChannel? = null
// WebRTC 統計情報のうち codec 情報をログに書き込む関数です。
suspend fun dumpCodecStats() {
// getStats で WebRTC 統計情報を取得します。
val report: RTCStatsReport = mediaChannel?.getStats() ?: return
// statsMap の型は Map<String, org.webrtc.RTCStats> です。
report.statsMap.forEach { (key, stats) ->
// codec かどうかの判定には RTCStats.type を使います。
if (stats.type == "codec") {
// RTCStats.members の型は Map<String, Object> です。
// members のキーは RTCStats オブジェクトの種類ごとに違います。
// 以下の例では codec の持つメンバーを抽出しています。
val payloadType = stats.members["payloadType"]
val mimeType = stats.members["mimeType"]
val transportId = stats.members["transportId"]
Log.d("Stats", "WebRTC Stats Codec Type: $key, Payload Type: $payloadType, Mime Type: $mimeType, Transport Id: $transportId")
}
}
}
// suspend fun を Fragment から呼び出す例です。
fun Fragment.requestCodecStats() {
// SoraMediaChannel.getStats は suspend のためコルーチンスコープから実行する必要があります。
viewLifecycleOwner.lifecycleScope.launch {
dumpCodecStats()
}
}
上記 getStats のコード例に出てきた内容について以下で解説します。
RTCStatsReport¶
getStats メソッドから取得する統計情報のコンテナです。複数の org.webrtc.RTCStats を保持します。
RTCStatsReport.statsMap¶
用語の説明で RTCStatsReport が 複数の org.webrtc.RTCStats を保持すると説明しましたが、その実態が RTCStatsReport.statsMap: Map<String, org.webrtc.RTCStats> です。
キーの String は RTCStats.id と同一の値です。
RTCStats¶
RTCStats は https://www.w3.org/TR/webrtc-stats/ の定義に沿ったオブジェクトで、 id、timestampUs、type といった基本フィールドを持ちます。詳しくは https://www.w3.org/TR/webrtc-stats/#dom-rtcstats をご確認ください。
RTCStats.type¶
type は RTCStats オブジェクトの種類 (codec、 inbound-rtp など) を表現しており、統計の種類をフィルターする際に使います。例えば現在使用しているコーデックに関する統計情報を取得したい場合は stats.type == "codec" でフィルターします。
RTCStats.members¶
members: Map<String, Object> は統計オブジェクトの辞書です。統計情報の種類ごとに異なるキーを持った辞書が格納されます。
上記実装例のように stats.members["payloadType"] の形でアクセスすることで、仕様書が定める任意の項目を読み出せます。どのようなキーが利用できるかは https://www.w3.org/TR/webrtc-stats/ をご確認ください。