クライアントの観測可能性:ウィンドウズ

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();