クライアントの観測可能性:ウィンドウズ
Vonage Video SDKは、ほとんどのユースケースで推奨される高レベルの統計APIを通じて、詳細なストリーム品質メトリクスを公開します。このAPIは、音声、ビデオ、ネットワーク、および送信者側の統計を、ピア接続の遷移をまたいで安定したまま、統一されたセッション認識形式で提供します。高度なデバッグのために、SDKは未処理のピア接続データを反映する生のWebRTC統計レポートへのアクセスも提供します。
音声・ビデオ統計API
Vonage Video Windows SDKは、パブリッシャーとサブスクライバーの両方に対して、オーディオとビデオのネットワーク統計を定期的に送信します。これらには、パケット数、ビットレート、フレームレートデータ、一時停止/フリーズメトリクス、コーデック情報、およびオプションの送信側ネットワーク推定が含まれます。
統計は以下のイベントを通じて配信される:
Publisher.AudioStatsUpdated- 出版社側のオーディオ統計Publisher.VideoStatsUpdated- パブリッシャー側の動画統計Publisher.VideoQualityChanged- パブリッシャービデオ画質変更通知Subscriber.AudioStatsUpdated- 加入者側のオーディオ統計Subscriber.VideoStatsUpdated- 加入者側のビデオ統計Publisher.VideoQualityChanged- 加入者ビデオ画質変更通知
それを受け取るには、パブリッシャーかサブスクライバーに適切な イベントハンドラを設定してください。
パブリッシャー向け統計の有効化
に対応するイベントハンドラを設定する。 Publisher.AudioStatsUpdated そして Publisher.VideoStatsUpdated:
publisher.AudioStatsUpdated += (sender, args) =>
{
foreach (var stat in args.Stats)
{
Console.WriteLine($"Audio bytes sent: {stat.BytesSent}");
}
};
publisher.VideoStatsUpdated += (sender, args) =>
{
foreach (var stat in args.Stats)
{
Console.WriteLine($"Video packets sent: {stat.PacketsSent}");
}
};
これらのイベントは、パブリッシャーのオーディオとビデオの統計情報を報告するために定期的に送られます。
これらのイベントハンドラは オーディオネットワーク統計
そして ビデオネットワーク統計
各メソッドには2つのオブジェクトが渡されます。
オブジェクトの配列です。ルーティングされたセッションのパブリッシャー( オープントーク
メディア・ルーター) の統計情報を定義する 1 つのオブジェクトが含まれます。
の統計情報を定義します。
中継セッションの場合、配列には公開ストリームの加入者ごとのオブジェクトが含まれます。
オブジェクトが含まれる。
パブリッシャーでのビデオ品質イベントの受信
ビデオ画質イベントにも興味がある場合は、このハンドラを実装してください:
publisher.VideoQualityChanged += (sender, args) =>
{
Console.WriteLine($"Publisher video quality changed: {args.Reason}");
};
購読者の統計を有効にする
に対応するイベントハンドラを設定する。 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.VideoQualityChanged += (sender, args) =>
{
Console.WriteLine($"Subscriber video quality event: {args.Reason}");
};
統計データ構造
このセクションでは、Windows Video SDK オーディオ/ビデオ統計 API が提供する構造体とフィールドの概要を説明します。すべての Video SDK プラットフォームが同じ統計情報セットを公開していますが、各プラットフォームで個々のフィールドの構造や名前の付け方に若干の違いがある場合があります。これらの違いは、基本的なメトリックの違いではなく、プラットフォーム固有の SDK 設計規約を反映しています。
TransportStats
トランスポートレベルの帯域幅推定を表す。
ConnectionEstimatedBandwidth- 推定利用可能アップリンク帯域幅(bps)
Publisher.AudioNetworkStats
パブリッシャーのオーディオトラックに関する統計を提供します。
ConnectionId- 加入者接続ID(中継のみ)SubscriberId- 加入者ID(中継のみ)PacketsLost- 失われたオーディオパケットの合計PacketsSent- 送信されたオーディオ・パケットの合計BytesSent- 送信されたオーディオ・バイトの合計Timestamp- 統計が収集されたタイムスタンプ (ms)StartTime- 累計開始のタイムスタンプ(ms)Transport- トランスポートレベルの統計(TransportStats)
Publisher.VideoNetworkStats
パブリッシャーのビデオトラックに関する統計を提供します。
ConnectionId- 加入者接続ID(中継のみ)SubscriberId- 加入者ID(中継のみ)PacketsLost- ビデオパケットの損失PacketsSent- ビデオパケット送信BytesSent- ビデオ・バイトの送信Timestamp- 統計が収集されたタイムスタンプStartTime- 累積集計開始のタイムスタンプVideoLayers- サイマルキャスト/SVCレイヤーのリスト(VideoLayerStats)Transport- 輸送レベルの統計
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- デコーダー・コーデック
送信側統計
参照 送信側統計の概要.
送信側統計の有効化
送信者側の統計情報は、購読者が受け取る。送信者側の統計を受け取るには、ストリームのパブリッシャーで HasSenderStatsTrack プロパティ true パブリッシャーを構築する際に
var publisherBuilder = new Publisher.Builder()
{
HasSenderStatsTrack = true
};
Publisher publisher = publisherBuilder.Build();
もし HasSenderStatsTrack が有効でない場合、このパブリッシャーに対して送信者統計チャンネルは発行されません。デフォルト値は false.
送信側統計の購読
サブスクライバーが自動的に送信者統計を受け取るのは、パブリッシャーが送信者統計 を有効にしていて、サブスクライバーがネットワーク統計イベントのリスナーを登録している 場合だけである。
統計イベントの受信
送信側の統計は VideoStatsUpdated そして AudioStatsUpdated ビデオとオーディオのイベント。その SenderStats クラスに含まれている。 VideoNetworkStatsEventArgs そして AudioNetworkStatsEventArgsの2つのプロパティを提供する:
ConnectionMaxAllocatedBitrate- 接続時に推定可能な最大ビットレートConnectionEstimatedBandwidth- 接続の現在の推定帯域幅
これらの2つのメトリクスは、オーディオ・ビデオ・バンドルごとに計算されるため、ビデオとオーディオの両方の統計に同じ値が表示されます。個々のトラックではなくトランスポートを反映するため、メトリクスはオーディオとビデオの両方で共有されます。
statsイベント・ハンドラの内部では、オプションの SenderStats 財産である:
subscriber.VideoStatsUpdated += (sender, stats) =>
{
if (stats.SenderStats != null)
{
Console.WriteLine($"Connection max allocated bitrate: {stats.SenderStats.ConnectionMaxAllocatedBitrate}");
Console.WriteLine($"Connection current estimated bandwidth: {stats.SenderStats.ConnectionEstimatedBandwidth}");
}
else
{
Console.WriteLine("Sender stats not available yet.");
}
};
を使ったオーディオ統計にも同じアプローチが適用される。 AudioStatsUpdated イベントを開催する。
RTC統計レポート
パブリッシャーの低レベルのピア接続統計を取得するには Publisher.GetRtcStatsReport() メソッドを使用します。これはメディアストリームのRTC統計レポートを提供する。これは非同期操作である。統計情報が利用可能になると、RtcStatsReportイベントが送信される。イベント RtcStatsReportArgs オブジェクトには PublisherRtcStats オブジェクトが含まれる。 JsonArrayOfReports プロパティを使用します。これはRTC統計レポートのJSON配列で、ウェブブラウザで実装されているRtcStatsReportオブジェクトのフォーマットに似ています( Mozillaのドキュメント).
加入者の低レベルのピア接続統計を取得するには Subscriber.GetRtcStatsReport() メソッドを使用します。これはメディアストリームのRTC統計レポートを提供する。
これは非同期操作である。統計が利用可能になると、RtcStatsReportイベントが送信される。イベント RtcStatsReportArgs オブジェクトには JsonArrayOfReports プロパティを使用します。これはRTC統計レポートのJSON配列で、ウェブブラウザで実装されているRtcStatsReportオブジェクトのフォーマットに似ています( Mozillaのドキュメント).
こちらも参照 このW3Cドキュメント.
パブリッシャーのRTC統計レポートを要求する:
publisher.RtcStatsReport += (sender, args) =>
{
foreach (var stat in args.stats)
{
Console.WriteLine(stat.JsonArrayOfReports); // Raw RTC JSON
}
};
publisher.GetRtcStatsReport();