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:
-
Moderado — Para vídeos, é possível aplicar os transformadores de vídeo para desfoque de fundo e substituição de fundo incluídos no Biblioteca de Mídia da Vonage. Veja Aplicando um transformador de vídeo da Biblioteca de Mídia da Vonage. Para o áudio, você pode utilizar o transformador de áudio com supressão de ruído incluído no Biblioteca de Mídia da Vonage. Veja Como aplicar um transformador de áudio da Biblioteca de Mídia da Vonage.
-
Avançado — Você pode criar o seu próprio transformadores de vídeo personalizados e transformadores de áudio personalizados.
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
typeparâmetro paraOTC_MEDIA_TRANSFORMER_TYPE_VONAGE(definido no SDK). Isso indica que você está usando um transformador da Biblioteca de Mídia da Vonage. - Defina o
nameparâmetro para"BackgroundBlur". - Defina o
propertiesparâ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 oradiusAs opções disponíveis para essa propriedade são “Nenhuma”, “Alta”, “Baixa” e “Personalizada”. Se você definir aradiuspropriedade para “Personalizado”, adicione umcustom_radiuspropriedade na string JSON: "{"radius":"Custom","custom_radius":"value"}" (ondecustom_radiusé um número inteiro positivo que define o raio de desfoque). - Defina o
callbackparâmetro paraNULL. (Esse parâmetro é usado para transformadores de vídeo personalizados.) - Defina o
userDataparâmetro paraNULL. (Esse parâmetro é usado para transformadores de vídeo personalizados.)
Copiarotc_video_transformer *backgroundBlur = otc_video_transformer_create( OTC_MEDIA_TRANSFORMER_TYPE_VONAGE, "BackgroundBlur", "{\"radius\":\"High\"}", NULL, NULL ); - Defina o
-
Substituição do plano de fundo.
- Defina o
typeparâmetro paraOTC_MEDIA_TRANSFORMER_TYPE_VONAGE(definido no SDK). Isso indica que você está usando um transformador da Biblioteca de Mídia da Vonage. - Defina o
nameparâmetro para"BackgroundReplacement". - Defina o
propertiesparâ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"}", ondeimage_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
callbackparâmetro paraNULL. (Esse parâmetro é usado para transformadores de vídeo personalizados.) - Defina o
userDataparâmetro paraNULL. (Esse parâmetro é usado para transformadores de vídeo personalizados.)
Copiarotc_video_transformer *backgroundReplacement = otc_video_transformer_create( OTC_MEDIA_TRANSFORMER_TYPE_VONAGE, "BackgroundReplacement", "{\"image_file_path\":\"path-to-image\"}", NULL, NULL ); - Defina o
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
typeparâmetro paraOTC_MEDIA_TRANSFORMER_TYPE_VONAGE(definido no SDK). Isso indica que você está usando um transformador da Biblioteca de Mídia da Vonage. - Defina o
nameparâmetro para"NoiseSuppression". - Defina o
propertiesparâ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
callbackparâmetro paraNULL. (Esse parâmetro é usado para transformadores de áudio personalizados.) - Defina o
userDataparâmetro paraNULL. (Esse parâmetro é usado para transformadores de áudio personalizados.)
Copiarotc_audio_transformer *noise_suppression = otc_audio_transformer_create( OTC_MEDIA_TRANSFORMER_TYPE_VONAGE, "NoiseSuppression", "{}", NULL, NULL ); - Defina o
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
typeparâmetro paraOTC_MEDIA_TRANSFORMER_TYPE_CUSTOM(definido no SDK). Isso indica que você está criando um transformador personalizado. - Defina o
nameparâmetro para um nome exclusivo para o seu transformador. - Defina o
propertiesparâmetroNULL. (Esse parâmetro é utilizado ao usar um transformador da Biblioteca de Mídia da Vonage.) - Defina o
callbackparâmetro para uma função de retorno de chamada. Essa função é uma instância de avideo_transform_callbacktipo, definido no SDK. Essa função possui dois parâmetros:user_data-- veja o próximo parâmetro -- eframe-- uma instância do tipootc_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
userDataparâ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
typeparâmetro paraOTC_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
nameparâmetro para um nome exclusivo para o seu transformador. - Defina o
propertiesparâmetroNULL. (Esse parâmetro é utilizado ao usar um transformador da Biblioteca de Mídia da Vonage.) - Defina o
callbackparâmetro para uma função de retorno de chamada. Essa função é uma instância de aaudio_transform_callbacktipo, definido no SDK. Essa função possui dois parâmetros:user_data-- veja o próximo parâmetro -- eframe-- uma instância do tipootc_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
userDataparâ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.