Utiliza la API de audio de reserva para priorizar dinámicamente el audio en función de la calidad de la red.

Notas: En otc_publisher_set_audio_fallback_enabled() y otc_publisher_get_audio_fallback_enabled() quedarán obsoletas. Utilice las funciones otc_publisher_settings_set_publisher_audio_fallback_enabled y otc_publisher_settings_set_subscriber_audio_fallback_enabled en su lugar.

Enabling and disabling audio-only fallback

Para habilitar la opción de audio alternativa del editor, llama a la función otc_publisher_settings_set_publisher_audio_fallback_enabled() función.

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

Para activar y desactivar la opción de audio alternativo para los suscriptores (para todos los suscriptores de la transmisión), llama a la función otc_publisher_settings_set_subscriber_audio_fallback_enabled() función. El audio fallback de abonado sólo se admite en sesiones enrutadas (sesiones que utilizan la función Router multimedia de vídeo de Vonage). El audio fallback de abonado está activado por defecto (en sesiones enrutadas) para flujos con una fuente de vídeo de cámara.

Audio fallback events

Cuando está activada la función de retorno de audio del editor, las funciones de retorno de llamada de la aplicación otc_publisher_callbacks Se invocan las estructuras para los eventos relacionados con el sistema de reserva de audio del editor:

  • otc_publisher_callbacks.on_video_disable_warning() - Se activa cuando el Editor determina que la calidad del flujo se ha degradado y el vídeo se desactivará si la calidad se degrada más.

  • otc_publisher_callbacks.on_video_disable_warning_lifted() — Se activa cuando el editor determina que la calidad de la transmisión ha mejorado hasta el punto de que el vídeo que se va a desactivar ya no supone un riesgo inmediato.

  • otc_publisher_callbacks.on_video_disabled() — Se invoca cuando el editor determina que la calidad de la transmisión se ha deteriorado y se ha desactivado el transporte de vídeo saliente. Nota: aunque el vídeo esté desactivado, el editor sigue mostrando el vídeo del editor (como la imagen de la cámara) en la interfaz de usuario del cliente de publicación.

  • otc_publisher_callbacks.on_video_enabled() — Se denomina «calidad» cuando el editor determina que la calidad de la transmisión ha mejorado y se ha reactivado el transporte de vídeo saliente. Por ejemplo, el siguiente código gestiona los eventos relacionados (para que puedas proporcionar tus propias notificaciones en la interfaz de usuario):

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;

Desde la perspectiva del abonado, los siguientes eventos indican que se ha producido un fallo de audio. Aunque estos eventos están vinculados al abonado, pueden ocurrir tanto debido al fallback de audio del abonado como a consecuencia del fallback de audio del editor. En otras palabras la diferencia entre el fallback de audio del editor y del suscriptor es que, en el caso del editor, el cliente de publicación puede activar el fallback de audio basado en su propio flujo. audio fallback basándose en la degradación de su propio flujo, razón por la cual se envían eventos adicionales del lado del editor. Para la recuperación de audio del suscriptor del suscriptor, el enrutador de medios de video de Vonage evalúa la degradación de la red que afecta al suscriptor. En ambos casos, en caso de audio del editor o del suscriptor, siempre se envían eventos del suscriptor para indicar que se ha producido una caída de audio para el receptor.

Cuando se produce un cambio de audio, las funciones de llamada de retorno en el otc_subscriber_callbacks para los eventos relacionados con la caída de audio de los abonados:

  • otc_subscriber_callbacks.on_video_disable_warning() — Se activa cuando se detecta que la calidad de la transmisión se ha deteriorado y el vídeo se desactivará si la calidad sigue empeorando.
  • otc_subscriber_callbacks.on_video_disable_warning_lifted() - Llamada cuando se determina que la calidad del flujo ha mejorado hasta el punto en que el vídeo desactivado no supone un riesgo inmediato.
  • otc_subscriber_callbacks.on_video_disabled() — Se invoca cuando se determina que la calidad de la transmisión se ha deteriorado y se ha desactivado el transporte de vídeo de salida. Nota: aunque el vídeo esté desactivado, el suscriptor sigue mostrando el vídeo del suscriptor (como la imagen de la cámara) en la interfaz de usuario del cliente de publicación.
  • otc_subscriber_callbacks.on_video_enabled() - Llamada con motivo "calidad" cuando se determina que la calidad del flujo ha mejorado y se ha vuelto a habilitar el transporte de vídeo saliente.

Por ejemplo, el siguiente código gestiona los eventos relacionados (para que pueda proporcionar sus propias notificaciones de interfaz de usuario):

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;