Use a API de fallback de áudio para priorizar dinamicamente o áudio de acordo com a qualidade da rede.

Notas: O otc_publisher_set_audio_fallback_enabled() e otc_publisher_get_audio_fallback_enabled() essas funções serão descontinuadas. Por favor, use a otc_publisher_settings_set_publisher_audio_fallback_enabled e otc_publisher_settings_set_subscriber_audio_fallback_enabled em vez disso.

Enabling and disabling audio-only fallback

Para habilitar o recurso de fallback de áudio do editor, chame a função otc_publisher_settings_set_publisher_audio_fallback_enabled() função.

// 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 ativar e desativar o recurso de fallback de áudio dos assinantes (para todos os assinantes da transmissão), chame a função otc_publisher_settings_set_subscriber_audio_fallback_enabled() função. O fallback de áudio do assinante só é compatível em sessões roteadas (sessões que utilizam o Roteador de mídia de vídeo da Vonage). O recurso de fallback de áudio do assinante está ativado por padrão (em sessões roteadas) para transmissões com fonte de vídeo de câmera.

Audio fallback events

Quando o recurso de substituição de áudio do editor estiver ativado, as funções de retorno de chamada no otc_publisher_callbacks A estrutura é invocada para eventos relacionados ao fallback de áudio do editor:

  • otc_publisher_callbacks.on_video_disable_warning() — É chamado quando o Publisher determina que a qualidade da transmissão se deteriorou e que o vídeo será desativado caso a qualidade se deteriore ainda mais.

  • otc_publisher_callbacks.on_video_disable_warning_lifted() — Chamado quando o Publisher determina que a qualidade da transmissão melhorou a ponto de o vídeo que está sendo desativado não representar mais um risco imediato.

  • otc_publisher_callbacks.on_video_disabled() — É chamado quando o Publisher determina que a qualidade do stream se deteriorou e o transporte de vídeo de saída foi desativado. Observação: enquanto o vídeo estiver desativado, o Publisher continua exibindo o vídeo do Publisher (como a imagem da câmera) na interface do usuário do cliente de publicação.

  • otc_publisher_callbacks.on_video_enabled() — Denominado, com razão, como “qualidade” quando o Editor determina que a qualidade do stream melhorou e o transporte de vídeo de saída foi reativado. Por exemplo, o código a seguir lida com os eventos relacionados (para que você possa fornecer suas próprias notificações na interface do usuário):

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;

Do ponto de vista do assinante, os eventos a seguir indicam que ocorreu um fallback de áudio. Embora esses eventos estejam vinculados ao assinante, eles podem ocorrer tanto devido ao fallback de áudio do assinante quanto como consequência do fallback de áudio do editor. Em outras palavras, a diferença entre o fallback de áudio do editor e do assinante é que, no caso do editor, o cliente editor pode acionar o fallback de áudio com base na degradação de seu próprio fluxo, razão pela qual eventos adicionais do lado do editor são disparados. Para o fallback de áudio do assinante, o Vonage Video Media Router avalia a degradação da rede que afeta o assinante. Em ambos os casos, após o fallback de áudio do editor ou do assinante, eventos do assinante são sempre enviados para indicar que ocorreu um fallback de áudio para o receptor.

Quando ocorre um fallback de áudio, as funções de retorno de chamada no otc_subscriber_callbacks A estrutura é invocada para eventos relacionados ao fallback de áudio do assinante:

  • otc_subscriber_callbacks.on_video_disable_warning() — É chamado quando se constata que a qualidade da transmissão se deteriorou, e a transmissão será desativada caso a qualidade se deteriore ainda mais.
  • otc_subscriber_callbacks.on_video_disable_warning_lifted() — É chamado quando se constata que a qualidade da transmissão melhorou a ponto de o vídeo que está sendo desativado não representar mais um risco imediato.
  • otc_subscriber_callbacks.on_video_disabled() — Chamado quando se constata que a qualidade do stream se deteriorou e o transporte de vídeo de saída foi desativado. Observação: enquanto o vídeo estiver desativado, o Assinante ainda exibe o vídeo do assinante (como a imagem da câmera) na interface do usuário do cliente de publicação.
  • otc_subscriber_callbacks.on_video_enabled() — Denominado, com razão, “qualidade” quando se constata que a qualidade da transmissão melhorou e o transporte de vídeo de saída foi reativado.

Por exemplo, o código a seguir lida com os eventos relacionados (para que você possa fornecer suas próprias notificações na interface do usuário):

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;