クライアントの観測可能性:Linux

Vonage Video SDKは、ほとんどのユースケースで推奨される高レベルの統計APIを通じて、詳細なストリーム品質メトリクスを公開します。このAPIは、音声、ビデオ、ネットワーク、および送信者側の統計を、ピア接続の遷移をまたいで安定したまま、統一されたセッション認識形式で提供します。高度なデバッグのために、SDKは未処理のピア接続データを反映する生のWebRTC統計レポートへのアクセスも提供します。

音声・ビデオ統計API

Vonage Video Linux SDKは、パブリッシャーとサブスクライバーの両方に対して、オーディオとビデオのネットワーク統計を定期的に送信します。これらには、パケット数、ビットレート、フレームレートデータ、一時停止/フリーズメトリクス、コーデック情報、およびオプションの送信側ネットワーク推定が含まれます。

統計は以下の方法で配信される:

  • otc_publisher_callbacks - パブリッシャー側の統計

  • otc_subscriber_callbacks - 加入者側の統計

それを受け取るには、パブリッシャーかサブスクライバーで適切なコールバックを有効にしてください。

パブリッシャー向け統計の有効化

の on_audio_stats() および on_video_stats() コールバック関数を使用する。 otc_publisher_callbacks を使うことで、パブリッシャーのストリームの統計情報を監視することができます。 パブリッシャーのオーディオとビデオの統計情報を定期的に報告する コールバックメソッドを登録するには を設定します。 on_audio_stats() そして on_video_stats() コールバック関数 を初期化するときに otc_publisher_callbacks 出版社が使用する パブリッシャーが使用する

登録 otc_publisher_callbacks 構造体はパブリッシャー作成時に作成されます:

struct otc_publisher_callbacks pub_callbacks;
pub_callbacks.on_audio_stats = handle_publisher_audio_stats;
pub_callbacks.on_video_stats = handle_publisher_video_stats;
pub_callbacks.on_video_quality_changed = handle_publisher_quality_change;

そしてコールバックを実装する:

void handle_publisher_audio_stats(otc_publisher* publisher,
                                  void* user_data,
                                  struct otc_publisher_audio_stats audio_stats[],
                                  size_t number_of_stats) {
    printf("Audio bytes sent: %lld\n", (long long)audio_stats[0].bytes_sent);
}

void handle_publisher_video_stats(otc_publisher* publisher,
                                  void* user_data,
                                  struct otc_publisher_video_stats video_stats[],
                                  size_t number_of_stats) {
    printf("Video packets sent: %lld\n", (long long)video_stats[0].packets_sent);
}

これらのコールバック関数は定期的に呼び出され、パブリッシャーの音声と映像の統計情報を報告します。 を報告します。各関数には以下のものが渡されます:へのポインタ 出版社 構造体、 へのポインタ。 ユーザーデータ パブリッシャーに設定した 統計情報の配列と、その配列に含まれる統計情報の数。stats パラメータ は OTC_PUBLISHER_AUDIO_STATS そして OTC_PUBLISHER_VIDEO_STATS 構造体パブリッシャーが ルーティングされたセッション( オープントーク メディア・ルーター) の統計情報を定義する 1 つのオブジェクトが含まれます。 の統計情報を定義します。 中継セッションの場合、配列には公開ストリームの加入者ごとのオブジェクトが含まれます。 オブジェクトが含まれる。

パブリッシャーでのビデオ品質イベントの受信

パブリッシャービデオクオリティのイベント用:

void handle_publisher_quality_change(otc_publisher* publisher,
                                     void* user_data,
                                     const struct otc_publisher_video_stats* stats,
                                     enum otc_video_reason reason) {
    printf("Publisher video quality event: %d\n", reason);
}

購読者の統計を有効にする

の on_audio_stats() および on_video_stats() コールバック関数を使用する。 otc_subscriber_callbacks を使用して、加入者のストリームの統計を監視する。

登録 otc_subscriber_callbacks サブスクライバを作成するときに

struct otc_subscriber_callbacks sub_callbacks;
sub_callbacks.on_audio_stats = handle_subscriber_audio_stats;
sub_callbacks.on_video_stats = handle_subscriber_video_stats;
sub_callbacks.on_video_quality_changed = handle_subscriber_quality_change;

otc_subscriber* subscriber = otc_subscriber_new(stream, sub_callbacks, user_data);

コールバックを実装する:

