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

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統計レポートを要求する: