WebRTC 統計 API の識別子

W3C 勧告候補草案

この文書の詳細
このバージョン:
https://www.w3.org/TR/2025/CRD-webrtc-stats-20250925/
最新公開バージョン:
https://www.w3.org/TR/webrtc-stats/
最新編集者草案:
https://w3c.github.io/webrtc-stats/
履歴:
https://www.w3.org/standards/history/webrtc-stats/
コミット履歴
テストスイート:
https://github.com/web-platform-tests/wpt/tree/master/webrtc-stats
実装報告:
https://wpt.fyi/webrtc-stats
編集者:
Harald Alvestrand (Google)
Varun Singh (daily.co)
Henrik Boström (Google)
フィードバック:
GitHub w3c/webrtc-stats (プルリクエスト, 新しい課題, 未解決の課題)
public-webrtc@w3.org へ、件名行を [webrtc-stats] … メッセージのトピック … として送信する(アーカイブ
参加
メーリングリスト

概要

この文書は、RTCPeerConnection に関する 統計情報へのアクセスを可能にする一連の WebIDL オブジェクトを定義する。

これらのオブジェクトは、[WEBRTC] で規定される getStats API から返される。

この文書のステータス

この節は、公開時点におけるこの 文書のステータスを説明する。現在の W3C 公開物およびこの技術報告の最新改訂の一覧は、 W3C 標準および草案 索引で確認できる。

前回の勧告候補としての公開以降、stats オブジェクトは、基礎となるデータソースによりよく一致するよう大幅に 再編成された。加えて、networkType プロパティはプライバシー保護のため非推奨となり、 statsended イベントは不要になったため削除された。

この文書は、Web Real-Time Communications Working Group によって、 勧告トラックを用いた 勧告候補草案として公開された。

勧告候補としての公開は、 W3C およびそのメンバーによる支持を意味しない。勧告候補草案は、 ワーキンググループが後続の勧告候補スナップショットに含めることを意図する、 前回の勧告候補からの変更を統合する。

これは草案文書であり、いつでも他の文書によって更新、置換、または廃止される可能性がある。 この文書を作業中のもの以外として引用することは適切ではない。

この文書は、 W3C Patent Policy の下で運営されるグループによって作成された。 W3C は、 そのグループの成果物に関連して行われた特許開示の公開一覧を 維持している。そのページには、 特許を開示するための手順も含まれている。個人が、 その個人が Essential Claim(s) を含むと信じる 特許について実際の知識を有している場合、 W3C Patent Policy の第 6 節に従って その情報を開示しなければならない。

この文書は、 2025年8月18日版 W3C Process Document によって管理される。

1. 序論

この節は非規範的である。

ピア接続を介して送信される音声、動画、またはデータパケットは失われる可能性があり、 さまざまな量のネットワーク遅延を経験することがある。WebRTC を実装する Web アプリケーションは、 基礎となるネットワークおよびメディアパイプラインの性能を監視することを期待する。

この文書は、Web アプリケーションがユーザーエージェントからメトリックを抽出するために使用する 統計識別子を定義する。

2. 適合性

非規範的としてマークされた節と同様に、この仕様におけるすべての作成ガイドライン、図、例、および注は 非規範的である。この仕様のそれ以外のすべては規範的である。

この文書におけるキーワード MAYMUSTMUST NOT、および SHOULD は、 ここに示すようにすべて大文字で現れる場合に限り、 BCP 14 [RFC2119] [RFC8174] で説明されているように解釈される。

この仕様は、単一の製品、すなわち ユーザーエージェントに適用される適合基準を定義する。

ECMAScript を用いてこの仕様で定義されるオブジェクトを実装する実装は、 この文書がその仕様および用語を使用するため、Web IDL 仕様 [WEBIDL] で定義される ECMAScript バインディングと一貫した方法で、それらを実装しなければならない。

この仕様は、適合実装がどのオブジェクトを生成すべきかを定義しない。 この仕様を参照する仕様は、適合性を規定する必要がある。 それらは文書テキストに次のような内容を置くべきである(例のみ):

3. 用語

用語 RTCPeerConnectionRTCDataChannelRTCDtlsTransportRTCDtlsTransportStateRTCIceTransportRTCIceRoleRTCIceTransportStateRTCDataChannelStateRTCIceCandidateTypeRTCStatsRTCCertificate は [WEBRTC] で定義される。

RTCPriorityType は [WEBRTC-PRIORITY] で定義される。

用語 RTP stream は [RFC7656] で定義される。

用語 Synchronization Source(SSRC)、 RTCP Sender Report (SR)、 RTCP Receiver Report (RR)は [RFC3550] で定義される。

用語 RTCP Extended Report(XR)は [RFC3611] で定義される。

audio sample は、 音声トラックの任意のチャンネルにサンプルがあることを指す。複数の音声チャンネルが使用される場合でも、 サンプルに基づくメトリックはより高いレートでは増加せず、複数のチャンネルに同時にサンプルがあることは 1 つのサンプルとして数えられる。

4. 基本概念

stats モデルの基本オブジェクトは stats object である。これを説明するために、 次の用語が定義される:

Monitored object

データ値の集合を保持する内部オブジェクト。ほとんどの monitored object は WebRTC API で 定義されるオブジェクトであり、それらのオブジェクトの内部プロパティであると考えることができる。

Stats object
これは、特定の時点で monitored object からコピーされた値の集合である。 getStats API 呼び出しを通じて WebIDL 辞書として返される。
Stats object reference

monitored object は安定した識別子 id を持ち、これはその monitored object から生成される すべての stats object に反映される。stats object は、この id 値を用いて 他の stats object への参照を含むことができる。stats object において、 これらの参照は、参照先 stats object の id 値を含む DOMString によって表される。

すべての stats object reference は型 DOMString を持ち、メンバー名は Id で終わるか、 または型 sequence<DOMString> を持ち、メンバー名は Ids で終わる。

Stats value
stats object 内の単一の値を指す。

monitored object はその生存期間を通じて、それが含む値を継続的に変更するが、 getStats API 呼び出しを通じて可視になることはない。stats object は、一度返されると決して変更されない。

stats API は [WEBRTC] で定義される。それは stats object のコレクションを返すように定義されており、それぞれは RTCStats 辞書から直接または間接に継承する辞書である。 この API は [WEBRTC] で規範的に定義されているが、 参照しやすいようここに再掲する。

WebIDLdictionary RTCStats {
    required DOMHighResTimeStamp timestamp;
    required RTCStatsType        type;
    required DOMString           id;
};

タイムスタンプは DOMHighResTimeStamp [HIGHRES-TIME] で表現され、情報が収集された時点の Performance.timeOrigin + Performance.now() として 定義される。

4.1 stats オブジェクトの設計に関するガイドライン

新しい stats object を導入する場合、次の原則に従うべきである:

stats 辞書の新しいメンバーは、[API-DESIGN-PRINCIPLES] に従い、 標準的な慣行(camelCase)に従って命名される必要がある。

Id で終わる名前(transportId など)は常に stats object reference である。 Ids で終わる名前は常に型 sequence<DOMString> であり、 それぞれの DOMStringstats object reference である。

stats value の自然な名前が id で終わる場合(たとえば stats value が monitored object のプロトコル内識別子である場合)、推奨される慣行は、 dataChannelIdentifier のように、 名前を identifier で終わらせることである。

stats は Javascript によってサンプリングされる。一般に、アプリケーションは stats がサンプリングされる頻度を 全体的に制御できず、実装は stats の意図された用途を知ることができない。設計上、 アプリケーションが stats の生成方法に影響を与えるための制御面は存在しない。

したがって、実装に「平均」レートを計算させることは良い考えではない。なぜなら、 それは事前に設定できない何らかの平均時間間隔を意味するためである。代わりに、 推奨されるアプローチは、値の測定回数を数え、合計自体が意味を持たない場合でも 与えられた測定値を合計することである。その後、JS アプリケーションは getStats() を 2 回呼び出し、 2 つの合計の差を取り、それを 2 つのカウントの差で割ることにより、任意の望ましい時間間隔にわたる 平均を計算できる。

バイトカウントなど、時間に対して測定される stats については、別個のカウンターは不要である。 代わりに、タイムスタンプの差で割ることができる。

4.2 stats オブジェクトの実装に関するガイドライン

stats object を実装する場合、次のガイドラインに従うべきである:

4.3 monitored object の生存期間に関する考慮事項

オブジェクトの説明は、stats の観点から見た monitored object の生存期間を述べる。monitored object が deleted された場合、それはもはや stats に現れない。これが起こるまでは、それは現れる。これは実装におけるオブジェクトの実際の 生存期間に対応する場合も対応しない場合もある。この仕様にとって重要なのは、stats に現れるものである。

monitored object が RTCPeerConnection の生存期間にわたり 少数のインスタンスでしか存在しない場合、それを「永続的」とみなし、stats で報告されるオブジェクト集合から 決して削除しないことが最も単純である可能性がある。この種のオブジェクトは、 RTCPeerConnection が 利用できなくなるまで可視のままである。また、pc.close() 後の getStats() でも可視である。これは、その仕様で生存期間が言及されていない場合の既定である。

時間の経過とともに多数のインスタンスで存在する可能性があるオブジェクトは、 それらが deleted される時点を定義しておくべきであり、その時点でそれらは以後の getStats() 呼び出しに現れなくなる。オブジェクトが deleted された場合、以後の getStats() 呼び出しには、その削除されたオブジェクトを参照する stats object reference が含まれないことを保証できる。また、 削除されたオブジェクトの stats id は他のオブジェクトに再利用されないことも保証する。 これにより、削除された monitored objectstats object を収集する アプリケーションは、任意の getStats() 呼び出しの結果で指し示されるオブジェクトを常に一意に識別できる。

4.4 getStats() 結果のキャッシュ/スロットリングに関するガイドライン

getStats() の呼び出しは WebRTC の多くのコンポーネントに触れるため、 実行にかなりの時間がかかる可能性がある。実装は性能上の利益のために getStats() 呼び出しのキャッシュまたはスロットリングを利用してもよいし、利用しなくてもよい。ただし、どの実装も 次に従わなければならない:

API 呼び出し、promise の解決、またはイベントの発火の結果として、 RTCPeerConnection の状態が可視に変化した場合、それ以降の新しい getStats() 呼び出しは、影響を受けるオブジェクトについて最新の辞書を返さなければならない。

stats object が deleted された場合、それ以降の getStats() 呼び出しは、その monitored object の stats を MUST NOT 返してはならない。

5. stats オブジェクト型の保守手順

5.1 新しい stats オブジェクトの追加

この文書は、相互運用可能な stats object 型を規定する。新しいオブジェクト型の提案は、 GitHub で保守されている編集者草案で行うことができる。 新しい標準型は、W3C 勧告の将来の改訂に現れる可能性がある。

stats object 内の新しい stats object 型または stats value の必要性が見つかった場合、 Github で課題を提起すべきであり、 レビュープロセスが、その stat を編集者草案に追加すべきかどうかを決定する。

編集者草案への変更に対するプルリクエストは、議論の指針として役立つ可能性があるが、 最終的なマージはレビュープロセスに依存する。

WebRTC WG が存在する間は、それがレビュー主体として機能する。解散した後は、 W3C が適切なレビューを確立する必要がある。

求められるレビューのレベルは、[RFC5226] 第 4.1 節で定義される IETF プロセスの "expert review" のレベルである。必要な文書には、 新しい stats の名前、それらのデータ型、およびそれらが基づく定義が含まれ、相互運用可能な実装を 可能にするレベルで指定される。仕様は、他の文書への参照で構成されてもよい。

(たとえば適合性のために)特定のバージョンを参照したい別の仕様は、 日付付きバージョンを参照すべきである。これらは更新が発生すると定期的に作成される。

6. プライバシー上の懸念を緩和するための手順

WebRTC の Statistics API は、ハードウェア機能やネットワーク特性を含む、 システムに関する情報を公開する。この API によって生じるフィンガープリンティング面を 制限するため、一部のメトリックは、この節のアルゴリズムで許可される場合にのみ 公開される。 (これはフィンガープリンティングベクトルである。)

6.1 ハードウェア機能の公開の制限

受動的フィンガープリンティングを避けるため、ハードウェア機能はキャプチャ中のコンテキストでのみ 公開されるべきである。これは、以下のアルゴリズムを用いてテストされる。

ハードウェア 露出が許可されるかどうかを確認するには、次の手順を実行する:

  1. context capturing state が true である場合、true を返す。

  2. そうでない場合、false を返す。

7. RTCStatsType

RTCStatsTypetype メンバーは、 RTCStats オブジェクトが表すオブジェクトの型を示す。ある type を持つオブジェクトは 1 つの IDL 辞書型しか持てないが、複数の type 値が同じ IDL 辞書型を示すことはできる。たとえば、"local-candidate" と "remote-candidate" はどちらも IDL 辞書型 RTCIceCandidateStats を用いる。

この仕様は、RTCStatsType の許可される値について規範的である。

7.1 RTCStatsType 列挙型

WebIDLenum RTCStatsType {
"codec",
"inbound-rtp",
"outbound-rtp",
"remote-inbound-rtp",
"remote-outbound-rtp",
"media-source",
"media-playout",
"peer-connection",
"data-channel",
"transport",
"candidate-pair",
"local-candidate",
"remote-candidate",
"certificate"
};

次の文字列は、RTCStatsType の有効な値である:

codec

この RTCPeerConnection オブジェクトによって送信または受信される、現在使用中の RTP stream の コーデックに関する統計。これは RTCCodecStats によってアクセスされる。

inbound-rtp

この RTCPeerConnection オブジェクトで現在受信されている、受信方向の RTP stream に関する統計。これは RTCInboundRtpStreamStats によってアクセスされる。

RTX ストリームは個別の RTCInboundRtpStreamStats オブジェクトとしては現れないが、関連する RTCInboundRtpStreamStats オブジェクトの packetsReceivedbytesReceivedretransmittedPacketsReceived および retransmittedBytesReceived カウンターに影響する。

FEC ストリームは個別の RTCInboundRtpStreamStats オブジェクトとしては現れないが、関連する RTCInboundRtpStreamStats オブジェクトの packetsReceivedbytesReceivedfecPacketsReceived および fecBytesReceived カウンターに影響する。

outbound-rtp

この RTCPeerConnection オブジェクトで現在送信されている、送信方向の RTP stream に関する統計。これは RTCOutboundRtpStreamStats によってアクセスされる。

サイマルキャストの使用により、同じ送信者に接続された複数の RTP stream がある場合、RTP stream ごとに 1 つの RTCOutboundRtpStreamStats が存在し、 ssrc メンバーの値は それぞれ異なる。 RTX ストリームは個別の RTCOutboundRtpStreamStats オブジェクトとしては現れないが、関連する RTCOutboundRtpStreamStats オブジェクトの packetsSentbytesSentretransmittedPacketsSent および retransmittedBytesSent カウンターに影響する。

remote-inbound-rtp

この RTCPeerConnection オブジェクトで現在送信されている送信方向ストリームに対応する、リモートエンドポイントの受信方向 RTP stream に関する統計。 これはリモートエンドポイントで測定され、RTCP Receiver Report(RR)または RTCP Extended Report(XR)で報告される。これは RTCRemoteInboundRtpStreamStats によってアクセスされる。

remote-outbound-rtp

この RTCPeerConnection オブジェクトで現在受信されている受信方向ストリームに対応する、リモートエンドポイントの送信方向 RTP stream に関する統計。 これはリモートエンドポイントで測定され、RTCP Sender Report(SR)で報告される。これは RTCRemoteOutboundRtpStreamStats によってアクセスされる。

media-source

RTCRtpSender に現在 添付されている MediaStreamTrack によって生成されるメディアに関する統計。 これはエンコーダーに供給されるメディアを反映する。getUserMedia() 制約が適用された後のもの (すなわち、カメラによって生成された生のメディアではない)である。その kind に応じて、 RTCAudioSourceStats または RTCVideoSourceStats のいずれかである。

media-playout

音声再生に関連する統計。これは RTCAudioPlayoutStats によってアクセスされる。

peer-connection

RTCPeerConnection オブジェクトに関連する統計。これは RTCPeerConnectionStats によってアクセスされる。

data-channel

RTCDataChannel id に 関連する統計。これは RTCDataChannelStats によってアクセスされる。

transport

RTCPeerConnection オブジェクトに関連するトランスポート統計。これは RTCTransportStats によってアクセスされる。

candidate-pair

RTCIceTransport オブジェクトに関連する ICE 候補ペア統計。これは RTCIceCandidatePairStats によってアクセスされる。

トランスポートの現在のペアではない候補ペアは、 RTCIceTransport が ICE restart を行い、状態が "new" に変化した時点で deleted される。トランスポートの現在のペアである候補ペアは、ICE restart 後に、RTCIceTransport が新しい候補から生成された候補ペアの使用に切り替えたときに deleted される。 この時点は、他の外部から観測可能なイベントには対応しない。

local-candidate

RTCIceTransport オブジェクトに関連する ICE ローカル候補統計。 これはローカル候補についての RTCIceCandidateStats によってアクセスされる。

ローカル候補は、RTCIceTransport が ICE restart を行い、その候補が削除されていない候補ペアのメンバーではなくなったときに deleted される。

remote-candidate

RTCIceTransport オブジェクトに関連する ICE リモート候補統計。 これはリモート候補についての RTCIceCandidateStats によってアクセスされる。

リモート候補は、RTCIceTransport が ICE restart を行い、その候補が削除されていない候補ペアのメンバーではなくなったときに deleted される。

certificate

RTCIceTransport によって 使用される証明書に関する情報。これは RTCCertificateStats によってアクセスされる。

8. Stats 辞書

8.1 RTP 統計階層

RTP 統計用の辞書は階層として構造化されているため、多くの異なるコンテキストで意味を持つ stats は IDL 内で一度だけ表現される。

ここで公開されるメトリックは、ローカル測定値および RTCP パケットによって報告されるものに対応する。 複合 RTCP パケットは、Sender Report(SR)や Receiver Report(RR)など、複数の RTCP report block を含む一方で、 非複合 RTCP パケットは単一の RTCP SR または RR block だけを含むことがある。

すべての RTP monitored object の生存期間は SSRC に結び付けられる。 RTCOutboundRtpStreamStats は、 ローカルまたはリモートの SDP answer を設定することによって RTP sender が構成されたとき (setLocalDescription() または setRemoteDescription() を介し、signaling state が "stable" に戻ったとき)に作成される。RTCInboundRtpStreamStats は、 この SSRC に対する最初の RTP パケットが受信されたときに作成され、リモート RTP stream stats オブジェクト(RTCRemoteInboundRtpStreamStats および RTCRemoteOutboundRtpStreamStats) は、対応する RTCP パケットが最初に受信されたときに作成される。

RTP monitored object は、対応する RTP sender または RTP receiver が、対応する RTP stream を削除するように再構成されたときに削除される。 これは、ssrc が変更されたとき、simulcast layer が削除されたとき、または RTCRtpTransceivercurrentDirection"stopped" になったときに、古い SSRC に対して発生する。 transceiver が "inactive" にされた場合、または encoding の active パラメーターが false に設定された場合、monitored object は削除されない。 削除イベントが発生した後に SSRC が再利用された場合、これは新しい RTP monitored object と見なされ、 新しい RTP stream stats はリセットされたカウンターと新しい ID を持つ。

特定の RTP stats object について、その合計カウンターは常に増加しなければならない。 しかし、SSRC の変更、simulcast layer の削除、または transceiver の停止により、 RTP stats object は削除されたり、新しい RTP stats object に置き換えられたりすることがある。 呼び出し元は、複数の RTP stats object にわたってパケットカウンターを集計する際に、 このことを認識しておく必要がある(削除により集計値が減少する可能性がある)。

RTCRtpSender が simulcast の 2 つのレイヤー(SSRC=111 と
SSRC=222)を送信している。2 つの "outbound-rtp" stats object が観測され、
一方は SSRC=111、もう一方は SSRC=222 を持つ。両方のオブジェクトの
パケットカウンターは増加している。

1 つのレイヤーが RTCRtpSender.setParameters() を使用して非アクティブ化される。
これはレイヤーの 1 つを一時停止する(そのパケットカウンターは停止する)が、
RTP monitored object は削除されない。RTCRtpTransceiver が
"inactive" としてネゴシエートされても、RTP monitored object はまだ削除されない。
RTCRtpTransceiver が再び "sendonly" になると、同じ
"outbound-rtp" オブジェクトが引き続き使用される。

その後、RTCRtpTransceiver.stop() が呼び出される。"outbound-rtp" オブジェクトは
まだ存在するが、それらのパケットカウンターは停止している。再ネゴシエーションが
発生し、transceiver.currentDirection が "stopped" になると、
両方の "outbound-rtp" オブジェクトは削除される。

階層は次のとおりである:

RTCRtpStreamStats: 任意の RTP stream の任意の端に適用される stats

8.2 RTCRtpStreamStats 辞書

WebIDLdictionary RTCRtpStreamStats : RTCStats {
             required unsigned long       ssrc;
             required DOMString           kind;
             DOMString           transportId;
             DOMString           codecId;
};

辞書 RTCRtpStreamStats メンバー

ssrc、 型 unsigned long

synchronization source(SSRC)識別子は、[RFC3550] に従う unsigned integer 値であり、この stats object が記述している RTP パケットの stream を識別するために使用される。

outbound および inbound local について、SSRC はそれぞれそれらの endpoint によって 送信および受信された RTP stream の stats を記述する。 remote inbound および remote outbound について、SSRC はリモート endpoint によって受信され、 リモート endpoint に送信された RTP stream の stats を記述する。

kind、 型 DOMString

"audio" または "video" のいずれかである。 これは、関連する MediaStreamTrackkind 属性と一致しなければMUSTならない。

transportId 、型 DOMString

これは、この RTP stream に関連付けられた RTCTransportStats を生成するために 検査されたオブジェクトに関連付けられる一意な識別子である。

codecId、 型 DOMString

これは、この RTP stream に関連付けられた RTCCodecStats を生成するために検査されたオブジェクトに関連付けられる一意な識別子である。

8.3 RTCCodecStats 辞書

コーデックは RTP transport に登録されたときに作成されるが、 使用中のコーデック(RTP stream によって参照されているもの)のサブセットだけが getStats() で公開される。

RTCCodecStats オブジェクトは、1 つ以上の codecId が codec を参照するときに作成される。 RTCCodecStats への参照がもはや存在しない場合、 stats object は削除される。同じコーデックが将来再び使用される場合、 RTCCodecStats オブジェクトは、以前と同じ id で 復活する。

Codec オブジェクトは、同じ transport を使用する media section 内の複数の RTP stream から参照されることがあるが、 異なる transport 内の類似した codec は異なる RTCCodecStats オブジェクトを持つ。

ユーザーエージェントは、sdpFmtpLine が方向ごとに異なる場合を除き、 情報を transport ごと、payload type ごとに単一の "codec" エントリーへ集約することが期待される。 その場合は、2 つのエントリー(encode 用と decode 用)が必要である。

WebIDLdictionary RTCCodecStats : RTCStats {
             required unsigned long payloadType;
             required DOMString     transportId;
             required DOMString     mimeType;
             unsigned long clockRate;
             unsigned long channels;
             DOMString     sdpFmtpLine;
};

辞書 RTCCodecStats メンバー

payloadType、型 unsigned long

RTP encoding または decoding で使用される payload type。

transportId 、型 DOMString

この codec が使用されている transport の一意な識別子であり、 対応する RTCTransportStats オブジェクトを検索するために使用できる。

mimeType、 型 DOMString

IANA media types registry [IANA-MEDIA-TYPES] で定義される codec MIME media type/subtype。 例: video/VP8。

clockRate、型 unsigned long

メディアサンプリングレートを表す。

channels、型 unsigned long

存在する場合、チャンネル数(mono=1、stereo=2)を示す。

sdpFmtpLine 、型 DOMString

対応する codec に対応する SDP の a=fmtp 行からの "format specific parameters" フィールド。 もしそれが exist する場合、 [RFC8829](第 5.8 節)で 定義されるとおりである。

8.4 RTCReceivedRtpStreamStats 辞書

WebIDLdictionary RTCReceivedRtpStreamStats : RTCRtpStreamStats {
             unsigned long long   packetsReceived;
             unsigned long long   packetsReceivedWithEct1;
             unsigned long long   packetsReceivedWithCe;
             unsigned long long   packetsReportedAsLost;
             unsigned long long   packetsReportedAsLostButRecovered;
             long long            packetsLost;
             double               jitter;
};

辞書 RTCReceivedRtpStreamStats メンバー

packetsReceived、型 unsigned long long

この SSRC について受信された RTP パケットの総数。 これには再送が含まれる。 受信 endpoint では、これは [RFC3550] 第 6.4.1 節で定義されるように計算される。送信 endpoint では、packetsReceived は、RTCP Receiver Report で報告される Extended Highest Sequence Number Received から Cumulative Number of Packets Lost を差し引き、さらに この SSRC に送信された RTCP Sender Report における initial Extended Sequence Number を差し引き、1 を加えることで推定される。 これは [RFC3550] の Appendix A.3 で説明されていることを、sender 側に合わせて反映するためである。 RTCP Receiver Report が まだ受信されていない場合、0 を返す。

packetsReceivedWithEct1、型 unsigned long long

この SSRC について受信された、 "ECT(1)" marking 付き RTP パケットの総数。

packetsReceivedWithCe、型 unsigned long long

この SSRC について受信された、 "CE" marking 付き RTP パケットの総数。

packetsReportedAsLost、型 unsigned long long

[RFC8888] 第 3.1 節の report が、ゼロの R bit を伴って送信された RTP パケットの総数。 "ccfb" feedback mechanism のサポートがネゴシエートされている場合にのみ exist する。

packetsReportedAsLostButRecovered、型 unsigned long long

[RFC8888] 第 3.1 節の report が、ゼロの R bit を伴って送信されたが、 同じパケットに対する後続の report では R bit が 1 に設定されていた RTP パケットの総数。 "ccfb" feedback mechanism のサポートがネゴシエートされている場合にのみ exist する。

packetsLost、型 long long

この SSRC について失われた RTP パケットの総数。 [RFC3550] 第 6.4.1 節で定義されるように計算される。 これは推定方法のため、送信された数より多くのパケットが受信された場合には 負になる可能性があることに注意。

jitter、型 double

この SSRC について秒単位で測定される Packet Jitter。 [RFC3550] の第 6.4.1 節で定義されるように計算される。

RTCInboundRtpStreamStats 辞書は、受信 RTP メディアストリームの 測定メトリックを表す。統計オブジェクトで報告されるタイムスタンプは、 データがサンプリングされた時刻である。

WebIDLdictionary RTCInboundRtpStreamStats : RTCReceivedRtpStreamStats {
             required DOMString   trackIdentifier;
             DOMString            mid;
             DOMString            remoteId;
             unsigned long        framesDecoded;
             unsigned long        keyFramesDecoded;
             unsigned long        framesRendered;
             unsigned long        framesDropped;
             unsigned long        frameWidth;
             unsigned long        frameHeight;
             double               framesPerSecond;
             unsigned long long   qpSum;
             double               totalDecodeTime;
             double               totalInterFrameDelay;
             double               totalSquaredInterFrameDelay;
             unsigned long        pauseCount;
             double               totalPausesDuration;
             unsigned long        freezeCount;
             double               totalFreezesDuration;
             DOMHighResTimeStamp  lastPacketReceivedTimestamp;
             unsigned long long   headerBytesReceived;
             unsigned long long   packetsDiscarded;
             unsigned long long   fecBytesReceived;
             unsigned long long   fecPacketsReceived;
             unsigned long long   fecPacketsDiscarded;
             unsigned long long   bytesReceived;
             unsigned long        nackCount;
             unsigned long        firCount;
             unsigned long        pliCount;
             double               totalProcessingDelay;
             DOMHighResTimeStamp  estimatedPlayoutTimestamp;
             double               jitterBufferDelay;
             double               jitterBufferTargetDelay;
             unsigned long long   jitterBufferEmittedCount;
             double               jitterBufferMinimumDelay;
             unsigned long long   totalSamplesReceived;
             unsigned long long   concealedSamples;
             unsigned long long   silentConcealedSamples;
             unsigned long long   concealmentEvents;
             unsigned long long   insertedSamplesForDeceleration;
             unsigned long long   removedSamplesForAcceleration;
             double               audioLevel;
             double               totalAudioEnergy;
             double               totalSamplesDuration;
             unsigned long        framesReceived;
             DOMString            decoderImplementation;
             DOMString            playoutId;
             boolean              powerEfficientDecoder;
             unsigned long        framesAssembledFromMultiplePackets;
             double               totalAssemblyTime;
             unsigned long long   retransmittedPacketsReceived;
             unsigned long long   retransmittedBytesReceived;
             unsigned long        rtxSsrc;
             unsigned long        fecSsrc;
             double               totalCorruptionProbability;
             double               totalSquaredCorruptionProbability;
             unsigned long long   corruptionMeasurements;
            };

辞書 RTCInboundRtpStreamStats メンバー

trackIdentifier、型 DOMString

MediaStreamTrackid 属性の値。

mid、型 DOMString

この stream を所有する RTCRtpTransceivernull ではない mid 値を持つ場合、これはその値である。そうでない場合、このメンバーは 存在してはMUST NOTならない。

remoteId、型 DOMString

remoteId は、 同じ SSRC についてリモートの RTCRemoteOutboundRtpStreamStats オブジェクトを検索するために使用される。

framesDecoded

audio については exist してはMUST NOTならない。 これは、この RTP stream について正しくデコードされた フレームの総数、すなわちフレームがドロップされなければ表示されるはずのフレームを表す。

keyFramesDecoded、型 unsigned long

audio については exist してはMUST NOTならない。 この RTP media stream について正常にデコードされた、 VP8 [RFC6386] の key frame や H.264 [RFC6184] の IDR-frame などの key frame の総数を表す。これは framesDecoded のサブセットである。 framesDecoded - keyFramesDecoded により、 デコードされた delta frame の数が得られる。

framesRendered

audio については exist してはMUST NOTならない。 レンダリングされたフレームの総数を表す。 フレームがレンダリングされた直後に増加する。

framesDropped、型 unsigned long

audio については exist してはMUST NOTならない。 この receiver の track について、デコード前にドロップされた、または フレームが表示期限に間に合わなかったためにドロップされたフレームの総数。 測定は receiver が作成された時点で開始され、[RFC7004] Appendix A (g) で定義される累積メトリックである。

frameWidth、型 unsigned long

audio については exist してはMUST NOTならない。 最後にデコードされたフレームの幅を表す。最初の フレームがデコードされる前、このメンバーは exist してはMUST NOTならない。

frameHeight、型 unsigned long

audio については exist してはMUST NOTならない。 最後にデコードされたフレームの高さを表す。最初の フレームがデコードされる前、このメンバーは exist してはMUST NOTならない。

framesPerSecond、型 double

audio については exist してはMUST NOTならない。 直近 1 秒間にデコードされたフレーム数。

qpSum、型 unsigned long long

audio については exist してはMUST NOTならない。 この receiver によってデコードされたフレームの QP 値の合計。 フレーム数は framesDecoded にある。

QP 値の定義は codec に依存する。VP8 では、QP 値は frame header 内で syntax element y_ac_qi として運ばれる値であり、 [RFC6386] 第 19.2 節で定義される。 その範囲は 0..127 である。

QP 値は、使用された quantizer 値の指標にすぎないことに注意。 多くの形式には、フレーム内で quantizer 値を変化させる方法がある。

totalDecodeTime、型 double

audio については exist してはMUST NOTならない。 この stream の framesDecoded フレームのデコードに費やされた秒数の総数。 平均デコード時間は、この値を framesDecoded で 割ることで計算できる。1 フレームをデコードするのにかかる時間は、 decoder にフレームを供給してから、そのフレームについて decoder がデコード済み データを返すまでに経過した時間である。

totalInterFrameDelay、型 double

audio については exist してはMUST NOTならない。 連続してレンダリングされたフレーム間の interframe delay の秒単位の合計であり、 フレームがレンダリングされた直後に記録される。interframe delay variance は totalInterFrameDelaytotalSquaredInterFrameDelay、 および framesRendered から、次の式に従って計算できる: (totalSquaredInterFrameDelay - totalInterFrameDelay^2/ framesRendered)/framesRendered.

totalSquaredInterFrameDelay、型 double

audio については exist してはMUST NOTならない。 連続してレンダリングされたフレーム間の二乗された interframe delay の秒単位の合計であり、 フレームがレンダリングされた直後に記録される。interframe delay variance の計算方法の詳細については、 totalInterFrameDelay を参照。

pauseCount、型 unsigned long

audio については exist してはMUST NOTならない。 この receiver が経験した video pause の総数を数える。 最後にレンダリングされたフレームから経過した時間が 5 秒を超える場合、 video は一時停止していると見なされる。pauseCount は、そのような一時停止の後にフレームがレンダリングされたときに増加する。

totalPausesDuration、型 double

audio については exist してはMUST NOTならない。 pause の総継続時間(pause の定義については pauseCount を参照)を 秒単位で表す。この値はフレームがレンダリングされたときに更新される。

freezeCount、型 unsigned long

audio については exist してはMUST NOTならない。 この receiver が経験した video freeze の総数を数える。 frame duration、すなわち連続してレンダリングされた 2 つのフレーム間の時間間隔が、 Max(3 * avg_frame_duration_ms, avg_frame_duration_ms + 150) 以上である場合、 freeze である。ここで avg_frame_duration_ms は、最後にレンダリングされた 30 フレームの duration の線形平均である。

totalFreezesDuration、型 double

audio については exist してはMUST NOTならない。 frozen と見なされるレンダリング済みフレームの総継続時間(freeze の定義については freezeCount を参照)を 秒単位で表す。この値は フレームがレンダリングされたときに更新される。

lastPacketReceivedTimestamp、型 DOMHighResTimeStamp

この SSRC について最後のパケットが受信された時刻のタイムスタンプを表す。 これは、ローカル endpoint によって統計が生成された時刻を表す timestamp とは異なる。

headerBytesReceived、型 unsigned long long

この SSRC について受信された RTP header および padding byte の総数。 これには再送が含まれる。 これは IP や UDP などの transport layer header のサイズを含まない。 headerBytesReceived + bytesReceived は、 transport 上で payload として受信された byte 数と等しい。

packetsDiscarded、型 unsigned long long

late または early-arrival により jitter buffer によって破棄された RTP パケットの累積数。 すなわち、これらのパケットは再生されない。packet duplication により破棄された RTP パケットは、 このメトリックでは報告されない [XRBLOCK-STATS]。 [RFC7002] 第 3.2 節および Appendix A.a で定義されるように計算される。

fecBytesReceived、型 unsigned long long

この SSRC について受信された RTP FEC byte の総数であり、 payload byte のみを含む。 これは bytesReceived のサブセットである。 別の ssrc を使用する FEC mechanism がネゴシエートされた場合、FEC パケットは 別個の SSRC 上で送信されるが、それでもここで計上される。

fecPacketsReceived、型 unsigned long long

この SSRC について受信された RTP FEC パケットの総数。別の ssrc を使用する FEC mechanism がネゴシエートされた場合、FEC パケットは 別個の SSRC 上で送信されるが、それでもここで計上される。 このカウンターは、media packet と同一帯域で FEC パケットを受信する場合にも 増加することがある (例: Opus の場合)。

fecPacketsDiscarded、型 unsigned long long

この SSRC について受信された RTP FEC パケットの総数のうち、 error correction payload がアプリケーションによって破棄されたもの。 これは、1. FEC パケットによって保護されたすべての source packet が受信済みまたは 別個の FEC パケットによってすでに回復済みである場合、または 2. FEC パケットが遅れて到着した、 すなわち recovery window の外であり、失われた RTP パケットがすでに playout 中にスキップされている場合に発生する可能性がある。 これは fecPacketsReceived のサブセットである。

bytesReceived、型 unsigned long long

この SSRC について受信された byte の総数。 これには再送が含まれる。 [RFC3550] 第 6.4.1 節で定義されるように計算される。

firCount、型 unsigned long

audio については exist してはMUST NOTならない。 この receiver によって送信された Full Intra Request (FIR) パケットの総数を数える。 これは [RFC5104] 第 4.3.1 節で定義される。 [RFC2032] で示され、 [RFC4587] によって 非推奨とされた RTCP FIR は数えない。

pliCount、型 unsigned long

audio については exist してはMUST NOTならない。 この receiver によって送信された Picture Loss Indication (PLI) パケットの総数を数える。これは [RFC4585] 第 6.3.1 節で定義される。

totalProcessingDelay、型 double

これは、各 audio sample または video frame について、 最初の RTP パケットが受信された時刻(reception timestamp)から、対応する sample または frame が デコードされた時刻(decoded timestamp)までにかかった時間の秒単位の合計である。 この時点で、audio sample または video frame は MediaStreamTrack による playout の準備ができている。 通常ここで playout の準備ができているとは、audio sample または video frame が decoder によって完全にデコードされた後を意味する。

関連する複雑さを考慮し、arrival time または reception timestamp は 可能な限り network layer に近いところで測定され、decoded timestamp は 完全な sample または frame がデコードされ次第測定される。

audio の場合、複数の sample が同じ RTP パケットで受信されるため、すべての sample は 同じ reception timestamp と異なる decoded timestamp を共有する。 video の場合、frame は複数の RTP パケットにわたって受信される。この場合、 frame を含む最も早い timestamp が reception timestamp として数えられ、 decoded timestamp は完全な frame がデコードされた時点に対応する。

このメトリックは、デコードされないフレーム、 すなわち framesDropped については増加しない。 平均 processing delay は、totalProcessingDelay を、video については framesDecoded (または audio については provisional stats spec の totalSamplesDecoded)で 割ることで計算できる。

nackCount、型 unsigned long

この receiver によって送信された Negative ACKnowledgement (NACK) パケットの総数を数える。 これは [RFC4585] 第 6.2.1 節で定義される。

estimatedPlayoutTimestamp、型 DOMHighResTimeStamp

これは、この receiver の track の推定 playout time である。playout time は、 既知の timestamp(RTP timestamp を NTP timestamp に対応付ける RTCP SR パケットから得られる)を持つ、 最後に再生可能な audio sample または video frame の NTP timestamp であり、 再生可能になってから経過した時間で外挿される。これは sender の NTP clock time における track の "current time" であり、 現在再生中の audio がなくても存在できる。

これは、同じ source からの 2 つの track について、audio と video がどれだけ同期していないかを 推定するのに有用である。audioInboundRtpStats.estimatedPlayoutTimestamp - videoInboundRtpStats.estimatedPlayoutTimestamp.

jitterBufferDelay、型 double

jitter buffer の目的は、(video の場合)RTP パケットを frame に再結合し、 滑らかな playout を行うことである。ここで説明するモデルは、sample または frame が まだ圧縮されており、まだデコードされていないことを前提とする。 これは、各 audio sample または video frame について、 最初のパケットが jitter buffer に受信された時刻(ingest timestamp)から jitter buffer を出る時刻(emit timestamp)までにかかる時間の秒単位の合計である。 audio の場合、複数の sample が同じ RTP パケットに属するため、それらは同じ ingest timestamp を持つが、異なる jitter buffer emit timestamp を持つ。 video の場合、frame は複数の RTP パケットにわたって受信されることがあるため、 ingest timestamp は jitter buffer に入ったその frame の最も早いパケットであり、 emit timestamp は frame 全体が jitter buffer を出る時刻である。 このメトリックは、sample または frame が buffer 内での時間を完了して外に出たときに増加する(そして jitterBufferEmittedCount を増加させる)。 平均 jitter buffer delay は、jitterBufferDelayjitterBufferEmittedCount で割ることで計算できる。

jitterBufferTargetDelay、型 double

この値は、jitter buffer から sample が emit されるたびに、 target jitter buffer delay だけ増加する。追加される target は、 その sample が jitter buffer から emit された時点の、 秒単位の target delay である。平均 target delay を得るには、 jitterBufferEmittedCount で割る。

jitterBufferEmittedCount、型 unsigned long long

jitter buffer から出た audio sample または video frame の総数 (jitterBufferDelay を増加させる)。

jitterBufferMinimumDelay、型 double

jitter buffer delay がより高い値へ増加する理由はさまざまであり、たとえば AV synchronization を達成するため、または jitterBufferTarget が RTCRtpReceiver に設定されたためである。これらの mechanism の 1 つを使用する場合、 達成できたはずの最小 jitter buffer delay を追跡しておくことが有用な場合があり、 それにより WebRTC client は追加されている delay の量を追跡できる。

このメトリックは jitterBufferTargetDelay と同じように機能するが、 jitter buffer target delay を増加させる外部 mechanism、たとえば jitterBufferTarget(上記リンクを参照)、 AV sync、またはその他の mechanism の影響を受けない。このメトリックは jitter や packet loss などの network characteristics のみに基づき、 外部要因が影響しなければ得られる最小 jitter buffer delay と見なすことができる。 このメトリックは、jitterBufferEmittedCount が更新されるたびに更新される。

totalSamplesReceived、型 unsigned long long

video については MUST NOT exist である。この RTP stream 上で 受信された sample の総数。これには concealedSamples が含まれる。

concealedSamples、型 unsigned long long

video については MUST NOT exist である。concealed sample である sample の総数。concealed sample とは、 再生される前に、ローカルで生成された合成 sample に置き換えられた sample である。 conceal されなければならない sample の例としては、失われた packet からの sample (packetsLost で報告される)や、 再生には遅すぎて到着した packet からの sample (packetsDiscarded で報告される)がある。

silentConcealedSamples、型 unsigned long long

video については MUST NOT exist である。挿入された concealed sample のうち、"silent" であるものの総数。 silent sample を再生すると、無音または comfort noise になる。これは concealedSamples のサブセットである。

concealmentEvents、型 unsigned long long

video については MUST NOT exist である。 concealment event の数。このカウンターは、 concealed sample が non-concealed sample の後に合成されるたびに増加する。つまり、 複数の連続した concealed sample は concealedSamples count を複数回増加させるが、単一の concealment event である。

insertedSamplesForDeceleration、型 unsigned long long

video については MUST NOT exist である。playout が 遅くされた場合、このカウンターは、 受信された sample の数と再生された sample の数との差分だけ増加する。 sample を挿入することによって playout が遅くされる場合、これは挿入された sample の数になる。

removedSamplesForAcceleration、型 unsigned long long

video については MUST NOT exist である。playout が 速くされた場合、このカウンターは、 受信された sample の数と再生された sample の数との差分だけ増加する。 sample を削除することによって speedup が達成される場合、これは削除された sample の数になる。

audioLevel、型 double

video については MUST NOT exist である。受信 track の audio level を表す。ローカルに添付された track の audio level については、代わりに RTCAudioSourceStats を参照。

値は 0..1(linear)の範囲であり、1.0 は 0 dBov、0 は silence、0.5 は 0 dBov からの sound pressure level のおよそ 6 dBSPL の変化を表す。

audioLevel は、totalAudioEnergy の下で説明されるアルゴリズムを使用して、ある小さな interval にわたって平均される。 使用される interval は implementation-defined である。

totalAudioEnergy、型 double

video については MUST NOT exist である。受信 track の audio energy を表す。ローカルに添付された track の audio energy については、代わりに RTCAudioSourceStats を参照。

この値は次のように計算されなければMUSTならない: 受信された(したがって audio sampletotalSamplesReceived によって数えられる)各 sample について、 sample の値を最高強度の encode 可能値で割り、二乗し、その後 sample の duration(秒)を掛けたものを加算する。言い換えると、 duration * Math.pow(energy/maxEnergy, 2) である。

これは、[RFC6464] で定義される audioLevel と 同じ単位を使用する root mean square(RMS)値を得るために使用できる。 これは式 Math.sqrt(totalAudioEnergy/totalSamplesDuration) を使用して それらの単位に変換できる。この計算は、任意の望ましい時間間隔にわたる 平均 audio level を計算するために、2 つの異なる getStats() 呼び出しの値の差分を使用して実行することもできる。言い換えると、 Math.sqrt((energy2 - energy1)/(duration2 - duration1)) とする。

たとえば、10ms の audio packet が 0.5(1.0 のうち)の RMS で生成された場合、 これは totalAudioEnergy0.5 * 0.5 * 0.01 = 0.0025 を加えるべきである。 RMS が 0.1 の別の 10ms packet が 受信された場合、これは同様に totalAudioEnergy0.0001 を加えるべきである。 すると、 Math.sqrt(totalAudioEnergy/totalSamplesDuration)Math.sqrt(0.0026/0.02) = 0.36 となり、これは連続した 20ms の audio segment に対して RMS 計算を行うことで得られる値と同じである。

複数の audio channel が使用される場合、 sample の audio energy は任意の channel の最高 energyを指す。

totalSamplesDuration、型 double

video については MUST NOT exist である。受信 track の audio duration を表す。ローカルに添付された track の audio duration については、代わりに RTCAudioSourceStats を参照。

受信された(したがって totalSamplesReceived によって数えられる)すべての sample の合計 duration を秒単位で表す。 totalAudioEnergy とともに使用して、異なる interval にわたる平均 audio level を計算できる。

framesReceived、型 unsigned long

audio については MUST NOT exist である。この RTP stream 上で受信された完全な frame の総数を表す。 このメトリックは、完全な frame が受信されたときに増加する。

decoderImplementation、型 DOMString

exist してはならない。ただし、exposing hardware is allowed である場合を除く。 (これはフィンガープリンティングベクトルである。)

audio については MUST NOT exist である。使用されている decoder implementation を識別する。 これは相互運用性の問題を診断するのに有用である。

playoutId 、型 DOMString

video については MUST NOT exist である。 audio playout が発生している場合、これは対応する RTCAudioPlayoutStats を検索するために使用される。

powerEfficientDecoder、型 boolean

exist してはならない。ただし、exposing hardware is allowed である場合を除く。 (これはフィンガープリンティングベクトルである。)

audio については MUST NOT exist である。 現在使用されている decoder が、user agent によって power efficient と見なされるかどうか。 これは構成が hardware acceleration につながるかどうかを反映すべきSHOULDであるが、 user agent は、その構成が power efficient と見なされるかどうかを判断する際に、 他の情報を考慮してもMAYよい。

framesAssembledFromMultiplePackets、型 unsigned long

audio については MUST NOT exist である。 これは、この RTP stream について正しくデコードされた、複数の RTP packet から構成される frame の総数を表す。そのような frame については、 totalAssemblyTime が増加する。平均 frame assembly time は、 totalAssemblyTimeframesAssembledFromMultiplePackets で 割ることで計算できる。

totalAssemblyTime、型 double

audio については MUST NOT exist である。 各 video frame について、最初の RTP packet が受信された時刻 (reception timestamp)から、その frame の最後の RTP packet が受信された時刻までに かかる時間の秒単位の合計である。複数の RTP packet から構成される frame についてのみ増加する。

関連する複雑さを考慮し、arrival time または reception timestamp は 可能な限り network layer に近いところで測定される。このメトリックは、 デコードされない frame、すなわち framesDropped や、その他の理由でデコードに失敗した frame (もしあれば)については増加しない。複数の RTP packet から構成される frame についてのみ増加する。

retransmittedPacketsReceived、型 unsigned long long

この SSRC について受信された再送 packet の総数。 これは packetsReceived の サブセットである。RTX がネゴシエートされていない場合、 再送 packet は識別できず、このメンバーは MUST NOT exist である。

retransmittedBytesReceived、型 unsigned long long

この SSRC について受信された 再送 byte の総数であり、payload byte のみを含む。 これは bytesReceived のサブセットである。 RTX がネゴシエートされていない場合、再送 packet は識別できず、 このメンバーは MUST NOT exist である。

rtxSsrc 、型 unsigned long

別個の RTP stream 上での再送について RTX がネゴシエートされている場合、 これはこの stream の ssrc と関連付けられた RTX stream の SSRC である。 RTX がネゴシエートされていない場合、この値は MUST NOT present である。

fecSsrc 、型 unsigned long

別個の RTP stream を使用する FEC mechanism がネゴシエートされている場合、これはこの stream の ssrc と関連付けられた FEC stream の SSRC である。 FEC がネゴシエートされていない、または同じ RTP stream を使用する場合、この値は MUST NOT present である。

totalCorruptionProbability、型 double

audio については MUST NOT exist である。この SSRC について 行われたすべての corruption probability measurement の累積合計を表す。この属性がいつ SHOULD present であるかについては、 corruptionMeasurements を参照。

totalCorruptionProbability に加算される各 measurement は [0.0, 1.0] の範囲でなければMUSTならない。 ここで値 0.0 は、システムが処理済み frame に corruption が存在しない、または無視できる程度であると 推定したことを示す。同様に値 1.0 は、処理済み frame に corruption がほぼ確実に 見えることを示す。その中間の値は、何らかの corruption が見える可能性が高いが、 たとえば magnitude が低い、または frame の小さな部分にのみ存在する可能性があることを示す。

corruption likelihood の値は推定であり、保証ではない。推定が 0.0 であっても、たとえば frame の非常に小さな領域だけが影響を受けている場合には corruption が存在する可能性がある(すなわち false negative である)。同様に、推定が 1.0 であっても、 たとえば frame average よりはるかに高い QP を持つ macroblock がある場合には corruption が存在しない可能性がある(すなわち false positive である)。 PSNR measurement などに edge case があるのと同様に、これらのメトリックは per-frame basis で絶対的な真実として使用するよりも、主として 統計分析の基礎として使用されるべきである。

totalSquaredCorruptionProbability、型 double

audio については MUST NOT exist である。この SSRC について 行われたすべての corruption probability measurement の二乗の累積合計を表す。この属性がいつ SHOULD present であるかについては、 corruptionMeasurements を参照。

corruptionMeasurements、型 unsigned long long

audio については MUST NOT exist である。user agent が corruption probability measurement を行うことができる場合、このカウンターはそのような measurement ごとに増加し、 totalCorruptionProbability および totalSquaredCorruptionProbability は、それぞれこの measurement および measurement の二乗で集計される。 corruption-detection header extension が RTP packet に存在する場合、corruption probability measurement は MUST present である。

http://www.webrtc.org/experiments/rtp-hdrext/corruption-detection に記載されている corruption-detection header extension は実験的なものである。 IETF 標準が確立されると、identifier および format は変更される可能性がある。

RTCRemoteInboundRtpStreamStats 辞書は、特定の受信 RTP stream(送信 endpoint における送信 RTP stream に対応する)についての、リモート endpoint の 測定メトリックを表す。統計オブジェクトで報告される timestamp は、 対応する RTCP RR が受信された時刻である。

WebIDLdictionary RTCRemoteInboundRtpStreamStats : RTCReceivedRtpStreamStats {
             DOMString            localId;
             double               roundTripTime;
             double               totalRoundTripTime;
             double               fractionLost;
             unsigned long long   roundTripTimeMeasurements;
             unsigned long long   packetsWithBleachedEct1Marking;
};

辞書 RTCRemoteInboundRtpStreamStats メンバー

localId、型 DOMString

localId は、同じ SSRC についてローカルの RTCOutboundRtpStreamStats オブジェクトを検索するために使用される。

roundTripTime 、型 double

RTCP Receiver Report (RR) 内の RTCP timestamp に基づく、この SSRC についての推定 round trip time であり、 秒単位で測定される。[RFC3550] 第 6.4.1 節で定義されるように計算される。 0 以外の DLSR 値を持つ RTCP Receiver Report が 受信されるまでは、MUST NOT exist である。

totalRoundTripTime、型 double

セッションの開始以降に行われたすべての round trip time 測定値の秒単位の 累積合計を表す。個々の round trip time は RTCP Receiver Report (RR) [RFC3550] 内の RTCP timestamp に基づいて計算されるため、 0 以外の DLSR 値が必要である。平均 round trip time は、 totalRoundTripTimeroundTripTimeMeasurements で割ることで計算できる。

fractionLost 、型 double

この SSRC について報告された fraction packet loss。 [RFC3550] 第 6.4.1 節および Appendix A.3 で定義されるように計算される。

roundTripTimeMeasurements、型 unsigned long long

この SSRC について受信された、有効な round trip time を含む RTCP RR block の総数を表す。 0 以外の DLSR 値を持つ RTCP Receiver Report が 受信されていないため roundTripTime を計算できない場合、このカウンターは増加しない。

packetsWithBleachedEct1Marking、 型 unsigned long long

[RFC3168] 第 3 節に従って ECT(1) marking 付きで送信されたが、 [RFC8888] report によって、その packet が "not-ECT" の marking で受信されたという情報が与えられた packet の数。

8.7 RTCSentRtpStreamStats 辞書

WebIDLdictionary RTCSentRtpStreamStats : RTCRtpStreamStats {
            unsigned long long packetsSent;
            unsigned long long bytesSent;
};

辞書 RTCSentRtpStreamStats メンバー

packetsSent、型 unsigned long long

この SSRC について送信された RTP packet の総数。 これには再送が含まれる。 [RFC3550] 第 6.4.1 節で定義されるように計算される。

bytesSent、型 unsigned long long

この SSRC について送信された byte の総数。 これには再送が含まれる。 [RFC3550] 第 6.4.1 節で定義されるように計算される。

RTCOutboundRtpStreamStats 辞書は、送信方向の RTP stream の測定メトリックを表す。 統計オブジェクトで報告される timestamp は、 データがサンプリングされた時刻である。

WebIDLdictionary RTCOutboundRtpStreamStats : RTCSentRtpStreamStats {
             DOMString            mid;
             DOMString            mediaSourceId;
             DOMString            remoteId;
             DOMString            rid;
             unsigned long        encodingIndex;
             unsigned long long   headerBytesSent;
             unsigned long long   retransmittedPacketsSent;
             unsigned long long   retransmittedBytesSent;
             unsigned long        rtxSsrc;
             double               targetBitrate;
             unsigned long long   totalEncodedBytesTarget;
             unsigned long        frameWidth;
             unsigned long        frameHeight;
             double               framesPerSecond;
             unsigned long        framesSent;
             unsigned long        hugeFramesSent;
             unsigned long        framesEncoded;
             unsigned long        keyFramesEncoded;
             unsigned long long   qpSum;
             record<DOMString, double> psnrSum;
             unsigned long long   psnrMeasurements;
             double               totalEncodeTime;
             double               totalPacketSendDelay;
             RTCQualityLimitationReason                 qualityLimitationReason;
             record<DOMString, double> qualityLimitationDurations;
             unsigned long        qualityLimitationResolutionChanges;
             unsigned long        nackCount;
             unsigned long        firCount;
             unsigned long        pliCount;
             DOMString            encoderImplementation;
             boolean              powerEfficientEncoder;
             boolean              active;
             DOMString            scalabilityMode;
             unsigned long long   packetsSentWithEct1;
};

辞書 RTCOutboundRtpStreamStats メンバー

mid、型 DOMString

この stream を所有する RTCRtpTransceivernull ではない mid 値を持つ場合、 これはその値であり、そうでない場合、このメンバーは exist してはMUST NOTならない。

mediaSourceId、型 DOMString

この stream の sender に現在添付されている track を表す stats object、 RTCMediaSourceStats の識別子。

remoteId、 型 DOMString

remoteId は、 同じ SSRC についてリモートの RTCRemoteInboundRtpStreamStats オブジェクトを検索するために使用される。

rid、型 DOMString

audio については exist してはMUST NOTならない。 この rid がこの RTP stream に設定されている場合にのみ exist する。 rid が設定されている場合、この値は RID RTP header extension がネゴシエートされているかどうかにかかわらず存在する。

encodingIndex、型 unsigned long

audio については exist してはMUST NOTならない。 これは、RTP sender の encodings のリスト内で、この RTP stream を表す encoding の index である。

headerBytesSent、型 unsigned long long

この SSRC について送信された RTP header および padding byte の総数。これは IP や UDP などの transport layer header のサイズを 含まない。 headerBytesSent + bytesSent は、transport 上で payload として送信された byte 数に等しい。

retransmittedPacketsSent、型 unsigned long long

この SSRC について再送された packet の総数。これは packetsSent のサブセットである。 RTX がネゴシエートされていない場合、再送 packet はこの ssrc 上で送信される。RTX がネゴシエートされた場合、 再送 packet は別個の SSRC 上で送信されるが、それでもここで計上される。

retransmittedBytesSent、型 unsigned long long

この SSRC について再送された byte の総数であり、payload byte のみを 含む。これは bytesSent のサブセットである。 RTX がネゴシエートされていない場合、再送 byte はこの ssrc 上で送信される。 RTX がネゴシエートされた場合、再送 byte は別個の SSRC 上で送信されるが、 それでもここで計上される。

rtxSsrc 、型 unsigned long

別個の RTP stream 上での再送について RTX がネゴシエートされている場合、これはこの stream の ssrc と関連付けられた RTX stream の SSRC である。 RTX がネゴシエートされていない場合、この値は exist してはMUST NOTならない。

targetBitrate、型 double

現在の encoder target を bit per second で反映する。 target は encoder の設定を反映する瞬時値であるが、 結果として送信される payload byte per second は、再送を除き、 target と密接に相関すべきSHOULDである。 bytesSent および retransmittedBytesSent も参照。 targetBitrate は、Transport Independent Application Specific (TIAS) bitrate [RFC3890] と同じ方法で定義される。

totalEncodedBytesTarget、型 unsigned long long

audio については exist してはMUST NOTならない。 この値は、frame が encode されるたびに target frame size(byte 単位)だけ増加する。 実際の frame size はこの数値より大きい場合も小さい場合もある。 この値は framesEncoded が増加するたびに増加する。

frameWidth、型 unsigned long

audio については exist してはMUST NOTならない。 最後に encode された frame の幅を表す。encode された frame の解像度は、 media source より低い場合がある(RTCVideoSourceStats.width を参照)。 最初の frame が encode される前、このメンバーは exist してはMUST NOTならない。

frameHeight、型 unsigned long

audio については exist してはMUST NOTならない。 最後に encode された frame の高さを表す。encode された frame の解像度は、 media source より低い場合がある(RTCVideoSourceStats.height を参照)。 最初の frame が encode される前、このメンバーは exist してはMUST NOTならない。

framesPerSecond、型 double

audio については exist してはMUST NOTならない。 直近 1 秒間に encode された frame 数。これは media source の frame rate (RTCVideoSourceStats.framesPerSecond を参照)より低い場合がある。

framesSent、型 unsigned long

audio については exist してはMUST NOTならない。 この RTP stream 上で送信された frame の総数を表す。

hugeFramesSent、型 unsigned long

audio については exist してはMUST NOTならない。 この RTP stream によって送信された huge frame の総数を表す。 huge frame とは、定義上、encoded size が frame の平均サイズの少なくとも 2.5 倍である frame である。frame の平均サイズは、 frame が encode された時点での target bitrate per second を target FPS で割ったものとして定義される。 これらは通常、picture 内に多くの変化があるため encode が複雑な frame である。 これは、たとえば stream された presentation における slide change を推定するために使用できる。

2.5 という乗数は、WebRTC standalone implementation を使用したサンプル presentation の encoded frame size の分析から選ばれた。2.5 は十分に大きい 乗数でありながら、それでもすべての slide change event を huge frame として識別させた。ただし、1.4% の false positive slide change detection を生じさせたが、 これは妥当と見なされる。

framesEncoded、型 unsigned long

audio については exist してはMUST NOTならない。 これは、この RTP media stream について正常に encode された frame の総数を表す。

keyFramesEncoded、型 unsigned long

audio については exist してはMUST NOTならない。 これは、この RTP media stream について正常に encode された、 VP8 [RFC6386] の key frame や H.264 [RFC6184] の IDR-frame などの key frame の総数を表す。これは framesEncoded のサブセットである。 framesEncoded - keyFramesEncoded により、 encode された delta frame の数が得られる。

qpSum、型 unsigned long long

audio については exist してはMUST NOTならない。 この sender によって encode された frame の QP 値の合計。 frame 数は framesEncoded にある。

QP 値の定義は codec に依存する。VP8 では、QP 値は frame header 内で syntax element y_ac_qi として運ばれる値であり、 [RFC6386] 第 19.2 節で定義される。 その範囲は 0..127 である。

QP 値は、使用された quantizer 値の指標にすぎないことに注意。 多くの形式には、frame 内で quantizer 値を変化させる方法がある。

psnrSum、型 record<DOMString, double>

exist してはならない。ただし、exposing hardware is allowed である場合を除く。 (これはフィンガープリンティングベクトルである。)

audio については exist してはMUST NOTならない。 この sender によって encode された frame の PSNR 値の累積合計。 record には "y"、"u"、"v" コンポーネントの値が含まれる。 measurement の数は psnrMeasurements にある。

PSNR は [ISO-29170-1:2017] で定義される。

PSNR metrics は per-frame basis で絶対的な真実を表すものではなく、 統計分析を意図している。

psnrMeasurements、型 unsigned long long

exist してはならない。ただし、exposing hardware is allowed である場合を除く。 (これはフィンガープリンティングベクトルである。)

audio については exist してはMUST NOTならない。 PSNR が測定された回数。psnrSum のコンポーネントは この measurement とともに集計される。

PSNR は [ISO-29170-1:2017] で定義される。 PSNR measurement の頻度は implementation-defined である。

User agent は、各 encoder implementation について固定頻度で PSNR を測定し、目立った性能上のペナルティを引き起こさない限り 可能な限り高頻度で測定することが推奨される。

totalEncodeTime、型 double

audio については exist してはMUST NOTならない。 この stream の framesEncoded frame の encode に費やされた秒数の総数。 平均 encode time は、この値を framesEncoded で割ることで 計算できる。 1 frame を encode するのにかかる時間は、 encoder に frame を供給してから、encoder がその frame について encoded data を返すまでに経過した時間である。これは、結果として得られる data を packetize するために追加でかかる可能性のある時間を含まない。

totalPacketSendDelay、型 double

packet が network に送信される前にローカルで buffer された秒数の総数。 時間は、packet が RTP packetizer から emit されてから、 OS network socket に渡されるまでで測定される。この measurement は、totalPacketSendDelay に、 packetsSent が 増加したときに加算される。

qualityLimitationReason、型 RTCQualityLimitationReason

audio については exist してはMUST NOTならない。 resolution および/または framerate を制限している現在の理由、または 制限されていない場合は "none"。

実装は最も制限している要因を報告する。複数の要因が存在する可能性があるため、 実装が最も制限している要因を判断できない場合、理由は次の優先順位で 報告されなければMUSTならない: "bandwidth", "cpu", "other"。

CPU と bandwidth resource の消費は 相互依存しており推定が困難であるため、 「最も制限している要因」が何かを判断するのは難しい。ここで推奨される優先順位は、 "bandwidth" が一般により変動しやすく、そのため "cpu" よりも 可能性が高く有用な signal であるという heuristic に基づいている。

qualityLimitationDurations、型 record<DOMString, double>

audio については exist してはMUST NOTならない。 この stream が各 quality limitation state に費やした総時間(秒単位)の record。record には、"none" を含むすべての RTCQualityLimitationReason 型に対する mapping が含まれる。

すべての entry の合計から qualityLimitationDurations["none"] を差し引くと、stream が制限されていた総時間が得られる。

qualityLimitationResolutionChanges、型 unsigned long

audio については exist してはMUST NOTならない。 quality limited であるために resolution が変化した回数 (qualityLimitationReason が "none" 以外の値を持つ)を表す。 counter は初期値が 0 で、resolution が上がるか下がると増加する。たとえば、 720p track が一定時間 480p として送信され、その後 720p に回復した場合、 qualityLimitationResolutionChanges は値 2 を持つ。

nackCount、型 unsigned long

[RFC4585] 第 6.2.1 節で定義される、この sender によって受信された Negative ACKnowledgement (NACK) packet の総数を数える。

firCount、型 unsigned long

audio については exist してはMUST NOTならない。 [RFC5104] 第 4.3.1 節で定義される、この sender によって受信された Full Intra Request (FIR) packet の総数を 数える。[RFC2032] で示され、 [RFC4587] によって 非推奨とされた RTCP FIR は数えない。

pliCount、型 unsigned long

audio については exist してはMUST NOTならない。 [RFC4585] 第 6.3.1 節で定義される、この sender によって受信された Picture Loss Indication (PLI) packet の総数を数える

encoderImplementation、型 DOMString

exist してはならない。ただし、exposing hardware is allowed である場合を除く。 (これはフィンガープリンティングベクトルである。)

audio については exist してはMUST NOTならない。 使用されている encoder implementation を識別する。 これは相互運用性の問題を診断するのに有用である。

powerEfficientEncoder、型 boolean

exist してはならない。ただし、exposing hardware is allowed である場合を除く。 (これはフィンガープリンティングベクトルである。)

audio については exist してはMUST NOTならない。 現在使用されている encoder が user agent によって power efficient と見なされるかどうか。 これは構成が hardware acceleration につながるかどうかを反映すべきSHOULDであるが、 user agent は、その構成が power efficient と見なされるかどうかを判断する際に、 他の情報を考慮してもMAYよい。

active、 型 boolean

この RTP stream が送信されるよう 構成されているか、または無効化されているかを示す。 active な stream であっても、たとえば network conditions によって制限されている場合には 送信していないことがある点に注意。

scalabilityMode、型 DOMString

audio については exist してはMUST NOTならない。 scalability mode がこの RTP stream に現在構成されている場合にのみ exist する。

packetsSentWithEct1、型 unsigned long long
[RFC3168] 第 5 節で定義され、[RFC9331] で説明される L4S protocol によって使用される ECT(1) marking 付きで、 この SSRC について送信された RTP packet の総数。

8.9 RTCQualityLimitationReason 列挙型

WebIDLenum RTCQualityLimitationReason {
            "none",
            "cpu",
            "bandwidth",
            "other",
          };
RTCQualityLimitationReason 列挙型の説明
列挙値 説明
none

resolution および/または framerate は制限されていない。

cpu

resolution および/または framerate は、主に CPU load によって制限されている。

bandwidth

resolution および/または framerate は、bandwidth estimation 中の congestion cues によって 主に制限されている。一般に、congestion control algorithm は inter-arrival time、round-trip time、packet、またはその他の congestion cues を使用して bandwidth estimation を行う。

other

resolution および/または framerate は、上記以外の理由により主に制限されている。

RTCRemoteOutboundRtpStreamStats 辞書は、 リモート endpoint の送信方向の RTP stream(送信 endpoint における送信方向の RTP stream に対応する)についての測定メトリックを表す。統計オブジェクトで報告される timestamp は、 対応する RTCP SR が受信された時刻である。

WebIDLdictionary RTCRemoteOutboundRtpStreamStats : RTCSentRtpStreamStats {
             DOMString           localId;
             DOMHighResTimeStamp remoteTimestamp;
             unsigned long long  reportsSent;
             double              roundTripTime;
             double              totalRoundTripTime;
             unsigned long long  roundTripTimeMeasurements;
};

辞書 RTCRemoteOutboundRtpStreamStats メンバー

localId、型 DOMString

localId は、同じ SSRC についてローカルの RTCInboundRtpStreamStats オブジェクトを検索するために使用される。

remoteTimestamp、型 DOMHighResTimeStamp

DOMHighResTimeStamp [HIGHRES-TIME] の remoteTimestamp は、これらの統計がリモート endpoint によって送信された remote timestamp を表す。これは、統計がローカル endpoint によって生成または受信された時刻を 表す timestamp とは異なる。 remoteTimestamp は、存在する場合、 リモート endpoint の clock を反映する RTCP Sender Report (SR) block 内の NTP timestamp から導出される。その clock はローカル clock と同期していない可能性がある。

reportsSent、型 unsigned long long

この SSRC について送信された RTCP Sender Report (SR) block の総数を表す。

roundTripTime 、型 double

[RFC3611] で定義される DLRR report block を含む最新の RTCP Sender Report (SR) に基づく、この SSRC についての推定 round trip time。 round trip time の計算は [RFC3611] 第 4.5 節で定義される。最新の SR が DLRR report block を含まない場合、 DLRR report block 内の last RR timestamp が zero の場合、または DLRR report block 内の delay since last RR 値が zero の場合は、 exist してはMUST NOTならない。

totalRoundTripTime、型 double

セッションの開始以降に行われたすべての round trip time measurement の秒単位の 累積合計を表す。個々の round trip time は、 RTCP Sender Report (SR) [RFC3611] 内の DLRR report block に基づいて計算される。 roundTripTime を計算できない場合、この counter は増加しない。 平均 round trip time は、totalRoundTripTimeroundTripTimeMeasurements で割ることで計算できる。

roundTripTimeMeasurements、型 unsigned long long

[RFC3611] に従って有効な round trip time を導出できる DLRR report block を含む、 この SSRC について受信された RTCP Sender Report (SR) block の総数を表す。 roundTripTime を計算できない場合、この counter は増加しない。

8.11 RTCMediaSourceStats 辞書

RTCMediaSourceStats 辞書は、 現在 1 つ以上の sender に添付されている track を表す。これは、 encoding 前の frame rate や resolution など、media source に関する情報を含む。 これは MediaStreamTrack から RTCRtpSender へ渡される media である。 これに対し、 RTCOutboundRtpStreamStats の メンバーは、encoding step の後に測定される metric を記述する。たとえば、track は 高解像度 camera から capture され、その frame は track constraints により downscale され、 さらに CPU および network conditions により encoder によって downscale されることがある。 この辞書は、track constraints が適用された後、ただし encoding やさらなる downsampling が行われる前に、track から出力される video frame または audio sample を反映する。

Media source object は、subdictionary RTCAudioSourceStats または RTCVideoSourceStats の いずれかである。 type は同じ ("media-source")だが、track の種類に応じて kind は異なる("audio" または "video")。

media source stats object は、track が任意の RTCRtpSender に添付されたときに作成され、 その生存期間中に複数の sender に添付されることがある。 この object の生存期間は、track が同じ RTCPeerConnection の どの sender にも添付されなくなったときに終了する。media source object が終了した track が 再び添付された場合、counter(frame 数など)が reset された新しい media source stats object が 生成される。

WebIDLdictionary RTCMediaSourceStats : RTCStats {
             required DOMString       trackIdentifier;
             required DOMString       kind;
};

辞書 RTCMediaSourceStats メンバー

trackIdentifier、型 DOMString

MediaStreamTrackid 属性の値。

kind、 型 DOMString

MediaStreamTrackkind 属性の値。 これは "audio" または "video" である。 "audio" の場合、この stats object は RTCAudioSourceStats 型である。 "video" の場合、この stats object は RTCVideoSourceStats 型である。

8.12 RTCAudioSourceStats 辞書

RTCAudioSourceStats 辞書は、1 つ以上の sender に添付されている audio track を表す。これは、その kind"audio" である RTCMediaSourceStats である。

WebIDLdictionary RTCAudioSourceStats : RTCMediaSourceStats {
              double              audioLevel;
              double              totalAudioEnergy;
              double              totalSamplesDuration;
              double              echoReturnLoss;
              double              echoReturnLossEnhancement;
};

辞書 RTCAudioSourceStats メンバー

audioLevel、 型 double

media source の audio level を表す。リモート由来の track の audio level については、 代わりに RTCInboundRtpStreamStats を参照。

値は 0..1(linear)の範囲であり、1.0 は 0 dBov、0 は silence、0.5 は 0 dBov からの sound pressure level のおよそ 6 dBSPL の変化を表す。

audioLevel は、 totalAudioEnergy で説明されるアルゴリズムを使用して、ある小さな interval にわたって平均される。 使用される interval は implementation-defined である。

totalAudioEnergy、型 double

media source の audio energy を表す。リモート由来の track の audio energy については、 代わりに RTCInboundRtpStreamStats を参照。

この値は次のように計算されなければMUSTならない: この stats object の生存期間中に media source によって生成された各 audio sample について、sample の値を encode 可能な最高強度の値で割り、二乗し、その後 sample の duration(秒)を掛けたものを加算する。言い換えると、duration * Math.pow(energy/maxEnergy, 2) である。

これは、[RFC6464] で定義される audioLevel と同じ単位を使用する root mean square(RMS)値を得るために使用できる。 これは式 Math.sqrt(totalAudioEnergy/totalSamplesDuration) を使用して それらの単位に変換できる。この計算は、任意の望ましい時間間隔にわたる 平均 audio level を計算するために、2 つの異なる getStats() 呼び出しの値の差分を使用して実行することもできる。言い換えると、 Math.sqrt((energy2 - energy1)/(duration2 - duration1)) とする。

たとえば、10ms の audio packet が 0.5(1.0 のうち)の RMS で生成された場合、 これは totalAudioEnergy0.5 * 0.5 * 0.01 = 0.0025 を加えるべきである。 RMS が 0.1 の別の 10ms packet が 受信された場合、これは同様に totalAudioEnergy0.0001 を加えるべきである。 すると、 Math.sqrt(totalAudioEnergy/totalSamplesDuration)Math.sqrt(0.0026/0.02) = 0.36 となり、これは連続した 20ms の audio segment に対して RMS 計算を行うことで得られる値と同じである。

複数の audio channel が使用される場合、 sample の audio energy は任意の channel の最高 energyを指す。

totalSamplesDuration、型 double

media source の audio duration を表す。リモート由来の track の audio duration については、 代わりに RTCInboundRtpStreamStats を参照。

この stats object の生存期間中に、この source によって生成されたすべての sample の総 duration を秒単位で表す。 totalAudioEnergy とともに使用して、異なる interval にわたる平均 audio level を計算できる。

echoReturnLoss 、型 double

MediaStreamTrack が echo cancellation が適用される microphone から供給されている場合にのみ exist する。 [ECHO] (2012) 第 3.14 節で定義されるように、decibel 単位で計算される。

複数の audio channel が使用される場合、 どの sample についても最も低い audio energyの channel が考慮される。

echoReturnLossEnhancement、型 double

MediaStreamTrack が echo cancellation が適用される microphone から供給されている場合にのみ exist する。 [ECHO] (2012) 第 3.15 節で定義されるように、decibel 単位で計算される。

複数の audio channel が使用される場合、どの sample についても 最も低い audio energyの channel が考慮される。

8.13 RTCVideoSourceStats 辞書

RTCVideoSourceStats 辞書は、1 つ以上の sender に添付されている video track を表す。これは、その RTCMediaSourceStatskind"video" である。

WebIDLdictionary RTCVideoSourceStats : RTCMediaSourceStats {
             unsigned long   width;
             unsigned long   height;
             unsigned long   frames;
             double          framesPerSecond;
};

辞書 RTCVideoSourceStats メンバー

width 、型 unsigned long

この source に由来する最後の frame の幅(pixel 単位)。 frame が生成される前、このメンバーは MUST NOT exist である。

height 、型 unsigned long

この source に由来する最後の frame の高さ(pixel 単位)。 frame が生成される前、このメンバーは MUST NOT exist である。

frames 、型 unsigned long

この source に由来する frame の総数。

framesPerSecond、型 double

この source に由来する frame の数であり、直近 1 秒間に測定される。 この object の生存期間の最初の 1 秒間、このメンバーは MUST NOT exist である。

8.14 RTCAudioPlayoutStats 辞書

playout path が audio device を表す場合にのみ適用される。 1 つの playout path を表す。同じ playout stats object が 複数の RTCInboundRtpStreamStats から参照されている場合、 これは audio mixing が発生していることを示し、その場合、この stats object 内の sample counter は mixing 後の sample を指す。

WebIDLdictionary RTCAudioPlayoutStats : RTCStats {
             required DOMString kind;
             double             synthesizedSamplesDuration;
             unsigned long      synthesizedSamplesEvents;
             double             totalSamplesDuration;
             double             totalPlayoutDelay;
             unsigned long long totalSamplesCount;
};

RTCAudioPlayoutStats 辞書と そのすべての metric は、合意不足のため at risk の機能である。

辞書 RTCAudioPlayoutStats メンバー

kind、 型 DOMString

audio playout の場合、これは "audio" という値を持つ。これは、playout されている MediaStreamTrack(s) の kind 属性を反映する。

synthesizedSamplesDuration、型 double

playout path が device playout に間に合うように audio sample を生成できない場合、 sample が代わりに playout されるよう合成される。 synthesizedSamplesDuration は秒単位で測定され、 この playout path によって audio sample が合成されるたびに増加する。 この metric は totalSamplesDuration とともに使用して、playout された media のうち合成されたものの割合を 計算できる。

Synthesization は通常、pipeline が十分に機能していない場合にのみ発生する。 RTCInboundRtpStreamStats によって合成された sample はここでは数えられず、 RTCInboundRtpStreamStats.concealedSamples で数えられる。

synthesizedSamplesEvents、型 unsigned long

synthesized samples event の数。この counter は、 non-synthesized sample の後に sample が合成されるたびに増加する。 つまり、複数の連続した synthesized sample は synthesizedSamplesDuration を複数回増加させるが、単一の synthesization samples event である。

totalSamplesDuration、型 double

playout されたすべての audio sample の総 duration(秒単位)。 synthesized sample と non-synthesized sample の両方を含む。

totalPlayoutDelay、型 double

audio sample が playout device によって pull されるとき、 この counter は、その audio sample についての playout path の推定 delay だけ増加する。 playout delay には、emit されてから device 上で実際に playout される時刻までの delay が含まれる。この metric は totalSamplesCount とともに使用して、sample あたりの平均 playout delay を 計算できる。

totalSamplesCount、型 unsigned long long

audio sample が playout device によって pull されるとき、 この counter は playout のために emit された sample 数だけ増加する。

8.15 RTCPeerConnectionStats 辞書

WebIDLdictionary RTCPeerConnectionStats : RTCStats {
            unsigned long dataChannelsOpened;
            unsigned long dataChannelsClosed;
};

辞書 RTCPeerConnectionStats メンバー

dataChannelsOpened、型 unsigned long

生存期間中に "open" state に入った一意な RTCDataChannel の数を表す。

dataChannelsClosed、型 unsigned long

生存期間中に "open" state を離れた一意な RTCDataChannel の数を表す (いずれかの端によって閉じられた、または基礎となる transport が閉じられたため)。 "connecting" から "closing" または "closed" へ遷移し、決して "open" にならなかった RTCDataChannel は、 この数に含まれない。

任意の時点における open data channel の総数は、 dataChannelsOpened - dataChannelsClosed として計算できる。この数は常に正である。

8.16 RTCDataChannelStats 辞書

WebIDLdictionary RTCDataChannelStats : RTCStats {
             DOMString           label;
             DOMString           protocol;
             unsigned short      dataChannelIdentifier;
             required RTCDataChannelState state;
             unsigned long       messagesSent;
             unsigned long long  bytesSent;
             unsigned long       messagesReceived;
             unsigned long long  bytesReceived;
};

辞書 RTCDataChannelStats メンバー

label、 型 DOMString
RTCDataChannel object の label 値。
protocol、 型 DOMString
RTCDataChannel object の protocol 値。
dataChannelIdentifier、型 unsigned short

RTCDataChannel object の id 属性。

state、型 RTCDataChannelState
RTCDataChannel object の readyState 値。
messagesSent、型 unsigned long

送信された API "message" event の総数を表す。

bytesSent、型 unsigned long long

この RTCDataChannel 上で送信された payload byte の総数を表す。

messagesReceived、型 unsigned long

受信された API "message" event の総数を表す。

bytesReceived、型 unsigned long long

この RTCDataChannel 上で受信された payload byte の総数を表す。

8.17 RTCTransportStats 辞書

RTCTransportStats object は、 RTCDtlsTransport およびその 下位の RTCIceTransport に対応する stats を表す。bundling が使用される場合、単一の transport が bundle group 内のすべての MediaStreamTrack に 使用される。 bundling が使用されない場合、異なる MediaStreamTrack は 異なる transport を使用する。bundling は [WEBRTC] で説明される。

WebIDLdictionary RTCTransportStats : RTCStats {
             unsigned long long    packetsSent;
             unsigned long long    packetsReceived;
             unsigned long long    bytesSent;
             unsigned long long    bytesReceived;
             RTCIceRole            iceRole;
             DOMString             iceLocalUsernameFragment;
             required RTCDtlsTransportState dtlsState;
             RTCIceTransportState  iceState;
             DOMString             selectedCandidatePairId;
             DOMString             localCertificateId;
             DOMString             remoteCertificateId;
             DOMString             tlsVersion;
             DOMString             dtlsCipher;
             RTCDtlsRole           dtlsRole;
             DOMString             srtpCipher;
             unsigned long         selectedCandidatePairChanges;
             unsigned long         ccfbMessagesSent;
	     unsigned long         ccfbMessagesReceived;
};

辞書 RTCTransportStats メンバー

packetsSent、型 unsigned long long

この transport 上で送信された packet の総数を表す。

packetsReceived、型 unsigned long long

この transport 上で受信された packet の総数を表す。

bytesSent、型 unsigned long long

この RTCIceTransport 上で送信された payload byte の総数を表す。すなわち、header、padding、 または ICE connectivity check を含まない。

bytesReceived、型 unsigned long long

この RTCIceTransport 上で受信された payload byte の総数を表す。すなわち、header、padding、 または ICE connectivity check を含まない。

iceRole、 型 RTCIceRole

下位の RTCDtlsTransport.iceTransportrole 属性の現在の値に設定される。

iceLocalUsernameFragment、型 DOMString

この RTCIceTransport について、message validation procedure [RFC5245] で使用される local username fragment の現在の値に設定される。 setLocalDescription() および ICE restart 時に更新されることがある。

dtlsState、型 RTCDtlsTransportState

下位の RTCDtlsTransportstate 属性の現在の値に設定される。

iceState、型 RTCIceTransportState

下位の RTCIceTransportstate 属性の現在の値に設定される。

selectedCandidatePairId、型 DOMString

これは、この transport に関連付けられた RTCIceCandidatePairStats を生成するために検査された object に関連付けられる一意な識別子である。

localCertificateId、型 DOMString

DTLS がネゴシエートされる component について、local certificate を与える。

remoteCertificateId、型 DOMString

DTLS がネゴシエートされる component について、remote certificate を与える。

tlsVersion 、型 DOMString

DTLS がネゴシエートされる component について、合意された TLS version。 DTLS negotiation が完了した後にのみ exist する。

値は、存在する場合は ServerHello.supported_versions から、 そうでない場合は ServerHello.version から来る。これは、その version の 2 byte を表す 4 桁の大文字の hexadecimal digit として表される。

dtlsCipher 、型 DOMString

IANA cipher suite registry [IANA-TLS-CIPHERS] の "Description" column で定義される、DTLS transport に使用される cipher suite の説明名。

dtlsRole 、型 RTCDtlsRole

DTLS role に応じて "client" または "server"。 DTLS negotiation が開始される前は "unknown"。

srtpCipher 、型 DOMString

IANA DTLS-SRTP protection profile registry [IANA-DTLS-SRTP] の "Profile" column で 定義され、[RFC5764] で さらに説明される、SRTP transport に使用される protection profile の説明名。

selectedCandidatePairChanges、型 unsigned long

この transport の selected candidate pair が変更された回数。 selected candidate pair を持たない状態から持つ状態になる、またはその逆の場合も、 この counter は増加する。初期値は 0 であり、最初の candidate pair が選択されると 1 になる。

ccfbMessagesSent、型 unsigned long

この transport 上で送信された、[RFC8888] section 3.1 で説明される CongestionControl Feedback Packet 型の Transport-Layer Feedback Message の数。

ccfbMessagesReceived、型 unsigned long

この transport 上で受信された、[RFC8888] section 3.1 で説明される CongestionControl Feedback Packet 型の Transport-Layer Feedback Message の数。

RTCDtlsRole 列挙型

WebIDLenum RTCDtlsRole {
      "client",
      "server",
      "unknown",
};
RTCDtlsRole 列挙型の説明
列挙値 説明
client

RTCPeerConnection は [RFC6347] で定義される DTLS client として動作している。

server

RTCPeerConnection は [RFC6347] で定義される DTLS server として動作している。

unknown

RTCPeerConnection の DTLS role はまだ決定されていない。

8.18 RTCIceCandidateStats 辞書

RTCIceCandidateStats は、[RFC5245] Section 15.1 の candidate の property を反映する。 これは RTCIceCandidate object に対応する。

WebIDLdictionary RTCIceCandidateStats : RTCStats {
             required DOMString       transportId;
             DOMString?               address;
             long                     port;
             DOMString                protocol;
             required RTCIceCandidateType candidateType;
             long                     priority;
             DOMString                url;
             RTCIceServerTransportProtocol relayProtocol;
             DOMString                foundation;
             DOMString                relatedAddress;
             long                     relatedPort;
             DOMString                usernameFragment;
             RTCIceTcpCandidateType   tcpType;
};

辞書 RTCIceCandidateStats メンバー

transportId 、型 DOMString

これは、この candidate に関連付けられた RTCTransportStats を生成するために 検査された object に関連付けられる一意な識別子である。

address、 型 DOMString

これは candidate の address であり、IPv4 address、IPv6 address、および fully qualified domain name(FQDN)を許容する。詳細は [RFC5245] section 15.1 を参照。

user agent は、対応する RTCPeerConnection 上で web application が構成した remote candidate address のみが expose されるようにすべきである。 これは、peer reflexive remote candidate について特に重要である。既定では、 user agent は任意の remote candidate の RTCIceCandidateStats dictionary において、address member を null のままにしておかなければMUSTならない。 RTCPeerConnection instance が、web application による addIceCandidate() の使用を通じて address を知ると、 user agent は、新しく知った address に一致する、対応する RTCPeerConnection の任意の remote RTCIceCandidateStats dictionary において 'address' member 値を expose できる。

port、型 long

これは candidate の port number である。

protocol、 型 DOMString

transport の有効な値は "udp" および "tcp" のいずれかである。 [RFC5245] section 15.1 で定義される "transport" に基づく。

candidateType、型 RTCIceCandidateType

この列挙型は [WEBRTC] で定義される。

priority、型 long

[RFC5245] section 15.1 で定義されるように計算される。

url、型 DOMString

型 "srflx" または型 "relay" の local candidate について、これは candidate が取得された ICE server の URL であり、 [WEBRTC] で定義される。

remote candidate について、この property は MUST NOT present である。

relayProtocol、型 RTCIceServerTransportProtocol

これは endpoint が TURN server と通信するために使用する protocol である。 これは local relay candidate に対してのみ存在し、[WEBRTC] で定義される。

remote candidate について、この property は MUST NOT present である。

foundation 、型 DOMString

[RFC5245] section 15.1 で定義される ICE foundation。

relatedAddress、型 DOMString

[RFC5245] section 15.1 で定義される ICE rel-addr。serverreflexive、 peerreflexive、および relay candidate についてのみ設定される。

relatedPort、 型 long

[RFC5245] section 15.1 で定義される ICE rel-addr。serverreflexive、 peerreflexive、および relay candidate についてのみ設定される。

usernameFragment、型 DOMString

[RFC5245] section 7.1.2.3 で定義される ICE username fragment。peerreflexive remote candidate については、ICE username fragment が以前に signaling されていない限り、 これは設定されない。

tcpType、型 RTCIceTcpCandidateType

RTCIceTcpCandidateType で定義され、 RTCIceCandidate で使用される ICE candidate TCP type。

8.19 RTCIceCandidatePairStats 辞書

WebIDLdictionary RTCIceCandidatePairStats : RTCStats {
             required DOMString            transportId;
             required DOMString            localCandidateId;
             required DOMString            remoteCandidateId;
             required RTCStatsIceCandidatePairState state;
             boolean                       nominated;
             unsigned long long            packetsSent;
             unsigned long long            packetsReceived;
             unsigned long long            bytesSent;
             unsigned long long            bytesReceived;
             DOMHighResTimeStamp           lastPacketSentTimestamp;
             DOMHighResTimeStamp           lastPacketReceivedTimestamp;
             double                        totalRoundTripTime;
             double                        currentRoundTripTime;
             double                        availableOutgoingBitrate;
             double                        availableIncomingBitrate;
             unsigned long long            requestsReceived;
             unsigned long long            requestsSent;
             unsigned long long            responsesReceived;
             unsigned long long            responsesSent;
             unsigned long long            consentRequestsSent;
             unsigned long                 packetsDiscardedOnSend;
             unsigned long long            bytesDiscardedOnSend;
};

辞書 RTCIceCandidatePairStats メンバー

transportId、型 DOMString

これは、この candidate pair に関連付けられた RTCTransportStats を生成するために 検査された object に関連付けられる一意な識別子である。

localCandidateId、型 DOMString

これは、この candidate pair に関連付けられた local candidate についての RTCIceCandidateStats を生成するために 検査された object に関連付けられる一意な識別子である。

remoteCandidateId、型 DOMString

これは、この candidate pair に関連付けられた remote candidate についての RTCIceCandidateStats を生成するために 検査された object に関連付けられる一意な識別子である。

state、型 RTCStatsIceCandidatePairState

pair 内の local candidate と remote candidate についての checklist の状態を表す。

nominated、 型 boolean

[RFC5245] Section 7.1.3.2.4 で説明される nominated flag の更新に関連する。

packetsSent、型 unsigned long long

この candidate pair 上で送信された packet の総数を表す。

packetsReceived、型 unsigned long long

この candidate pair 上で受信された packet の総数を表す。

bytesSent、型 unsigned long long

この candidate pair 上で送信された payload byte の総数を表す。すなわち、 header、padding、または ICE connectivity check は含まない。

bytesReceived、型 unsigned long long

この candidate pair 上で受信された payload byte の総数を表す。 すなわち、header、padding、または ICE connectivity check は含まない。

lastPacketSentTimestamp、型 DOMHighResTimeStamp

この特定の candidate pair 上で最後の packet が送信された timestamp を表す。 STUN packet は除外する。

lastPacketReceivedTimestamp、型 DOMHighResTimeStamp

この特定の candidate pair 上で最後の packet が受信された timestamp を表す。 STUN packet は除外する。

totalRoundTripTime、型 double

セッション開始以降のすべての round trip time measurement の秒単位の合計を表す。 STUN connectivity check [STUN-PATH-CHAR] response(responsesReceived)に基づき、consent を検証するために送信された request に対する response も含む [RFC7675]。 平均 round trip time は、 totalRoundTripTimeresponsesReceived で割ることで 計算できる。

currentRoundTripTime、型 double

STUN connectivity check [STUN-PATH-CHAR] から計算される、 秒単位で測定された最新の round trip time を表し、 consent verification のために送信されたものも含む [RFC7675]。

availableOutgoingBitrate、型 double

これは、下位の congestion control によって、この candidate pair を使用するすべての送信方向の RTP stream についての available bitrate を組み合わせることにより計算される。bitrate measurement は、IP や TCP または UDP などのその他の transport layer のサイズを数えない。 これは [RFC3890] で定義される TIAS と同様であり、 すなわち bit per second で測定され、bitrate は 1 秒 window にわたって計算される。 使用中の candidate pair について、その推定値は通常、 lastPacketSentTimestamp で送信された packet の bitrate より低くないが、それより 高い場合がある。

下位の congestion control が、たとえば TWCC などの mechanism を使用して send-side bandwidth estimation を計算した場合、 または RTCP を介して receive-side estimation、たとえば REMB で説明されるものを受信した場合にのみ exist する。 bandwidth estimation のために考慮された packet の送信に一度も使用されたことがない candidate pair、または以前に使用されたことはあるが現在使用中ではない candidate pair については MUST NOT exist である。

availableIncomingBitrate、型 double

これは、下位の congestion control によって、この candidate pair を使用するすべての受信方向の RTP stream についての available bitrate を組み合わせることにより計算される。bitrate measurement は、IP や TCP または UDP などのその他の transport layer のサイズを数えない。 これは [RFC3890] で定義される TIAS と同様であり、 すなわち bit per second で測定され、bitrate は 1 秒 window にわたって計算される。 使用中の pair について、その推定値は通常、 lastPacketReceivedTimestamp で受信された packet の bitrate より低くないが、それより 高い場合がある。

receive-side bandwidth estimation、たとえば REMB が計算された場合にのみ exist する。 bandwidth estimation のために考慮された packet の受信に一度も使用されたことがない candidate pair、または以前に使用されたことはあるが現在使用中ではない candidate pair については MUST NOT exist である。

requestsReceived、型 unsigned long long

受信された connectivity check request(再送を含む)の総数を表す。 receiver は request が connectivity を確認するために送信されたものか、 consent を確認するために送信されたものかを判別できないため、すべての connectivity check request がここで数えられる。

requestsSent、型 unsigned long long

送信された connectivity check request(再送を含まない)の総数を表す。

responsesReceived、型 unsigned long long

受信された connectivity check response の総数を表す。

responsesSent、型 unsigned long long

送信された connectivity check response の総数を表す。connectivity check request と consent request を区別できないため、すべての response が数えられる。

consentRequestsSent、型 unsigned long long

送信された consent request の総数を表す。

packetsDiscardedOnSend、型 unsigned long

socket error により破棄された、この candidate pair についての packet の総数。 すなわち、packet を socket に渡す際に socket error が発生した場合である。 これは buffer がいっぱいである、利用可能な memory がないなど、 さまざまな理由で発生することがある。

bytesDiscardedOnSend、型 unsigned long long

socket error により破棄された、この candidate pair についての byte の総数。 すなわち、その byte を含む packet を socket に渡す際に socket error が発生した場合である。 これは buffer がいっぱいである、利用可能な memory がないなど、 さまざまな理由で発生することがある。[RFC3550] section 6.4.1 で定義されるように計算される。

8.19.1 RTCStatsIceCandidatePairState 列挙型

WebIDLenum RTCStatsIceCandidatePairState {
    "frozen",
    "waiting",
    "in-progress",
    "failed",
    "succeeded"
};
RTCStatsIceCandidatePairState 列挙型の説明
列挙値 説明
frozen

[RFC5245] Section 5.7.4 で定義される。

waiting

[RFC5245] Section 5.7.4 で定義される。

in-progress

[RFC5245] Section 5.7.4 で定義される。

failed

[RFC5245] Section 5.7.4 で定義される。

succeeded

[RFC5245] Section 5.7.4 で定義される。

8.20 RTCCertificateStats 辞書

WebIDLdictionary RTCCertificateStats : RTCStats {
             required DOMString fingerprint;
             required DOMString fingerprintAlgorithm;
             required DOMString base64Certificate;
             DOMString issuerCertificateId;
};

辞書 RTCCertificateStats メンバー

fingerprint 、型 DOMString

certificate の fingerprint。[RFC4572] Section 5 で定義される fingerprint 値のみを使用する。

fingerprintAlgorithm、型 DOMString

certificate fingerprint を計算するために使用される hash function。たとえば "sha-256"

base64Certificate、型 DOMString

certificate の DER-encoded base-64 表現。

issuerCertificateId、型 DOMString

issuerCertificateId は、certificate chain 内の次の certificate を含む stats object を参照する。 現在の certificate が chain の末尾にある場合(すなわち self-signed certificate の場合)、 これは設定されない。

9.

9.1 stats アプリケーションの例

ユーザーが音声の不調を経験しており、アプリケーションがその原因が packet loss かどうかを 判断したい場合を考える。次の example code を使用できる:

var baselineReport, currentReport;
var sender = pc.getSenders()[0];

sender.getStats().then(function (report) {
    baselineReport = report;
})
.then(function() {
    return new Promise(function(resolve) {
        setTimeout(resolve, aBit); // ... wait a bit
    });
})
.then(function() {
    return sender.getStats();
})
.then(function (report) {
    currentReport = report;
    processStats();
})
.catch(function (error) {
  console.log(error.toString());
});

function processStats() {
    // compare the elements from the current report with the baseline
    for (let now of currentReport.values()) {
        if (now.type != "outbound-rtp")
            continue;

        // get the corresponding stats from the baseline report
        let base = baselineReport.get(now.id);

        if (base) {
            remoteNow = currentReport.get(now.remoteId);
            remoteBase = baselineReport.get(base.remoteId);

            var packetsSent = now.packetsSent - base.packetsSent;
            var packetsReceived = remoteNow.packetsReceived - remoteBase.packetsReceived;

            // if intervalFractionLoss is > 0.3, we've probably found the culprit
            var intervalFractionLoss = (packetsSent - packetsReceived) / packetsSent;
        }
    });
}

