Processador de mídia (Windows)
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 Publisher.AudioTransformers e Publisher.VideoTransformers
propriedades para aplicar transformadores de áudio e vídeo a um fluxo.
O SDK do Vonage Video para Windows 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.
Requisitos do sistema
Recomenda-se o uso de GPUs da NVIDIA para obter o melhor desempenho ao utilizar os transformadores da Vonage Media Library.
Teste outras configurações para verificar se são compatíveis.
Os transformadores exigem suporte adequado do processador. Mesmo em dispositivos 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 Windows pode limitar o desempenho da CPU para economizar energia (por exemplo, para prolongar a duração da bateria). Isso pode resultar em um desempenho abaixo do ideal do transformador e causar artefatos indesejados de áudio ou vídeo. Recomendamos configurar seu sistema operacional para usar o modo de melhor desempenho (ou para não usar o modo de baixo consumo de energia) nesses casos.
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.2 do SDK da OpenTok, os Media Transformers estão disponíveis por meio da Vonage Media Library, cuja ativação é opcional. É necessário adicionar explicitamente essa biblioteca 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.2, 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.
Está disponível um pacote NuGet com o nome "Vonage.Client.Video.Transformers". Instale-o no seu projeto.
Se uma chamada para VideoTransformer(string name, string properties) ou AudioTransformer(string name, string properties) Se a chamada for feita sem carregar a biblioteca, o transformador retornado será nulo. Será lançada uma exceção com o seguinte código de erro 0x0A000006 - OTC_MEDIA_TRANSFORMER_OPENTOK_TRANSFORMERS_LIBRARY_NOT_LOADED.
Aplicando um transformador de vídeo da Biblioteca de Mídia da Vonage
Use o VideoTransformer(string name, string properties)
método 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. Para este filtro, defina o
nameparâmetro para"BackgroundBlur". E definir umpropertiesparâmetro em uma string JSON. O formato do JSON é "{"radius":"None"}". Valores válidos para oradiusAs propriedades são “Nenhuma”, “Alta” e “Baixa”. 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).CopiarVideoTransformer backgroundBlur = new VideoTransformer("BackgroundBlur", "{\"radius\":\"High\"}"); List<VideoTransformer> transformers = new ArrayList<VideoTransformer> { backgroundBlur }; publisher.VideoTransformers = transformers; -
Substituição do plano de fundo. Para este filtro, defina o
nameparâmetro para"BackgroundReplacement". E definir umpropertiesparâmetro em uma string JSON. O formato do JSON é "{"image_file_path":"caminho/para/a/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.CopiarVideoTransformer backgroundReplacement = new VideoTransformer("BackgroundReplacement", "{\"image_file_path\":\"path-to-image\"}"); List<VideoTransformer> transformers = new ArrayList<VideoTransformer> { backgroundReplacement }; publisher.VideoTransformers = transformers;
Como aplicar um transformador de áudio da Biblioteca de Mídia da Vonage
Use o AudioTransformer(string nome, string propriedades)
método 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. Para este filtro, defina o
nameparâmetro para"NoiseSuppression". Defina opropertiesparâmetro para uma string JSON que define as propriedades do transformador. No caso do transformador de supressão de ruído, esse JSON não inclui nenhuma propriedade no momento. Defina-o como uma string vazia"".CopiarAudioTransformer noiseSuppression = new AudioTransformer("NoiseSuppression", ""); List<AudioTransformer> transformers = new ArrayList<AudioTransformer> { noiseSuppression }; publisher.AudioTransformers = transformers;
Criação de um transformador de vídeo personalizado
Crie uma classe que implemente aICustomVideoTransformer
interface. Implementar a ICustomVideoTransformer.Transform() método, aplicando uma transformação ao VideoFrame objeto passado para o método.
O ICustomVideoTransformer.Transform O método é acionado a cada quadro do vídeo:
public class MyCustomTransformer : IVideoTransformer
{
public void Transform(VideoFrame frame)
{
// transformer implementation
PixelFormat pixelFormat = frame.PixelFormat;
int numberOfPlanes = frame.NumberOfPlanes;
//invert U and V planes
IntPtr[] planes = new IntPtr[] { frame.GetPlane(0), frame.GetPlane(2), frame.GetPlane(1) };
int[] strides = new int[] { frame.GetPlaneStride(0), frame.GetPlaneStride(2), frame.GetPlaneStride(1) };
frame.ConvertInPlace(pixelFormat, planes, strides);
}
}
Em seguida, defina o PublisherKit.VideoTransformers propriedade a um array que inclua o objeto que implementa a
interface OTCustomVideoTransformer:
MyCustomTransformer myCustomTransformer = new();
List<VideoTransformer> transformers = new ArrayList<VideoTransformer>
{
myCustomTransformer
};
publisher.VideoTransformers = transformers;
É possível combinar o transformador da biblioteca de mídia da Vonage (consulte a seção anterior) com transformadores personalizados ou aplicar
vários transformadores personalizados, adicionando vários objetos VideoTransformer à ArrayList usada
para o PublisherKit.VideoTransformers propriedade.
Criação de um transformador de áudio personalizado
Crie uma classe que implemente a ICustomAudioTransformer
interface. Implementar a ICustomAudioTransformer.Transform() método, aplicando uma transformação
ao AudioData objeto passado para o método. O CustomAudioTransformer.Transform() O método
é acionado a cada quadro de áudio. O exemplo a seguir aplica um limitador de amplitude simples ao
áudio:
public class MyCustomTransformer : IAudioTransformer
{
private const short CROP_LIMIT = (short)(short.MaxValue * 0.5);
public unsafe void Transform(AudioData frame)
{
// transformer implementation
short* data = (short*)frame.SampleBuffer;
int samplesXChannels = (int)frame.NumberOfSamples * (int)frame.NumberOfChannels;
for (int s = 0; s < samplesXChannels; ++s)
{
if (data[s] > CROP_LIMIT)
data[s] = CROP_LIMIT;
else if (data[s] < -CROP_LIMIT)
data[s] = -CROP_LIMIT;
}
}
}
Em seguida, defina o OTPublisherKit.AudioTransformers propriedade a um array que inclua o objeto que implementa a
interface CustomAudioTransformer:
MyCustomTransformer myCustomTransformer = new();
List<VideoTransformer> transformers = new ArrayList<VideoTransformer>
{
myCustomTransformer
};
publisher.AudioTransformers = transformers;
É possível aplicar vários transformadores personalizados adicionando vários objetos OTPublisherKit.AudioTransformer à ArrayList usada
para o OTPublisherKit.AudioTransformers propriedade.
Autorização de transformadores de vídeo para uma editora
Para limpar os transformadores de vídeo de um editor, defina o Publisher.VideoTransformers propriedade para um array vazio.
publisher.VideoTransformers = new ArrayList<VideoTransformer> {};
Autorização de transformadores de áudio para uma editora
Para limpar os transformadores de áudio de uma editora, defina o Publisher.AudioTransformers propriedade para um array vazio.
publisher.AudioTransformers = new ArrayList<AudioTransformer> {};
Aplicativo de exemplo
Veja esta amostra no vonage-video-windows-sdk-samples repositório no GitHub.