Processador de mídia (Android)
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 PublisherKit.setAudioTransformers() e PublisherKit.setVideoTransformers() métodos para aplicar transformadores de áudio e vídeo a um fluxo.
Importante: As transformações de mídia não são compatíveis com todos os dispositivos. Consulte requisitos do cliente. O filtro de desfoque de fundo da Biblioteca de Mídia da Vonage está disponível como recurso em fase beta.
O SDK do Vonage Video para Android 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 cliente
Os transformadores da Biblioteca de Mídia da Vonage são compatíveis com o nível de API do Android 24 ou superior, nos seguintes dispositivos:
- Samsung Galaxy S8 e modelos posteriores
- Google Pixel 5 e versões posteriores
- OPPO A94 e modelos superiores
- Celulares Android com processador Qualcomm Snapdragon 835 ou superior
- Celulares Android com Qualcomm Snapdragon 765G e versões superiores
Teste em outros dispositivos para verificar se há compatibilidade.
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 iOS 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 desativar 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.
Uma versão do Maven está disponível em https://central.sonatype.com/artifact/com.vonage/client-sdk-video-transformers.
O ID do artefato é "client-sdk-video-transformers".
Modifique o arquivo build.gradle do aplicativo e adicione o seguinte trecho de código ao
dependencies seção:
implementation 'com.vonage:client-sdk-video-transformers:2.34.1'
Se uma chamada para PublisherKit.VideoTransformer(String name, String properties) ou PublisherKit.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
Observação: O suporte aos transformadores da Biblioteca de Mídia da Vonage é um recurso em fase beta.
Use o PublisherKit.VideoTransformer(String name, String properties)
construtor para criar um transformador de vídeo que utilize um transformador nomeado da Biblioteca de Mídia da Vonage.
Atualmente, apenas um transformador é compatível: o desfoque de fundo. 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, esse JSON inclui uma propriedade — radius -- que pode ser definido
como "High", "Low", ou "None".
ArrayList<PublisherKit.VideoTransformer> videoTransformers = new ArrayList<>();
PublisherKit.VideoTransformer backgroundBlur = new PublisherKit.VideoTransformer(
"BackgroundBlur",
"{\"radius\":\"High\"}"
);
videoTransformers.add(backgroundBlur);
mPublisher.setVideoTransformers(videoTransformers);
Como aplicar um transformador de áudio da Biblioteca de Mídia da Vonage
Use o PublisherKit.AudioTransformer(String name, String properties)
construtor 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 JSON vazia"{}".CopiarPublisher publisher = new Publisher.Builder(MainActivity.this).build(); ArrayList<PublisherKit.AudioTransformer> audioTransformers = new ArrayList<>(); PublisherKit.AudioTransformer noiseSuppression = publisher.new AudioTransformer( "NoiseSuppression", "" ); audioTransformers.add(noiseSuppression); publisher.setAudioTransformers(audioTransformers);
Criação de um transformador de vídeo personalizado
Crie uma classe que implemente a PublisherKit.CustomVideoTransformer
interface. Implementar a PublisherKit.CustomVideoTransformer.onTransform(BaseVideoRenderer.Frame frame) método. O PublisherKit.CustomVideoTransformer.onTransform(BaseVideoRenderer.Frame frame) O método é acionado para cada quadro do vídeo.
Na implementação do método, aplique uma transformação ao frame objeto passado para o método:
public class MyCustomTransformer implements PublisherKit.CustomVideoTransformer {
@Override
public void onTransform(BaseVideoRenderer.Frame frame) {
// Replace this with code to transform the frame:
frame.convertInPlace(frame.getYplane(), frame.getVplane(), frame.getUplane(), frame.getYstride(), frame.getUvStride());
}
}
Em seguida, passe o objeto que implementa a interface PublisherKit.CustomVideoTransformer para o PublisherKit.setVideoTransformers() método:
MyCustomTransformer transformer = new MyCustomTransformer();
ArrayList<PublisherKit.VideoTransformer> videoTransformers = new ArrayList<>();
videoTransformers.add(transformer);
mPublisher.setVideoTransformers(videoTransformers);
É 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 PublisherKit.VideoTransformer à ArrayList passada
para o PublisherKit.setVideoTransformers() método.
adicionar vários objetos OTPublisherKit.VideoTransformer à matriz usada
para o OTPublisherKit.videoTransformers propriedade.
Criação de um transformador de áudio personalizado
Crie uma classe que implemente a PublisherKit.CustomAudioTransformer
interface. Implementar a PublisherKit.CustomAudioTransformer.onTransform(AudioData audioData) método.
O PublisherKit.CustomAudioTransformer.onTransform(AudioData audioData) O método é acionado a cada quadro de áudio.
Na implementação do método, aplique uma transformação ao frame objeto passado para o método.
O exemplo a seguir aplica um limitador de amplitude simples ao áudio:
public class MyCustomAudioTransformer implements PublisherKit.CustomAudioTransformer {
private short CROP_LIMIT = (short)(32767 * 0.05);
@Override
public void onTransform(AudioData audioData) {
int samplesPerChannel = (int)audioData.getNumberOfSamples() * (int)audioData.getNumberOfChannels();
ShortBuffer samples = audioData.getSampleBuffer().asShortBuffer();
for (int s = 0; s < samplesPerChannel; ++s) {
short sample = samples.get(s);
if (sample > CROP_LIMIT)
samples.put(s, CROP_LIMIT);
else if (sample < -CROP_LIMIT)
samples.put(s, (short)-CROP_LIMIT);
}
}
}
Em seguida, passe o objeto que implementa a interface PublisherKit.CustomAudioTransformer para o PublisherKit.setAudioTransformers() método:
MyCustomAudioTransformer transformer = new MyCustomAudioTransformer();
ArrayList<PublisherKit.VideoTransformer> audioTransformers = new ArrayList<>();
audioTransformers.add(transformer);
mPublisher.setAudioTransformers(audioTransformers);
É possível aplicar vários transformadores personalizados adicionando vários objetos PublisherKit.AudioTransformer à ArrayList
passada para o PublisherKit.setAudioTransformers() método.
Autorização de transformadores de vídeo para uma editora
Para limpar os transformadores de vídeo de um editor, passe um ArrayList vazio
para o PublisherKit.setVideoTransformers() método.
videoTransformers.clear();
mPublisher.setVideoTransformers(videoTransformers);
Autorização de transformadores de áudio para uma editora
Para limpar os transformadores de áudio de uma editora, passe um ArrayList vazio
para o PublisherKit.setAudioTransformers() método.
audioTransformers.clear();
mPublisher.setAudioTransformers(videoTransformers);