クライアントの観測可能性: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- リレーされたセッションでは、加入者IDpackets_lost- 失われたオーディオパケットの推定値packets_sent- オーディオパケット送信bytes_sent- オーディオ・バイトの送信timestamp- ミリ秒単位のUnixタイムスタンプstart_time- Unixエポックからのミリ秒単位のタイムスタンプ。transport- この出版社の輸送統計
otc_publisher_video_layer_stats
1つのサイマルキャストまたはSVCレイヤーを表す:
width- 符号化フレーム幅height- エンコードされたフレームの高さencoded_frame_rate- エンコードfpsbitrate- レイヤービットレート(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ドキュメント.