Processador de mídia (macOS)

Você pode usar transformadores pré-criados na biblioteca do Vonage Media Processor ou criar seu próprio transformador personalizado de áudio ou vídeo para aplicar ao vídeo publicado.

Você pode usar o otc_publisher_set_video_transformers() e otc_publisher_set_audio_transformers() funções para aplicar transformadores de áudio e vídeo a um stream publicado.

Importante: No momento, apenas os Macs com Apple Silicon são compatíveis. Consulte Requisitos do sistema para mais informações.

O SDK do Vonage Video para macOS inclui duas maneiras de implementar transformadores:

Você também pode criar seus próprios transformadores personalizados de áudio e vídeo.

Requisitos do sistema

Atualmente, os transformadores da Biblioteca de Mídia da Vonage são compatíveis apenas com Macs com Apple Silicon.

Os transformadores exigem suporte adequado do processador. Mesmo em sistemas compatíveis, os transformadores podem não funcionar de maneira estável quando processos em segundo plano limitam os recursos de processamento disponíveis. As mesmas limitações podem se aplicar a transformadores de mídia personalizados, além dos transformadores da Biblioteca de Mídia da Vonage.

O macOS pode limitar o desempenho da CPU para economizar energia (por exemplo, para prolongar a duração da bateria do laptop). Isso pode resultar em um desempenho abaixo do ideal do Transformer e causar artefatos indesejados de áudio ou vídeo. Recomendamos configurar seu sistema para não Nesses casos, utilize o modo de baixo consumo de energia.

Muitas transformações de vídeo (como o desfoque do fundo) utilizam a segmentação para separar o locutor do fundo. Para obter melhores resultados, use iluminação adequada e um fundo liso. Iluminação insuficiente ou fundos complexos podem causar artefatos no vídeo (por exemplo, o locutor ou um chapéu que ele esteja usando podem ficar desfocados junto com o fundo).

Você deve realizar testes de desempenho no maior número possível de dispositivos compatíveis, independentemente da transformação.

Integração com a Biblioteca de Mídia da Vonage

Devido ao aumento significativo no tamanho ao integrar a Vonage Media Library ao SDK, a partir da versão 2.27.3 do SDK da OpenTok, os Media Transformers estão disponíveis por meio da Vonage Media Library, cuja ativação é opcional. Essa biblioteca precisa ser adicionada explicitamente ao projeto.

A Biblioteca de Mídia da Vonage foi inicialmente integrada ao SDK do OpenTok. Se a versão do seu SDK do OpenTok for anterior à 2.27.3, vá diretamente para Aplicando um transformador de vídeo da Biblioteca de Mídia da Vonage e Como aplicar um transformador de áudio da Biblioteca de Mídia da Vonage.

A Biblioteca de Mídia da Vonage está disponível como o Pod “VonageClientSDKVideoMacOSTransformers”, para uso com CocoaPods.

Se uma chamada para otc_video_transformer_create() ou otc_audio_transformer_create() Se for chamado sem carregar a biblioteca, o transformador retornado será nulo. Você deve usar errno, uma variável global que é definida pelas chamadas de sistema em caso de erro para indicar o que deu errado. Ela está definida no <cerrno> cabeçalho. O código de erro para biblioteca ausente é 0x0A000006.

Aplicando um transformador de vídeo da Biblioteca de Mídia da Vonage

Atualmente, apenas um transformador da Biblioteca de Mídia da Vonage é compatível: o desfoque de fundo. Para esse transformador:

Use o otc_video_transformer_create() função para criar um transformador de vídeo que utilize um transformador nomeado da Biblioteca de Mídia da Vonage.

