Procesador multimedia (iOS)

Puedes utilizar transformadores prediseñados en la biblioteca de Vonage Media Processor o crear tu propio transformador de audio o vídeo personalizado de audio o vídeo personalizado para aplicarlo al vídeo publicado.

Puede utilizar la función OTPublisherKit.audioTransformers y OTPublisherKit.videoTransformers para aplicar transformadores de audio y vídeo a un flujo.

Importante: Las transformaciones multimedia no son compatibles con todos los dispositivos. Consulte requisitos del cliente.

El SDK de Vonage Video para iOS incluye dos formas de implementar transformadores:

Requisitos del cliente

Los transformadores de la biblioteca multimedia de Vonage son compatibles con el chipset Apple A11 Bionic y superiores, en las siguientes combinaciones de dispositivo y sistema operativo:

Dispositivo Sistema operativo compatible
iPhone 11 y superior iOS 13 y superior
iPad Air 4 y superior iPadOS 14.1 y superior
iPad mini de 5ª generación y superior iPadOS 14 y superior
iPad Pro de 5ª generación o superior iPadOS 14.5 o superior
iPhone SE de 2ª generación y superior iOS 13.4 o superior

Prueba en otros dispositivos para comprobar la compatibilidad.

Los transformadores requieren un procesador adecuado. Incluso en dispositivos compatibles, los transformadores pueden no ser estables cuando los procesos en segundo plano limitan los recursos de procesamiento disponibles. Las mismas limitaciones pueden aplicarse con transformadores multimedia personalizados además de transformadores de la biblioteca multimedia de Vonage.

iOS puede reducir el rendimiento de la CPU para ahorrar energía (por ejemplo, para prolongar la duración de la batería). Esto puede dar lugar a un rendimiento subóptimo del transformador e introducir artefactos de audio o vídeo no deseados. Recomendamos desactivar el modo de bajo consumo en estos casos.

Muchas transformaciones de vídeo (como el desenfoque de fondo) utilizan la segmentación para separar al orador del fondo. Para obtener los mejores resultados, utilice una iluminación adecuada y un fondo liso. La iluminación insuficiente o los fondos complejos pueden provocar artefactos de vídeo (por ejemplo, el orador o un sombrero que lleve puesto pueden aparecer borrosos junto con el fondo).

Debe realizar pruebas comparativas en tantos dispositivos compatibles como sea posible, independientemente de la transformación.

Integración de la biblioteca multimedia de Vonage

Debido al significativo aumento de tamaño al integrar la biblioteca multimedia de Vonage en el SDK, a partir de OpenTok SDK v2.27.4 los transformadores multimedia están disponibles a través de la biblioteca multimedia opcional de Vonage. Esta biblioteca necesita ser añadida explícitamente al proyecto.

La biblioteca multimedia de Vonage se incorporó inicialmente en OpenTok SDK. Si tu versión de OpenTok SDK es anterior a la 2.27.4, pasa directamente a Aplicación de un transformador de vídeo desde la biblioteca multimedia de Vonage y Aplicación de un transformador de audio desde la biblioteca multimedia de Vonage.

La biblioteca multimedia de Vonage puede integrarse mediante Swift Package Manager o CocoaPods:

Gestor de paquetes Swift

Puedes añadir los transformadores de vídeo VonageClientSDK añadiendo el archivo Transformadores de vídeo de Vonage Client SDK como dependencia de un paquete Swift.

Para añadir una dependencia de paquete a su proyecto Xcode, seleccione Archivo > Paquetes Swift > Añadir dependencia de paquete e introduzca la URL de su repositorio.

Cocoapods

La biblioteca multimedia de Vonage está disponible como Pod "VonageClientSDKVideoTransformers", para uso con CocoaPods.

ℹ️ Si una llamada a [OTVideoTransformer initWithName:properties:] o [OTAudioTransformer initWithName:properties:] se realiza sin cargar la biblioteca, el transformador devuelto será nulo. Se lanzará una excepción con el siguiente código de error 0x0A000006 - OTC_MEDIA_TRANSFORMER_OPENTOK_TRANSFORMERS_LIBRARY_NOT_LOADED.