void handle_subscriber_audio_stats(otc_subscriber* subscriber,
                                   void* user_data,
                                   struct otc_subscriber_audio_stats audio_stats) {
    printf("Audio packets received: %llu\n", audio_stats.packets_received);
}

void handle_subscriber_video_stats(otc_subscriber* subscriber,
                                   void* user_data,
                                   struct otc_subscriber_video_stats video_stats) {
    printf("Video bytes received: %llu\n", video_stats.bytes_received);
}

加入者のビデオ品質イベントの受信

パブリッシャービデオクオリティのイベント用:

void handle_subscriber_quality_change(otc_subscriber* subscriber,
                                      void* user_data,
                                      const struct otc_subscriber_video_stats* stats,
                                      enum otc_video_reason reason) {
    printf("Subscriber video quality event: %d\n", reason);
}

統計データ構造

このセクションでは、C SDK オーディオ/ビデオ統計 API が提供する構造体とフィールドの概要を説明します。すべての Video SDK プラットフォームが同じ統計セットを公開していますが、各プラットフォームで個々のフィールドの構造や名前の付け方に若干の違いがある場合があります。これらの違いは、基本的なメトリクスの違いではなく、プラットフォーム固有の SDK 設計規約を反映しています。

otc_transport_stats

共有トランスポートレベルの推定を表す。

  • connection_estimated_bandwidth - 推定利用可能接続帯域幅(bps)

otc_publisher_video_stats

パブリッシャーのビデオトラックに関する統計を提供します:

  • connection_id - リレーセッションにおいて、ストリームを購読しているクライアントのコネクションID。
  • subscriber_id - リレーセッションにおいて、ストリームにサブスクライブしているクライアントのサブスクライバーIDは、以下のようになる。
  • packets_lost - 失われたビデオパケットの推定値
  • packets_sent - ビデオパケット送信
  • bytes_sent - ビデオ・バイトの送信
  • timestamp - ミリ秒単位のUnixタイムスタンプ
  • start_time - Unixエポックからのミリ秒単位のタイムスタンプ。
  • video_layers - ビデオレイヤーの統計情報の配列 (otc_publisher_video_layer_stats を参照ください)。
  • transport - この出版社の輸送統計

otc_publisher_audio_stats

パブリッシャーのオーディオトラックに関する統計を提供します:

  • connection_id - リレーセッションにおいて、ストリームを購読しているクライアントのコネクションID。
  • subscriber_id - リレーされたセッションでは、加入者ID
  • packets_lost - 失われたオーディオパケットの推定値
  • packets_sent - オーディオパケット送信
  • bytes_sent - オーディオ・バイトの送信
  • timestamp - ミリ秒単位のUnixタイムスタンプ
  • start_time - Unixエポックからのミリ秒単位のタイムスタンプ。
  • transport - この出版社の輸送統計

otc_publisher_video_layer_stats

1つのサイマルキャストまたはSVCレイヤーを表す:

  • width - 符号化フレーム幅
  • height - エンコードされたフレームの高さ
  • encoded_frame_rate - エンコードfps
  • bitrate - レイヤービットレート(bps)
  • total_bitrate - RTPオーバーヘッドを含むレイヤービットレート(bps)
  • scalability_mode - SVC/スケーラビリティ記述子(例:「L3T3)
  • quality_limitation_reason - 品質制限の理由(帯域幅、CPU、コーデック、解像度、レイヤーの変更)
  • codec - このビデオレイヤーに使用されているコーデック

otc_subscriber_video_stats

