Processador de mídia (iOS)
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 OTPublisherKit.audioTransformers e OTPublisherKit.videoTransformers
propriedades 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 SDK do Vonage Video para iOS inclui duas maneiras de implementar transformadores:
-
Moderado — Para vídeos, você pode aplicar o transformador de vídeo com desfoque de fundo incluído na Biblioteca de Mídia da Vonage. Consulte Aplicando um transformador de vídeo 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 chipset Apple A11 Bionic e versões posteriores, nas seguintes combinações de dispositivos e sistemas operacionais:
| Dispositivo | Sistema operacional compatível |
|---|---|
| iPhone 11 e modelos posteriores | iOS 13 e versões posteriores |
| iPad Air 4 e versões posteriores | iPadOS 14.1 e versões posteriores |
| iPad mini de 5ª geração e versões posteriores | iPadOS 14 e versões posteriores |
| iPad Pro de 5ª geração ou superior | iPadOS 14.5 ou superior |
| iPhone SE de 2ª geração e versões posteriores | iOS 13.4 ou superior |
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 Biblioteca de Mídia da Vonage ao SDK, a partir da versão 2.27.4 do SDK da OpenTok, os Transformadores de Mídia estão disponíveis por meio da Biblioteca de Mídia da Vonage, cuja ativação é opcional. Essa biblioteca precisa ser explicitamente adicionada 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.4, 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 pode ser integrada usando o Swift Package Manager ou o CocoaPods:
Gerenciador de Pacotes Swift
Você pode adicionar os transformadores de vídeo do VonageClientSDK incluindo o Transformadores de vídeo do Vonage Client SDK repositório como uma dependência de pacote Swift.
Para adicionar uma dependência de pacote ao seu projeto do Xcode, selecione Arquivo > Pacotes Swift > Adicionar dependência de pacote e insira a URL do repositório.
Cocoapods
A Biblioteca de Mídia da Vonage está disponível como o Pod “VonageClientSDKVideoTransformers”, para uso com CocoaPods.
ℹ️
Se uma chamada para [OTVideoTransformer initWithName:properties:] ou [OTAudioTransformer initWithName: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 [OTVideoTransformer initWithName: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).CopiarNSMutableArray * myVideoTransformers = [[NSMutableArray alloc] init]; OTVideoTransformer *backgroundBlur = [[OTVideoTransformer alloc] initWithName:@"BackgroundBlur" properties:@"{\"radius\":\"High\"}"]; [myVideoTransformers addObject:backgroundBlur]; _publisher.videoTransformers = [[NSArray alloc] initWithArray:myVideoTransformers]; -
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.CopiarNSMutableArray * myVideoTransformers = [[NSMutableArray alloc] init]; OTVideoTransformer *backgroundReplacement = [[OTVideoTransformer alloc] initWithName:@"BackgroundReplacement" properties:@"{\"image_file_path\":\"path-to-image\"}]; [myVideoTransformers addObject:backgroundReplacement]; _publisher.videoTransformers = [[NSArray alloc] initWithArray:myVideoTransformers];
Como aplicar um transformador de áudio da Biblioteca de Mídia da Vonage
Use o OTAudioTransformer initWithName:properties: método para criar um transformador de vídeo 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"".
NSMutableArray * myAudioTransformers = [[NSMutableArray alloc] init];
OTAudioTransformer *noiseSuppression = [[OTAudioTransformer alloc] initWithName:@"NoiseSuppression"
properties:@""];
[myAudioTransformers addObject:noiseSuppression];
_publisher.audioTransformers = [[NSArray alloc] initWithArray:myAudioTransformers];
Criação de um transformador de vídeo personalizado
Crie uma classe que implemente a OTCustomVideoTransformer protocolo. Implemente o método `[OTCustomVideoTransformer transform:]`, aplicando uma transformação ao objeto `OTVideoFrame` passado ao método. O método `[OTCustomVideoTransformer transform:]` é acionado para cada quadro de vídeo:
@interface CustomTransformer : NSObject <OTCustomVideoTransformer>
@end
@implementation CustomTransformer
- (void)transform:(nonnull OTVideoFrame *)videoFrame {
OTPixelFormat pixelFormat = videoFrame.format.pixelFormat;
int strides[] =
{
[videoFrame getPlaneStride:0],
[videoFrame getPlaneStride:2],
[videoFrame getPlaneStride:1]
};
uint8_t* planes[] =
{
[videoFrame getPlaneBinaryData:0],
[videoFrame getPlaneBinaryData:2],
[videoFrame getPlaneBinaryData:1]
};
[videoFrame convertInPlace:pixelFormat planes:planes strides:strides];
}
@end
Em seguida, defina o OTPublisherKit.videoTransformers propriedade a um array que inclua o objeto que implementa a
interface OTCustomVideoTransformer:
CustomTransformer* myCustomTransformer;
myCustomTransformer = [CustomTransformer alloc];
OTVideoTransformer *invertColors = [[OTVideoTransformer alloc] initWithName:@"invertColors" transformer:border];
NSMutableArray * myVideoTransformers = [[NSMutableArray alloc] init];
[myVideoTransformers addObject:invertColors];
_publisher.videoTransformers = [[NSArray alloc] initWithArray:myVideoTransformers];
É 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 usada
para o OTPublisherKit.videoTransformers propriedade.
Criação de um transformador de áudio personalizado
Crie uma classe que implemente a OTCustomAudioTransformer
protocolo. Implementar o [OTCustomAudioTransformer transform:] método, aplicando uma transformação
ao OTAudioData objeto passado para o método. O [OTCustomAudioTransformer transform:] O método
é acionado a cada quadro de áudio. O exemplo a seguir aplica um limitador de amplitude simples ao
áudio:
@interface CustomAudioTransformer : NSObject <OTCustomAudioTransformer>
@end
@implementation CustomAudioTransformer
- (void)transform:(nonnull OTAudioData *)audioData {
int CROP_LIMIT = 32767 * 0.05;
int samplesPerChannel = (int)audioData.numberOfSamples * (int)audioData.numberOfChannels;
int16_t* buffer = audioData.sampleBuffer;
for (int s = 0; s < samplesPerChannel; ++s) {
int sample = buffer[s];
NSLog(@"CustomAudioTransformer. Samples %d", sample);
if (sample > CROP_LIMIT)
buffer[s] = CROP_LIMIT;
else if (sample < -CROP_LIMIT)
buffer[s] = -CROP_LIMIT;
}
}
@end
Em seguida, defina o OTPublisherKit.audioTransformers propriedade a um array que inclua o objeto que implementa a
interface CustomAudioTransformer:
CustomAudioTransformer* customAudioTransformer;
ArrayList<PublisherKit.AudioTransformer> audioTransformers = new ArrayList<>();
customAudioTransformer = [CustomAudioTransformer alloc];
OTAudioTransformer *audiotrans = [[OTAudioTransformer alloc] initWithName:@"audio"
transformer:customAudioTransformer];
NSMutableArray * myAudioTransformers = [[NSMutableArray alloc] init];
[myAudioTransformers addObject:audiotrans];
_publisher.audioTransformers = [[NSArray alloc] initWithArray:myAudioTransformers];
É 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 OTPublisherKit.videoTransformers propriedade para um array vazio.
_publisher.videoTransformers = [[NSArray alloc] init];
Autorização de transformadores de áudio para uma editora
Para limpar os transformadores de áudio de uma editora, defina o OTPublisherKit.audioTransformers propriedade para um array vazio.
_publisher.audioTransformers = [[NSArray alloc] init];
Aplicativo de exemplo
Veja esta amostra
no opentok-ios-sdk-samples repositório no GitHub.