Aplicación de un transformador de vídeo desde la biblioteca multimedia de Vonage

Utiliza el [OTVideoTransformer initWithName:properties:] para crear un transformador de vídeo que utilice un transformador con nombre de la biblioteca multimedia de Vonage.

Admite dos transformadores:

  • Desenfoque de fondo. Para este filtro, establezca los valores name a "BackgroundBlur". Y establecer un properties a una cadena JSON. El formato del JSON es "{"radius": "None"}". Valores válidos para el parámetro radius son "Ninguno", "Alto" y "Bajo". Si establece la propiedad radius a "Personalizado", añada una propiedad custom_radius a la propiedad JSON string: "{"radio": "Personalizado", "radio_personalizado": "valor"}" (donde custom_radius es un número entero positivo que define el radio de desenfoque).

    NSMutableArray * myVideoTransformers = [[NSMutableArray alloc] init];
    OTVideoTransformer *backgroundBlur = [[OTVideoTransformer alloc] initWithName:@"BackgroundBlur"
                                                                       properties:@"{\"radius\":\"High\"}"];
    [myVideoTransformers addObject:backgroundBlur];
    _publisher.videoTransformers = [[NSArray alloc] initWithArray:myVideoTransformers];
    
  • Sustitución de antecedentes. Para este filtro, establezca los valores name a "BackgroundReplacement". Y establecer un properties a una cadena JSON. El formato del JSON es "{"ruta_archivo_imagen": "ruta/a/imagen"}", donde image_file_path es la ruta absoluta del archivo de una imagen local que se utilizará como fondo virtual. Los formatos de imagen compatibles son PNG y JPEG.

    NSMutableArray * 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];
    

Aplicación de un transformador de audio desde la biblioteca multimedia de Vonage

Utiliza el OTAudioTransformer initWithName:properties: para crear un transformador de vídeo que utilice un transformador con nombre de la biblioteca multimedia de Vonage.

Se admite un transformador:

  • Supresión de ruido. Para este filtro, establezca los valores name a "NoiseSuppression". Ajuste el properties a una cadena JSON que define las propiedades del transformador. Para el transformador de supresión de ruido, este JSON no incluye ninguna propiedad por el momento. Establézcalo como una cadena vacía "".

Creación de un transformador de vídeo personalizado

Crear una clase que implemente el método OTCustomVideoTransformer protocolo. Implementa el método `[OTCustomVideoTransformer transform:]`, aplicando una transformación al objeto `OTVideoFrame` pasado al método. El método `[OTCustomVideoTransformer transform:]` se activa para cada fotograma 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

A continuación, ajuste el OTPublisherKit.videoTransformers a una matriz que incluye el objeto que implementa la interfaz OTCustomVideoTransformer:

Puedes combinar el transformador de la biblioteca Vonage Media (consulta la sección anterior) con transformadores personalizados o aplicar varios transformadores personalizados añadiendo varios objetos PublisherKit.VideoTransformer a la lista ArrayList para el OTPublisherKit.videoTransformers propiedad.

Creación de un transformador de audio personalizado

Crear una clase que implemente el método OTCustomAudioTransformer protocolo. Aplicar el [OTCustomAudioTransformer transform:] método, aplicando una transformación a la OTAudioData pasado al método. La dirección [OTCustomAudioTransformer transform:] método se activa para cada fotograma de audio. El siguiente ejemplo aplica un limitador de amplitud simple en el audio:

@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

A continuación, ajuste el OTPublisherKit.audioTransformers a un array que incluye el objeto que implementa la interfaz 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];

Puedes aplicar múltiples transformadores personalizados añadiendo múltiples objetos OTPublisherKit.AudioTransformer a la ArrayList utilizada para el OTPublisherKit.audioTransformers propiedad.

Compensación de transformadores de vídeo para un editor

Para borrar los transformadores de vídeo de un editor, configure la opción OTPublisherKit.videoTransformers a una matriz vacía.

Compensación de transformadores de audio para un editor

Para borrar los transformadores de audio de un editor, establezca el parámetro OTPublisherKit.audioTransformers a una matriz vacía.

Aplicación de ejemplo

Véase esta muestra en el opentok-ios-sdk-samples en GitHub.