クライアントの観測可能性:ウィンドウズ
Vonage Video SDKは、ほとんどのユースケースで推奨される高レベルの統計APIを通じて、詳細なストリーム品質メトリクスを公開します。このAPIは、音声、ビデオ、ネットワーク、および送信者側の統計を、ピア接続の遷移をまたいで安定したまま、統一されたセッション認識形式で提供します。高度なデバッグのために、SDKは未処理のピア接続データを反映する生のWebRTC統計レポートへのアクセスも提供します。
SDKはまた、パブリッシャーとサブスクライバーの両方に対して、接続の健全性をハイレベルで評価するネットワーク・コンディション・メトリクスを公開します。これらのメトリクスには、ネットワーク・コンディション・スコア、そのスコアの理由、およびサブスクライバについては、観察された問題の原因が接続のどちらにあるかを示すデグラデーション・ソースが含まれます。参照 ネットワークの状態と劣化の原因 詳細はこちら。
オーディオ、ビデオ、メディアリンク統計API
Vonage Video Windows SDKは、パブリッシャーとサブスクライバーの両方に対して、オーディオ、ビデオ、メディアリンクのネットワーク統計を定期的に送信します。これらには、パケット数、ビットレート、フレームレートデータ、一時停止/フリーズメトリクス、コーデック情報、およびオプションの送信側ネットワーク推定が含まれます。
統計は以下のイベントを通じて配信される:
Publisher.AudioStatsUpdated- 出版社側のオーディオ統計Publisher.VideoStatsUpdated- パブリッシャー側の動画統計Publisher.MediaLinkStatsUpdated- パブリッシャー側のメディアリンク統計(トランスポートメトリクス)Publisher.VideoQualityChanged- パブリッシャービデオ画質変更通知Publisher.NetworkConditionChanged- パブリッシャーネットワーク条件変更通知Subscriber.AudioStatsUpdated- 加入者側のオーディオ統計Subscriber.VideoStatsUpdated- 加入者側のビデオ統計Subscriber.MediaLinkStatsUpdated- 加入者側メディアリンク統計(トランスポート・メトリクス)Subscriber.VideoQualityChanged- 加入者ビデオ画質変更通知Subscriber.NetworkConditionChanged- 加入者ネットワーク状態変更通知
それを受け取るには、パブリッシャーかサブスクライバーに適切な イベントハンドラを設定してください。
パブリッシャー向け統計の有効化
に対応するイベントハンドラを設定する。 Publisher.AudioStatsUpdated そして Publisher.VideoStatsUpdated:
これらのイベントは、パブリッシャーのオーディオとビデオの統計情報を報告するために定期的に送られます。
これらのイベントハンドラは オーディオネットワーク統計
そして ビデオネットワーク統計
各メソッドには2つのオブジェクトが渡されます。
オブジェクトの配列です。ルーティングされたセッションのパブリッシャー( オープントーク
メディア・ルーター) の統計情報を定義する 1 つのオブジェクトが含まれます。
の統計情報を定義します。
中継セッションの場合、配列には公開ストリームの加入者ごとのオブジェクトが含まれます。
オブジェクトが含まれる。
パブリッシャーでのビデオ品質イベントの受信
ビデオ画質イベントにも興味がある場合は、このハンドラを実装してください:
パブリッシャーでのネットワーク状況イベントの受信
パブリッシャーのネットワーク状態変化イベントを受け取るには Publisher.NetworkConditionChanged イベントを開催する:
このイベントは、パブリッシャーに対してネットワーク状態の重大な変化が検出され たときにトリガーされる。ビデオとオーディオは同じトランスポートを共有しているため、このイベントはビデオとオーディオの両方の統計情報を提供する。
購読者の統計を有効にする
に対応するイベントハンドラを設定する。 Subscriber.AudioStatsUpdated そして Subscriber.VideoStatsUpdated:
subscriber.VideoStatsUpdated += (sender, stats) =>
{
Console.WriteLine($"Video bytes received: {stats.BytesReceived}");
};
subscriber.AudioStatsUpdated += (sender, stats) =>
{
Console.WriteLine($"Audio packets received: {stats.PacketsReceived}");
};
subscriber.MediaLinkStatsUpdated += (sender, args) =>
{
Console.WriteLine($"Local downlink bandwidth: {args.MediaLinkStats.Transport.ConnectionEstimatedBandwidth} bps");
if (args.MediaLinkStats.RemotePublisherTransport != null)
{
Console.WriteLine($"Remote publisher uplink bandwidth: {args.MediaLinkStats.RemotePublisherTransport.ConnectionEstimatedBandwidth} bps");
}
Console.WriteLine($"Degradation source: {args.MediaLinkStats.NetworkDegradationSource}");
};
加入者のビデオ品質イベントの受信
ビデオ画質イベントにも興味がある場合は、このハンドラを実装してください:
加入者のネットワーク状態イベントの受信
サブスクライバーのネットワーク条件変更イベントを受信するには、次のようにサブスクライブする。 Subscriber.NetworkConditionChanged イベントを開催する:
このイベントは、サブスクライバーまたはリモートパブリッシャーのネットワーク状 態の重大な変化が検出されたときにトリガーされる。それは、ローカルとリモートのトランスポートメトリッ クとともに、ビデオとオーディオの両方の統計情報を提供する。
統計データ構造
このセクションでは、Windows Video SDK オーディオ/ビデオ統計 API が提供する構造体とフィールドの概要を説明します。すべての Video SDK プラットフォームが同じ統計情報セットを公開していますが、各プラットフォームで個々のフィールドの構造や名前の付け方に若干の違いがある場合があります。これらの違いは、基本的なメトリクスの違いではなく、プラットフォーム固有の SDK の設計規約を反映しています。
利用可能な統計とそれが表すものについてのプラットフォームに依存しない説明については、以下を参照のこと。 顧客の観測可能性の概要.
TransportStats
トランスポート・レベルのメトリクスを表します。
ConnectionEstimatedBandwidth- 推定利用可能接続帯域幅(bps)Condition- 現在のネットワーク・コンディション・スコアNetworkCondition.Unknown,NetworkCondition.Critical,NetworkCondition.Warning,NetworkCondition.Fair,NetworkCondition.GoodあるいはNetworkCondition.Excellent)NetworkConditionReason- ネットワーク状況に影響を与える主な理由NetworkReason.None,NetworkReason.Unknown,NetworkReason.BandwidthあるいはNetworkReason.PacketLoss)
Publisher.AudioNetworkStats
パブリッシャーのオーディオトラックに関する統計を提供します。
ConnectionId- 加入者接続ID(中継のみ)SubscriberId- 加入者ID(中継のみ)PacketsLost- 失われたオーディオパケットの合計PacketsSent- 送信されたオーディオ・パケットの合計BytesSent- 送信されたオーディオ・バイトの合計Timestamp- 統計が収集されたタイムスタンプ (ms)StartTime- 累計開始のタイムスタンプ(ms)
Publisher.VideoNetworkStats
パブリッシャーのビデオトラックに関する統計を提供します。
ConnectionId- 加入者接続ID(中継のみ)SubscriberId- 加入者ID(中継のみ)PacketsLost- ビデオパケットの損失PacketsSent- ビデオパケット送信BytesSent- ビデオ・バイトの送信Timestamp- 統計が収集されたタイムスタンプStartTime- 累積集計開始のタイムスタンプVideoLayers- サイマルキャスト/SVCレイヤーのリスト(VideoLayerStats)
Publisher.VideoLayerStats
単一のサイマルキャストまたはSVCビデオレイヤーを表す。
Width- 符号化フレーム幅Height- エンコードされたフレームの高さEncodedFrameRate- エンコード・フレーム/秒Bitrate- レイヤービットレート(bps)TotalBitrate- RTPオーバーヘッドを含むビットレート(bps)ScalabilityMode- SVC/スケーラビリティの説明(例:「L3T3)QualityLimitationReason- 品質低下の理由Codec- このレイヤーに使用されているコーデック
Subscriber.AudioNetworkStatsEventArgs
加入者のオーディオトラックに関する統計情報を提供します。
PacketsLost- 失われたオーディオパケットの推定値PacketsReceived- 受信したオーディオ・パケットBytesReceived- 受信したオーディオ・バイトTimestamp- 統計が収集されたタイムスタンプSenderStats- 送信側ネットワーク推定(オプション)
Subscriber.VideoNetworkStatsEventArgs
加入者のビデオトラックに関する統計を提供する。
PacketsLost- ビデオパケットの損失PacketsReceived- ビデオパケット受信BytesReceived- ビデオ・バイト受信Timestamp- 統計が収集されたタイムスタンプSenderStats- 送信側ネットワーク推定(オプション)Width- デコードされたフレーム幅Height- デコードされたフレームの高さDecodedFrameRate- デコード・フレーム/秒Bitrate- ビデオビットレート(bps)TotalBitrate- RTPオーバーヘッドを含む総ビットレートPauseCount- ビデオの一時停止数(フレームなしで5秒以上)TotalPausesDuration- 全休止時間 (ms)FreezeCount- WebRTCで定義されたフリーズの数TotalFreezesDuration- 合計フリーズ時間(ms)Codec- デコーダー・コーデック
Publisher.PublisherMediaLinkStats
パブリッシャー接続のトランスポートレベルの統計情報を提供します。
Transport- この出版社の輸送統計TransportStats)
Subscriber.SubscriberMediaLinkStats
リモートパブリッシャーのネットワークパフォーマンスの可視性を含む、サブスクライバーの接続のトランスポートレベルの統計情報を提供します。これにより、アプリケーションは、接続の問題が加入者のダウンリンクに起因するのか、パブリッシャーのアップリンクに起因するのかを診断できます。
Transport- この加入者のダウンリンク接続のトランスポート統計(以下を参照。TransportStats)RemotePublisherTransport- リモートパブリッシャーのアップリンク接続のトランスポート統計(TransportStats).送信側統計が有効でない場合、制限されることがある。NetworkDegradationSource- ネットワーク劣化の原因があればそれを示す (NetworkDegradationSource.None,NetworkDegradationSource.Local,NetworkDegradationSource.RemoteあるいはNetworkDegradationSource.BothOrUnclear)
送信側統計
参照 送信側統計の概要.
送信側統計の有効化
送信者側の統計情報は、購読者が受け取る。送信者側の統計を受け取るには、ストリームのパブリッシャーで HasSenderStatsTrack プロパティ true パブリッシャーを構築する際に
もし HasSenderStatsTrack が有効でない場合、このパブリッシャーに対して送信者統計チャンネルは発行されません。デフォルト値は false.
送信側統計の受信
パブリッシャーが送信者側の統計情報を有効にしていれば、購読者は自動的に VideoStatsUpdated そして AudioStatsUpdated イベント 前述.その SenderStats の両方のプロパティを持つ。 VideoNetworkStatsEventArgs そして AudioNetworkStatsEventArgs は2つの指標を提供する:
ConnectionMaxAllocatedBitrate- 接続時に推定可能な最大ビットレートConnectionEstimatedBandwidth- 接続の現在の推定帯域幅
これらのメトリクスは、オーディオとビデオのバンドルごとに計算されるため、ビデオとオーディオの両方の統計に同じ値が表示されます。
ネットワークの状態と劣化の原因
SDKは、パブリッシャーとサブスクライバーの両方に対して、コンディションのスコア、そのスコアを駆動する理由、サブスクライバーの劣化ソースを含むリアルタイムのネットワーク・コンディション・メトリクスを提供します。ネットワーク・コンディション・モデル、スコア、理由、およびそれを有効にする方法の詳細については 顧客の観測可能性の概要.
ネットワーク・コンディション・データは2つのチャンネルから入手できる:
- 定期的な統計: について
Transportプロパティを含む。ConditionそしてNetworkConditionReason.加入者の統計も公開RemotePublisherTransportそしてNetworkDegradationSource.参照 統計構造 詳細はこちら。 - ネットワーク状態の変更イベント: 両国の専用イベント 出版社 そして 契約者 は、ネットワーク状態の重大な変化が検出されたときにトリガーされる。
以下の例では、加入者ネットワークの状態データを使用して、劣化の原因を特定する方法を示しています:
RTC統計レポート
パブリッシャーの低レベルのピア接続統計を取得するには Publisher.GetRtcStatsReport() メソッドを使用します。これはメディアストリームのRTC統計レポートを提供する。これは非同期操作である。統計情報が利用可能になると、RtcStatsReportイベントが送信される。イベント RtcStatsReportArgs オブジェクトには PublisherRtcStats オブジェクトが含まれる。 JsonArrayOfReports プロパティを使用します。これはRTC統計レポートのJSON配列で、ウェブブラウザで実装されているRtcStatsReportオブジェクトのフォーマットに似ています( Mozillaのドキュメント).
加入者の低レベルのピア接続統計を取得するには Subscriber.GetRtcStatsReport() メソッドを使用します。これはメディアストリームのRTC統計レポートを提供する。
これは非同期操作である。統計が利用可能になると、RtcStatsReportイベントが送信される。イベント RtcStatsReportArgs オブジェクトには JsonArrayOfReports プロパティを使用します。これはRTC統計レポートのJSON配列で、ウェブブラウザで実装されているRtcStatsReportオブジェクトのフォーマットに似ています( Mozillaのドキュメント).
こちらも参照 このW3Cドキュメント.
パブリッシャーのRTC統計レポートを要求する: