音声フォールバックAPIを使用して、ネットワーク品質に応じて音声を動的に優先させる。

注釈 について otc_publisher_set_audio_fallback_enabled() そして otc_publisher_get_audio_fallback_enabled() 関数は非推奨となります。今後は otc_publisher_settings_set_publisher_audio_fallback_enabled そして otc_publisher_settings_set_subscriber_audio_fallback_enabled その代わりだ。

Enabling and disabling audio-only fallback

パブリッシャーオーディオのフォールバックを有効にするには otc_publisher_settings_set_publisher_audio_fallback_enabled() 関数である。

// Enable publisher audio fallback
otc_publisher_settings publisher_settings = otc_publisher_settings_new();
otc_publisher_settings_set_publisher_audio_fallback_enabled(publisher_settings, OTC_TRUE);
otc_publisher_callbacks publisher_callbacks = {0};
struct otc_publisher* publisher = otc_publisher_new_with_settings(&publisher_callbacks, publisher_settings);

// Enable publisher audio fallback and disable subscriber audio fallback
otc_publisher_settings publisher_settings = otc_publisher_settings_new();
otc_publisher_settings_set_publisher_audio_fallback_enabled(publisher_settings, OTC_TRUE);
otc_publisher_settings_set_subscriber_audio_fallback_enabled(publisher_settings, OTC_FALSE);
otc_publisher_callbacks publisher_callbacks = {0};
struct otc_publisher* publisher = otc_publisher_new_with_settings(&publisher_callbacks, publisher_settings);

// Enable subscriber audio fallback and disable publisher audio fallback
otc_publisher_settings publisher_settings = otc_publisher_settings_new();
otc_publisher_settings_set_publisher_audio_fallback_enabled(publisher_settings, OTC_FALSE);
otc_publisher_settings_set_subscriber_audio_fallback_enabled(publisher_settings, OTC_TRUE);
otc_publisher_callbacks publisher_callbacks = {0};
struct otc_publisher* publisher = otc_publisher_new_with_settings(&publisher_callbacks, publisher_settings);

ストリームの全サブスクライバに対して)サブスクライバ音声フォールバックを有効/無効にするには otc_publisher_settings_set_subscriber_audio_fallback_enabled() 関数を使用します。サブスクライバー・オーディオのフォールバックは、ルーティングされたセッションでのみサポートされます。 ビデオ・メディア・ルーター).加入者音声フォールバックは、カメラのビデオソースを持つストリームでデフォルトで有効です(ルーティングされたセッションで)。

Audio fallback events

パブリッシャーオーディオのフォールバックが有効になっている場合、コールバック関数は otc_publisher_callbacks struct は、パブリッシャーオーディオのフォールバック関連のイベントに対して呼び出されます:

  • otc_publisher_callbacks.on_video_disable_warning() - ストリームの品質が低下したとパブリッシャーが判断したときに呼び出され、品質がさらに低下した場合は動画が無効になります。

  • otc_publisher_callbacks.on_video_disable_warning_lifted() - パブリッシャーが、ストリームの品質が改善され、無効になっている動画が直ちに危険にさらされることはないと判断した場合に呼び出されます。

  • otc_publisher_callbacks.on_video_disabled() - ストリームの品質が低下し、送信ビデオ・トランスポートが無効になったとパブリッシャが判断した場合に呼び出されます。注: 動画が無効になっても、パブリッシャはパブリッシング・クライアントの UI にパブリッシャの動画(カメラ画像など)を表示します。

  • otc_publisher_callbacks.on_video_enabled() - パブリッシャーがストリームの品質が向上し、送信ビデオ・トランスポートが再有効化されたと判断したときに、理由 "quality" で呼び出される。 たとえば、以下のコードは関連イベントを処理します(独自のユーザー インターフェイス通知を提供できるようにします):

static void on_video_disable_warning(otc_publisher* publisher,
                                     void* user_data) {
  // Custom action — for example, add custom UI notification
}

