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:

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 name parâmetro para "BackgroundBlur". E definir um properties parâmetro em uma string JSON. O formato do JSON é "{"radius":"None"}". Valores válidos para o radius As propriedades são “Nenhuma”, “Alta” e “Baixa”. 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).

    VideoTransformer 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 name parâmetro para "BackgroundReplacement". E definir um properties parâmetro em uma string JSON. O formato do JSON é "{"image_file_path":"caminho/para/a/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.

    VideoTransformer 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 name parâmetro para "NoiseSuppression". Defina o properties parâ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 "".

    AudioTransformer 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.