São suportados dois transformadores:

  • Desfoque de fundo.

    • Defina o type parâmetro para OTC_MEDIA_TRANSFORMER_TYPE_VONAGE (definido no SDK). Isso indica que você está usando um transformador da Biblioteca de Mídia da Vonage.
    • Defina o name parâmetro para "BackgroundBlur".
    • Defina o properties parâmetro para uma string JSON que define as propriedades do transformador. Para o transformador de desfoque de fundo, o formato do JSON é "{"radius":"None"}". Valores válidos para o radius As opções disponíveis para essa propriedade são “Nenhuma”, “Alta”, “Baixa” e “Personalizada”. Se você definir a radius propriedade para “Personalizado”, adicione um custom_radius propriedade na string JSON: "{"radius":"Custom","custom_radius":"value"}" (onde custom_radius é um número inteiro positivo que define o raio de desfoque).
    • Defina o callback parâmetro para NULL. (Esse parâmetro é usado para transformadores de vídeo personalizados.)
    • Defina o userData parâmetro para NULL. (Esse parâmetro é usado para transformadores de vídeo personalizados.)
    otc_video_transformer *backgroundBlur = otc_video_transformer_create(
      OTC_MEDIA_TRANSFORMER_TYPE_VONAGE,
      "BackgroundBlur",
      "{\"radius\":\"High\"}",
      NULL,
      NULL
    );
    
  • Substituição do plano de fundo.

    • Defina o type parâmetro para OTC_MEDIA_TRANSFORMER_TYPE_VONAGE (definido no SDK). Isso indica que você está usando um transformador da Biblioteca de Mídia da Vonage.
    • Defina o name parâmetro para "BackgroundReplacement".
    • Defina o properties parâmetro para uma string JSON que define as propriedades do transformador. Para o transformador de substituição de plano de fundo, o formato do JSON é "{"image_file_path":"caminho/para/imagem"}", onde image_file_path é o caminho absoluto do arquivo de uma imagem local a ser usada como plano de fundo virtual. Os formatos de imagem compatíveis são PNG e JPEG.
    • Defina o callback parâmetro para NULL. (Esse parâmetro é usado para transformadores de vídeo personalizados.)
    • Defina o userData parâmetro para NULL. (Esse parâmetro é usado para transformadores de vídeo personalizados.)
    otc_video_transformer *backgroundReplacement = otc_video_transformer_create(
      OTC_MEDIA_TRANSFORMER_TYPE_VONAGE,
      "BackgroundReplacement",
      "{\"image_file_path\":\"path-to-image\"}",
      NULL,
      NULL
    );
    

Depois de criar o transformador, você pode aplicá-lo a um editor usando o otc_publisher_set_video_transformers() função:

// Array of video transformers
otc_video_transformer *video_transformers[] = {
  background_blur
};

otc_publisher_set_video_transformers(publisher, video_transformers, 1);

O último parâmetro de otc_publisher_set_video_transformers() é o tamanho do transformers matriz. Neste exemplo, estamos aplicando um transformador de vídeo ao publisher. É possível aplicar vários transformadores adicionando vários objetos otc_video_transformer ao transformers matriz passada para otc_publisher_set_video_transformers().

Como aplicar um transformador de áudio da Biblioteca de Mídia da Vonage

Use o otc_audio_transformer_create() função para criar um transformador de áudio que utilize um transformador nomeado da Biblioteca de Mídia da Vonage.

É compatível com um transformador:

  • Supressão de ruído.

    • Defina o type parâmetro para OTC_MEDIA_TRANSFORMER_TYPE_VONAGE (definido no SDK). Isso indica que você está usando um transformador da Biblioteca de Mídia da Vonage.
    • Defina o name parâmetro para "NoiseSuppression".
    • Defina o properties parâmetro para uma string JSON que define as propriedades do transformador. Para o transformador de supressão de ruído, atualmente não há propriedades; portanto, o formato do JSON é "".
    • Defina o callback parâmetro para NULL. (Esse parâmetro é usado para transformadores de áudio personalizados.)
    • Defina o userData parâmetro para NULL. (Esse parâmetro é usado para transformadores de áudio personalizados.)
    otc_audio_transformer *noise_suppression = otc_audio_transformer_create(
      OTC_MEDIA_TRANSFORMER_TYPE_VONAGE,
      "NoiseSuppression",
      "{}",
      NULL,
      NULL
    );
    

Depois de criar o transformador, você pode aplicá-lo a um editor usando o otc_publisher_set_audio_transformers() função:

// Array of audio transformers
otc_audio_transformer *audio_transformers[] = {
  noise_suppression
};

otc_publisher_set_audio_transformers(publisher, audio_transformers, 1);

O último parâmetro de otc_publisher_set_audio_transformers() é o tamanho do transformers matriz. Neste exemplo, estamos aplicando um transformador de áudio ao publisher. É possível aplicar vários transformadores adicionando vários objetos otc_audio_transformer ao transformers matriz passada para otc_publisher_set_audio_transformers().

Criação de um transformador de vídeo personalizado