10. セキュリティとプライバシーに関する考慮事項

WebRTC Statistics によって公開されるデータには、[GETUSERMEDIA] および [WEBRTC] によっても公開される media および network data の ほとんどが含まれる。そのため、data exposure に関連するこれらの仕様のすべての privacy and security considerations は、この仕様にも同様に適用される。

加えて、RTCReceivedRtpStreamStatsRTCRemoteInboundRtpStreamStatsRTCSentRtpStreamStatsRTCOutboundRtpStreamStatsRTCRemoteOutboundRtpStreamStatsRTCIceCandidatePairStatsRTCTransportStats によって公開される property は、 現在 JavaScript layer では利用できない network-layer data を公開する。

WebRTC 1.0 仕様で議論されている IP address の公開に関連するリスクに加えて、この仕様によって一意に公開される network property の何らかの組み合わせは、location と相関付けられる可能性がある。

たとえば、RTCRemoteInboundRtpStreamStats で公開される round-trip time は、 peer 同士がどれほど離れて位置しているかについて大まかな indication を与える可能性があり、 そのため、peer の一方の location が既知である場合、他方の peer についての情報を明らかにする可能性がある。

isolated stream に適用される場合、media metric により、アプリケーションは isolated stream の いくつかの特性、たとえば誰かが話しているかどうか( audioLevel statistic を監視することによって)を 推測できる可能性がある。