加入者のビデオトラックに関する統計を提供する:

  • packets_lost - 失われたビデオパケットの推定値
  • packets_received - ビデオパケット受信
  • bytes_received - ビデオ・バイト受信
  • timestamp - ミリ秒単位のUnixタイムスタンプ
  • sender_connection_max_allocated_bitrate - オプションの送信側最大ビットレート
  • sender_connection_estimated_bandwidth - オプションの送信側推定帯域幅
  • width - デコードされたフレーム幅(ピクセル
  • height - デコードされたフレームの高さ(ピクセル
  • decoded_frame_rate - デコード・フレーム/秒
  • bitrate - ビデオビットレート(bps)
  • total_bitrate - RTPオーバーヘッドを含むビットレート(bps)
  • pause_count - ポーズ数(最後のフレームから5秒以上)
  • total_pauses_duration - 全休止時間 (ms)
  • freeze_count - フリーズ回数
  • total_freezes_duration - 合計フリーズ時間(ms)
  • codec - 現在のデコーダー・コーデック

otc_subscriber_audio_stats

加入者のオーディオトラックに関する統計情報を提供します:

  • packets_lost - 失われたパケットの推定値
  • packets_received - 受信パケット
  • bytes_received - 受信バイト数
  • audio_level - オーディオレベル (0-1.0)
  • timestamp - ミリ秒単位のUnixタイムスタンプ
  • sender_connection_max_allocated_bitrate - オプションの送信側最大ビットレート
  • sender_connection_estimated_bandwidth - オプションの送信側推定帯域幅

送信側

参照 送信側統計の概要.

送信側統計の有効化

送信者側の統計情報は、購読者が受け取る。送信者側の統計情報を受け取るには、ストリームのパブリッシャーに対して以下をコールして有効にします。 otc_publisher_settings_set_sender_stats_track() 関数を実行してからパブリッシャーを構築してください:

otc_publisher_settings* settings = otc_publisher_settings_new();
otc_publisher_settings_set_sender_stats_track(settings, OTC_TRUE);

otc_publisher* publisher = otc_publisher_new_with_settings( &publisher_callbacks, settings);

送信者統計トラックが有効でない場合、送信者統計チャンネルはこのパブリッシャーには発行されません。デフォルト値は OTC_FALSE.

送信側統計の購読

購読者のビデオまたはオーディオ統計コールバックに登録し、パブリッシャーが送信している場合、購読者は自動的に送信者統計を受信します。

統計イベントの受信

送信者側の統計は、既存の購読者統計コールバックの一部として配信される。特定のフィールドは otc_subscriber_video_stats そして otc_subscriber_audio_stats の構造を持つ:

  • sender_connection_max_allocated_bitrate - 接続時に推定可能な最大ビットレート
  • sender_connection_estimated_bandwidth - 接続の現在の推定帯域幅

これらの2つのメトリクスは、オーディオ・ビデオ・バンドルごとに計算されるため、ビデオとオーディオの両方の統計に同じ値が表示されます。個々のトラックではなくトランスポートを反映するため、メトリクスはオーディオとビデオの両方で共有されます。

void handle_subscriber_video_stats(otc_subscriber* subscriber,
                                   void* user_data,
                                   struct otc_subscriber_video_stats stats) {
    printf("Timestamp: %llu ms\n", (unsigned long long)stats.timestamp);
    printf("Connection max allocated bitrate: %lld bps\n", (long long)stats.sender_connection_max_allocated_bitrate);
    printf("Connection estimated bandwidth: %lld bps\n", (long long)stats.sender_connection_estimated_bandwidth);
}

RTC統計レポート

パブリッシャーの低レベルのピア接続統計を取得するには otc_publisher_get_rtc_stats_report() 関数を使用します。これはメディアストリームのRTC統計レポートを提供する。これは非同期操作である。この操作は非同期操作である。 otc_publisher_rtc_stats_report_cb struct に渡す。 otc_publisher_set_rtc_stats_report_cb 関数を呼び出す前に otc_publisher_get_rtc_stats_report().統計が利用可能になると otc_publisher_rtc_stats_report_cb.on_rtc_stats_report() コールバック関数が呼び出される。この関数には stats の配列へのポインタである。 otc_publisher_rtc_stats 構造体を含む。この構造体には json_array_of_reports プロパティを使用します。これはRTC統計レポートのJSON配列で、ウェブブラウザで実装されているRtcStatsReportオブジェクトのフォーマットに似ています( Mozillaのドキュメント).

サブスクライバの低レベルのピア接続統計を取得するには、以下のようにします。 より詳細なストリーム統計を取得するには otc_subscriber_get_rtc_stats_report() 関数を使用する。これはメディアストリームのRTC統計レポートを提供する。

これは非同期操作である。これは非同期操作である。 otc_subscriber_rtc_stats_report_cb 構造体に渡す。 otc_subscriber_set_rtc_stats_report_cb 関数を呼び出す前に otc_subscriber_get_rtc_stats_report().統計が利用可能になると otc_subscriber_rtc_stats_report_cb.on_rtc_stats_report コールバック関数が呼び出される。

このコールバック関数には json_array_of_reports パラメータで指定します。これはRTC統計レポートのJSON配列で、ウェブブラウザで実装されているRtcStatsReportオブジェクトのフォーマットに似ている( Mozillaのドキュメント).

こちらも参照 このW3Cドキュメント.