Use o otc_video_transformer_create() função para criar um transformador de vídeo.

  • Defina o type parâmetro para OTC_MEDIA_TRANSFORMER_TYPE_CUSTOM (definido no SDK). Isso indica que você está criando um transformador personalizado.
  • Defina o name parâmetro para um nome exclusivo para o seu transformador.
  • Defina o properties parâmetro NULL. (Esse parâmetro é utilizado ao usar um transformador da Biblioteca de Mídia da Vonage.)
  • Defina o callback parâmetro para uma função de retorno de chamada. Essa função é uma instância de a video_transform_callback tipo, definido no SDK. Essa função possui dois parâmetros: user_data -- veja o próximo parâmetro -- e frame -- uma instância do tipo otc_video_frame (definido no SDK) é passado para a função de retorno de chamada quando há dados de quadro de vídeo disponíveis. Transforme os dados do quadro de vídeo na função de retorno de chamada.
  • Defina o userData parâmetro (opcional) para os dados do usuário a serem passados na função de retorno de chamada.

Aqui está um exemplo básico:

void on_transform_black_white(void* user_data, struct otc_video_frame* frame)
{
    // implement transformer on the otc_video_frame data
}

otc_video_transformer *black_white_border = otc_video_transformer_create(
  OTC_MEDIA_TRANSFORMER_TYPE_CUSTOM,
  "blacknwhite",
  NULL,
  on_transform_black_white,
  NULL
);

Depois de criar o transformador, você pode aplicá-lo a um editor usando o otc_publisher_set_video_transformers() função:

// Array of video transformers
otc_video_transformer *video_transformers[] = {
  black_white_border
};

otc_publisher_set_video_transformers(publisher, video_transformers, 1);

Criação de um transformador de áudio personalizado

Use o otc_audio_transformer_create() função para criar um transformador de áudio.

  • Defina o type parâmetro para OTC_MEDIA_TRANSFORMER_TYPE_CUSTOM (definido no SDK). Isso indica que você está criando um transformador personalizado. (Nesta versão, nenhum transformador de áudio predefinido da Biblioteca de Mídia da Vonage é compatível.)
  • Defina o name parâmetro para um nome exclusivo para o seu transformador.
  • Defina o properties parâmetro NULL. (Esse parâmetro é utilizado ao usar um transformador da Biblioteca de Mídia da Vonage.)
  • Defina o callback parâmetro para uma função de retorno de chamada. Essa função é uma instância de a audio_transform_callback tipo, definido no SDK. Essa função possui dois parâmetros: user_data -- veja o próximo parâmetro -- e frame -- uma instância do tipo otc_audio_data (definido no SDK) é passado para a função de retorno de chamada quando há dados de áudio disponíveis. Transforme os dados de áudio na função de retorno de chamada.
  • Defina o userData parâmetro (opcional) para os dados do usuário a serem passados na função de retorno de chamada.

Aqui está um exemplo básico:

void on_transform_audio(void* user_data, struct otc_video_frame* frame)
{
    // implement transformer on the otc_audio_data audio data
}

otc_audio_transformer *lowpass_filter = otc_video_transformer_create(
  OTC_MEDIA_TRANSFORMER_TYPE_CUSTOM,
  "lowpassFilter",
  NULL,
  on_transform_audio,
  NULL
);

Depois de criar o transformador, você pode aplicá-lo a um editor usando o otc_publisher_set_audio_transformers() função:

// Array of audio transformers
otc_audio_transformer *audio_transformers[] = {
  lowpass_filter
};

otc_publisher_set_audio_transformers(publisher, audio_transformers, 1);

O último parâmetro de otc_publisher_set_audio_transformers() é o tamanho do transformers matriz. Neste exemplo, estamos aplicando um transformador de áudio ao publisher. É possível aplicar vários transformadores adicionando vários otc_audio_transformer se opõe à transformers matriz passada para otc_publisher_set_audio_transformers().

Autorização de transformadores de vídeo para uma editora

Para limpar os transformadores de vídeo de um editor, passe um array vazio para a função otc_publisher_set_video_transformers() função.

otc_audio_transformer empty_array[] = {};
otc_publisher_set_video_transformers(publisher, empty_array, 0);

Use o otc_video_transformer_delete() função para excluir uma instância de otc_audio_transformer:

otc_video_transformer_delete(lowpass_filter);

Autorização de transformadores de áudio para uma editora

Para limpar os transformadores de áudio de uma editora, passe um array vazio para a função otc_publisher_set_audio_transformers() função.

otc_video_transformer empty_array[] = {};
otc_publisher_set_audio_transformers(publisher, empty_array, 0);

Use o otc_audio_transformer_delete() função para excluir uma instância de otc_audio_transformer:

otc_audio_transformer_delete(black_white_border);

Aplicativo de exemplo

Veja esta amostra no opentok-macos-sdk-samples repositório no GitHub.