次の stats は sensitive と見なされ、isolated media stream について 報告してはMUST NOTならない:

A. 型ごとの WebRTC stats field の概要

RTCStatsType 辞書 Field
"codec" RTCStats timestamp
type
id
RTCCodecStats payloadType
transportId
mimeType
clockRate
channels
sdpFmtpLine
"inbound-rtp" RTCStats timestamp
type
id
RTCRtpStreamStats ssrc
kind
transportId
codecId
RTCReceivedRtpStreamStats packetsReceived
packetsReceivedWithEct1
packetsReceivedWithCe
packetsReportedAsLost
packetsReportedAsLostButRecovered
packetsLost
jitter
RTCInboundRtpStreamStats trackIdentifier
mid
remoteId
framesDecoded
keyFramesDecoded
framesRendered
framesDropped
frameWidth
frameHeight
framesPerSecond
qpSum
totalDecodeTime
totalInterFrameDelay
totalSquaredInterFrameDelay
pauseCount
totalPausesDuration
freezeCount
totalFreezesDuration
lastPacketReceivedTimestamp
headerBytesReceived
packetsDiscarded
fecBytesReceived
fecPacketsReceived
fecPacketsDiscarded
bytesReceived
nackCount
firCount
pliCount
totalProcessingDelay
estimatedPlayoutTimestamp
jitterBufferDelay
jitterBufferTargetDelay
jitterBufferEmittedCount
jitterBufferMinimumDelay
totalSamplesReceived
concealedSamples
silentConcealedSamples
concealmentEvents
insertedSamplesForDeceleration
removedSamplesForAcceleration
audioLevel
totalAudioEnergy
totalSamplesDuration
framesReceived
decoderImplementation
playoutId
powerEfficientDecoder
framesAssembledFromMultiplePackets
totalAssemblyTime
retransmittedPacketsReceived
retransmittedBytesReceived
rtxSsrc
fecSsrc
totalCorruptionProbability
totalSquaredCorruptionProbability
corruptionMeasurements
"outbound-rtp" RTCStats timestamp
type
id
RTCRtpStreamStats ssrc
kind
transportId
codecId
RTCSentRtpStreamStats packetsSent
bytesSent
RTCOutboundRtpStreamStats mid
mediaSourceId
remoteId
rid
encodingIndex
headerBytesSent
retransmittedPacketsSent
retransmittedBytesSent
rtxSsrc
targetBitrate
totalEncodedBytesTarget
frameWidth
frameHeight
framesPerSecond
framesSent
hugeFramesSent
framesEncoded
keyFramesEncoded
qpSum
psnrSum
psnrMeasurements
totalEncodeTime
totalPacketSendDelay
qualityLimitationReason
qualityLimitationDurations
qualityLimitationResolutionChanges
nackCount
firCount
pliCount
encoderImplementation
powerEfficientEncoder
active
scalabilityMode
packetsSentWithEct1
"remote-inbound-rtp" RTCStats timestamp
type
id
RTCRtpStreamStats ssrc
kind
transportId
codecId
RTCReceivedRtpStreamStats packetsReceived
packetsReceivedWithEct1
packetsReceivedWithCe
packetsReportedAsLost
packetsReportedAsLostButRecovered
packetsLost
jitter
RTCRemoteInboundRtpStreamStats localId
roundTripTime
totalRoundTripTime
fractionLost
roundTripTimeMeasurements
packetsWithBleachedEct1Marking
"remote-outbound-rtp" RTCStats timestamp
type
id
RTCRtpStreamStats ssrc
kind
transportId
codecId
RTCSentRtpStreamStats packetsSent
bytesSent
RTCRemoteOutboundRtpStreamStats localId
remoteTimestamp
reportsSent
roundTripTime
totalRoundTripTime
roundTripTimeMeasurements
"media-source" RTCStats timestamp
type
id
RTCMediaSourceStats trackIdentifier
kind
RTCAudioSourceStats audioLevel
totalAudioEnergy
totalSamplesDuration
echoReturnLoss
echoReturnLossEnhancement
RTCVideoSourceStats width
height
frames
framesPerSecond
"media-playout" RTCStats timestamp
type
id
RTCAudioPlayoutStats kind
synthesizedSamplesDuration
synthesizedSamplesEvents
totalSamplesDuration
totalPlayoutDelay
totalSamplesCount
"peer-connection" RTCStats timestamp
type
id
RTCPeerConnectionStats dataChannelsOpened
dataChannelsClosed
"data-channel" RTCStats timestamp
type
id
RTCDataChannelStats label
protocol
dataChannelIdentifier
state
messagesSent
bytesSent
messagesReceived
bytesReceived
"transport" RTCStats timestamp
type
id
RTCTransportStats packetsSent
packetsReceived
bytesSent
bytesReceived
iceRole
iceLocalUsernameFragment
dtlsState
iceState
selectedCandidatePairId
localCertificateId
remoteCertificateId
tlsVersion
dtlsCipher
dtlsRole
srtpCipher
selectedCandidatePairChanges
ccfbMessagesSent
ccfbMessagesReceived
"candidate-pair" RTCStats timestamp
type
id
RTCIceCandidatePairStats transportId
localCandidateId
remoteCandidateId
state
nominated
packetsSent
packetsReceived
bytesSent
bytesReceived
lastPacketSentTimestamp
lastPacketReceivedTimestamp
totalRoundTripTime
currentRoundTripTime
availableOutgoingBitrate
availableIncomingBitrate
requestsReceived
requestsSent
responsesReceived
responsesSent
consentRequestsSent
packetsDiscardedOnSend
bytesDiscardedOnSend
"local-candidate" RTCStats timestamp
type
id
RTCIceCandidateStats transportId
address
port
protocol
candidateType
priority
url
relayProtocol
foundation
relatedAddress
relatedPort
usernameFragment
tcpType
"remote-candidate" RTCStats timestamp
type
id
RTCIceCandidateStats transportId
address
port
protocol
candidateType
priority
url
relayProtocol
foundation
relatedAddress
relatedPort
usernameFragment
tcpType
"certificate" RTCStats timestamp
type
id
RTCCertificateStats fingerprint
fingerprintAlgorithm
base64Certificate
issuerCertificateId