static void on_video_disable_warning_lifted(otc_publisher* publisher,
                                            void* user_data) {
  // Custom action — for example, remove custom UI notification
}

static void on_video_disabled(otc_publisher* publisher,
                              void* user_data,
                              enum otc_video_reason reason) {
  // Custom action — for example, add custom UI notification
}

static void on_video_enabled(otc_publisher* publisher,
                             void* user_data,
                             enum otc_video_reason reason) {
  // Custom action — for example, remove custom UI notification
}


struct otc_publisher_callbacks publisher_callbacks = {0};
publisher_callbacks.on_video_disable_warning = on_video_disable_warning;
publisher_callbacks.on_video_disable_warning_lifted = on_video_disable_warning_lifted;
publisher_callbacks.on_video_disabled = on_video_disabled;
publisher_callbacks.on_video_enabled = on_video_enabled;

加入者の観点からは、以下のイベントはオーディオのフォールバックが発生したことを示す。これらのイベントは サブスクライバーの観点からは、以下のイベントは、オーディオのフォールバッ クが発生したことを示す。言い換えれば パブリッシャーとサブスクライバーのオーディオのフォールバックの違いは、パブリッシャー の場合、パブリッシングクライアントが、それ自身のストリームに基づいてオーディオ のフォールバックをトリガーする可能性がある、ということである。 そのため、追加のパブリッシャー側イベントがディスパッチされる。サブスクライバー・オーディオ フォールバックの場合、Vonage Video Media Router は加入者に影響するネットワークの劣化を評価します。どちらの場合も、パブリッシャーまたは サブスクライバーオーディオのフォールバックが発生すると、サブスクライバーイベントが常にディスパッチされ、レシーバーでオーディオのフォールバックが発生したことを示します。

オーディオのフォールバックが発生すると、コールバック関数は otc_subscriber_callbacks struct は、サブスクライバーのオーディオフォールバック関連のイベントに対して呼び出される:

  • otc_subscriber_callbacks.on_video_disable_warning() - ストリームの画質が劣化したと判断されたときに呼び出され、画質がさらに劣化した場合は動画が無効化される。
  • otc_subscriber_callbacks.on_video_disable_warning_lifted() - ストリームの品質が、無効化されている動画が直ちに危険でない程度まで改善されたと判断された場合に呼び出される。
  • otc_subscriber_callbacks.on_video_disabled() - ストリームの品質が低下し、送信ビデオ・トランスポートが無効になったと判断された場合に呼び出されます。注:ビデオが無効になっている間も、サブスクライバはパブリッシング・クライアントの UI にサブスクライバのビデオ(カメラ画像など)を表示します。
  • otc_subscriber_callbacks.on_video_enabled() - ストリームの品質が向上し、送信ビデオトランスポートが再度有効になったと判断されたとき、理由「quality」で呼び出される。

例えば、以下のコードは関連イベントを処理します(独自のユーザーインターフェース通知を提供できるようにします):

static void on_video_disable_warning(otc_subscriber* subscriber,
                                     void* user_data) {
  // Custom action — for example, add custom UI notification
}

static void on_video_disable_warning_lifted(otc_subscriber* subscriber,
                                            void* user_data) {
  // Custom action — for example, remove custom UI notification
}

static void on_video_disabled(otc_subscriber* subscriber,
                              void* user_data,
                              enum otc_video_reason reason) {
  // Custom action — for example, add custom UI notification
}

static void on_video_enabled(otc_subscriber* subscriber,
                             void* user_data,
                             enum otc_video_reason reason) {
  // Custom action — for example, remove custom UI notification
}

struct otc_subscriber_callbacks subscriber_callbacks = {0};
subscriber_callbacks.on_video_disable_warning = on_video_disable_warning;
subscriber_callbacks.on_video_disable_warning_lifted = on_video_disable_warning_lifted;
subscriber_callbacks.on_video_disabled = on_video_disabled;
subscriber_callbacks.on_video_enabled = on_video_enabled;