B. 謝辞

編集者は、Working Group 議長の Stefan Håkansson、および Team Contact の Dominique Hazaël-Massieux の支援に感謝する。編集者は、 Bernard Aboba、Taylor Brandstetter、Henrik Boström、Jan-Ivar Bruaroey、Karthik Budigere、 Cullen Jennings、および Lennart Schulte の本仕様への貢献に感謝したい。

C. 参考文献

C.1 規範的参考文献

[API-DESIGN-PRINCIPLES]
Web Platform Design Principles. Martin Thomson; Jeffrey Yasskin. W3C. 18 September 2025. W3C Working Group Note. URL: https://www.w3.org/TR/design-principles/
[ECHO]
Digital network echo cancellers. ITU-T G.168. ITU-T. Standard. URL: https://www.itu.int/rec/T-REC-G.168/en
[GETUSERMEDIA]
Media Capture and Streams. Cullen Jennings; Jan-Ivar Bruaroey; Henrik Boström; youenn fablet. W3C. 11 September 2025. CRD. URL: https://www.w3.org/TR/mediacapture-streams/
[HIGHRES-TIME]
High Resolution Time. Yoav Weiss. W3C. 7 November 2024. W3C Working Draft. URL: https://www.w3.org/TR/hr-time-3/
[IANA-DTLS-SRTP]
DTLS-SRTP Protection Profiles. IANA. URL: https://www.iana.org/assignments/srtp-protection/srtp-protection.xhtml
[IANA-MEDIA-TYPES]
Media Types. IANA. URL: https://www.iana.org/assignments/media-types/
[IANA-TLS-CIPHERS]
TLS Cipher Suite Registry. IANA. URL: https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-4
[infra]
Infra Standard. Anne van Kesteren; Domenic Denicola. WHATWG. Living Standard. URL: https://infra.spec.whatwg.org/
[ISO-29170-1:2017]
Information technology — Advanced image coding and evaluation. ISO. URL: https://www.iso.org/standard/63637.html
[RFC2119]
Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. March 1997. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc2119
[RFC3168]
The Addition of Explicit Congestion Notification (ECN) to IP. K. Ramakrishnan; S. Floyd; D. Black. IETF. September 2001. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc3168
[RFC3550]
RTP: A Transport Protocol for Real-Time Applications. H. Schulzrinne; S. Casner; R. Frederick; V. Jacobson. IETF. July 2003. Internet Standard. URL: https://www.rfc-editor.org/rfc/rfc3550
[RFC3611]
RTP Control Protocol Extended Reports (RTCP XR). T. Friedman, Ed.; R. Caceres, Ed.; A. Clark, Ed. IETF. November 2003. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc3611
[RFC3890]
A Transport Independent Bandwidth Modifier for the Session Description Protocol (SDP). M. Westerlund. IETF. September 2004. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc3890
[RFC4572]
Connection-Oriented Media Transport over the Transport Layer Security (TLS) Protocol in the Session Description Protocol (SDP). J. Lennox. IETF. July 2006. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc4572
[RFC4585]
Extended RTP Profile for Real-time Transport Control Protocol (RTCP)-Based Feedback (RTP/AVPF). J. Ott; S. Wenger; N. Sato; C. Burmeister; J. Rey. IETF. July 2006. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc4585
[RFC5104]
Codec Control Messages in the RTP Audio-Visual Profile with Feedback (AVPF). S. Wenger; U. Chandra; M. Westerlund; B. Burman. IETF. February 2008. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc5104
[RFC5226]
Guidelines for Writing an IANA Considerations Section in RFCs. T. Narten; H. Alvestrand. IETF. May 2008. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc5226
[RFC5245]
Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal for Offer/Answer Protocols. J. Rosenberg. IETF. April 2010. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc5245
[RFC5764]
Datagram Transport Layer Security (DTLS) Extension to Establish Keys for the Secure Real-time Transport Protocol (SRTP). D. McGrew; E. Rescorla. IETF. May 2010. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc5764
[RFC6184]
RTP Payload Format for H.264 Video. Y.-K. Wang; R. Even; T. Kristensen; R. Jesup. IETF. May 2011. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc6184
[RFC6347]
Datagram Transport Layer Security Version 1.2. E. Rescorla; N. Modadugu. IETF. January 2012. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc6347
[RFC6386]
VP8 Data Format and Decoding Guide. J. Bankoski; J. Koleszar; L. Quillio; J. Salonen; P. Wilkins; Y. Xu. IETF. November 2011. Informational. URL: https://www.rfc-editor.org/rfc/rfc6386
[RFC6464]
A Real-time Transport Protocol (RTP) Header Extension for Client-to-Mixer Audio Level Indication. J. Lennox, Ed.; E. Ivov; E. Marocco. IETF. December 2011. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc6464
[RFC7002]
RTP Control Protocol (RTCP) Extended Report (XR) Block for Discard Count Metric Reporting. A. Clark; G. Zorn; Q. Wu. IETF. September 2013. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc7002
[RFC7004]
RTP Control Protocol (RTCP) Extended Report (XR) Blocks for Summary Statistics Metrics Reporting. G. Zorn; R. Schott; Q. Wu, Ed.; R. Huang. IETF. September 2013. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc7004
[RFC7656]
A Taxonomy of Semantics and Mechanisms for Real-Time Transport Protocol (RTP) Sources. J. Lennox; K. Gross; S. Nandakumar; G. Salgueiro; B. Burman, Ed. IETF. November 2015. Informational. URL: https://www.rfc-editor.org/rfc/rfc7656
[RFC7675]
Session Traversal Utilities for NAT (STUN) Usage for Consent Freshness. M. Perumal; D. Wing; R. Ravindranath; T. Reddy; M. Thomson. IETF. October 2015. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc7675
[RFC8174]
Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words. B. Leiba. IETF. May 2017. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc8174
[RFC8829]
JavaScript Session Establishment Protocol (JSEP). J. Uberti; C. Jennings; E. Rescorla, Ed. IETF. January 2021. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc8829
[RFC8888]
RTP Control Protocol (RTCP) Feedback for Congestion Control. Z. Sarker; C. Perkins; V. Singh; M. Ramalho. IETF. January 2021. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc8888
[RFC9331]
The Explicit Congestion Notification (ECN) Protocol for Low Latency, Low Loss, and Scalable Throughput (L4S). K. De Schepper; B. Briscoe, Ed. IETF. January 2023. Experimental. URL: https://www.rfc-editor.org/rfc/rfc9331
[STUN-PATH-CHAR]
Discovery of path characteristics using STUN. T. Reddy; D. Wing; P. Martinsen; V. Singh. IETF. Internet Draft. URL: https://datatracker.ietf.org/doc/html/draft-reddy-tram-stun-path-data
[WEBIDL]
Web IDL Standard. Edgar Chen; Timothy Gu. WHATWG. Living Standard. URL: https://webidl.spec.whatwg.org/
[WEBRTC]
WebRTC: Real-Time Communication in Browsers. Cullen Jennings; Jan-Ivar Bruaroey; Henrik Boström; Florent Castelli. W3C. 13 March 2025. W3C Recommendation. URL: https://www.w3.org/TR/webrtc/
[WEBRTC-IDENTITY]
Identity for WebRTC 1.0. Cullen Jennings; Martin Thomson. W3C. 27 September 2018. W3C Candidate Recommendation. URL: https://www.w3.org/TR/webrtc-identity/
[WEBRTC-PRIORITY]
WebRTC Priority Control API. Harald Alvestrand. W3C. 18 March 2021. W3C Candidate Recommendation. URL: https://www.w3.org/TR/webrtc-priority/
[XRBLOCK-STATS]
RTCP XR Metrics for WebRTC. Varun Singh; Rachel Huang; Roni Even; Dan Romascanu; Lingli Deng. IETF. Internet Draft. URL: https://datatracker.ietf.org/doc/html/draft-ietf-xrblock-rtcweb-rtcp-xr-metrics

C.2 参考情報的参考文献

[RFC2032]
RTP Payload Format for H.261 Video Streams. T. Turletti; C. Huitema. IETF. October 1996. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc2032
[RFC4587]
RTP Payload Format for H.261 Video Streams. R. Even. IETF. August 2006. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc4587