Procesador multimedia (macOS)

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 otc_publisher_set_video_transformers() y otc_publisher_set_audio_transformers() para aplicar transformadores de audio y vídeo a un flujo publicado.

Importante: Actualmente, sólo se admiten los Mac de silicona de Apple. Consulte Requisitos del sistema para más información.

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

También puedes crear tus propios transformadores de audio y vídeo personalizados.

Requisitos del sistema

Actualmente, los transformadores de la biblioteca multimedia de Vonage sólo son compatibles con los Mac de silicona de Apple.

Los transformadores requieren un soporte de procesador adecuado. Incluso en sistemas 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.

macOS puede reducir el rendimiento de la CPU para ahorrar energía (por ejemplo, para prolongar la duración de la batería del portátil). Esto puede dar lugar a un rendimiento subóptimo del transformador e introducir artefactos de audio o vídeo no deseados. Le recomendamos que configure su sistema en no utilizar 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 Vonage Media Library en el SDK, a partir de OpenTok SDK v2.27.3 los Media Transformers están disponibles a través de Vonage Media Library. Esta biblioteca debe añadirse 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.3, 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 está disponible como Pod "VonageClientSDKVideoMacOSTransformers", para uso con CocoaPods.

Si una llamada a otc_video_transformer_create() o otc_audio_transformer_create() se realiza sin cargar la biblioteca, el transformador devuelto será nulo. Debe utilizar errno, una variable global que es establecida por las llamadas al sistema en caso de error para indicar qué ha ido mal. Está definida en el directorio <cerrno> cabecera. El código de error para la biblioteca que falta es 0x0A000006.

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

Actualmente, sólo se admite un transformador de la biblioteca multimedia de Vonage: desenfoque de fondo. Para este transformador:

Utiliza el otc_video_transformer_create() 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.

    • Fije el type a OTC_MEDIA_TRANSFORMER_TYPE_VONAGE (definido en el SDK). Esto indica que estás usando un transformador de la biblioteca de medios de Vonage.
    • Fije el name a "BackgroundBlur".
    • Fije el properties a una cadena JSON que define las propiedades del transformador. Para el transformador de desenfoque de fondo, el formato del JSON es "{"radius": "None"}". Valores válidos para el parámetro radius son "Ninguno", "Alto", "Bajo" y "Personalizado". 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).
    • Fije el callback a NULL. (Este parámetro se utiliza para los transformadores de vídeo personalizados).
    • Fije el userData a NULL. (Este parámetro se utiliza para los transformadores de vídeo personalizados).
    otc_video_transformer *backgroundBlur = otc_video_transformer_create(
      OTC_MEDIA_TRANSFORMER_TYPE_VONAGE,
      "BackgroundBlur",
      "{\"radius\":\"High\"}",
      NULL,
      NULL
    );
    
  • Sustitución de antecedentes.

    • Fije el type a OTC_MEDIA_TRANSFORMER_TYPE_VONAGE (definido en el SDK). Esto indica que estás usando un transformador de la biblioteca de medios de Vonage.
    • Fije el name a "BackgroundReplacement".
    • Fije el properties a una cadena JSON que define las propiedades del transformador. Para el transformador de sustitución de fondo, 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.
    • Fije el callback a NULL. (Este parámetro se utiliza para los transformadores de vídeo personalizados).
    • Fije el userData a NULL. (Este parámetro se utiliza para los transformadores de vídeo personalizados).
    otc_video_transformer *backgroundReplacement = otc_video_transformer_create(
      OTC_MEDIA_TRANSFORMER_TYPE_VONAGE,
      "BackgroundReplacement",
      "{\"image_file_path\":\"path-to-image\"}",
      NULL,
      NULL
    );
    

Una vez creado el transformador, puede aplicarlo a un editor mediante la función otc_publisher_set_video_transformers() función:

// Array of video transformers
otc_video_transformer *video_transformers[] = {
  background_blur
};

otc_publisher_set_video_transformers(publisher, video_transformers, 1);

El último parámetro de otc_publisher_set_video_transformers() es el tamaño del transformers array. En este ejemplo estamos aplicando un transformador de vídeo al editor. Puede aplicar varios transformadores añadiendo varios objetos otc_video_transformer a la matriz transformers que se pasa a otc_publisher_set_video_transformers().

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

Utiliza el otc_audio_transformer_create() para crear un transformador de audio que utilice un transformador con nombre de la biblioteca multimedia de Vonage.

Se admite un transformador:

  • Supresión de ruido.

    • Fije el type a OTC_MEDIA_TRANSFORMER_TYPE_VONAGE (definido en el SDK). Esto indica que estás usando un transformador de la biblioteca de medios de Vonage.
    • Fije el name a "NoiseSuppression".
    • Fije el properties a una cadena JSON que define las propiedades del transformador. Para el transformador de supresión de ruido, actualmente no hay propiedades, por lo que el formato de JSON es "".
    • Fije el callback a NULL. (Este parámetro se utiliza para transformadores de audio personalizados).
    • Fije el userData a NULL. (Este parámetro se utiliza para transformadores de audio personalizados).
    otc_audio_transformer *noise_suppression = otc_audio_transformer_create(
      OTC_MEDIA_TRANSFORMER_TYPE_VONAGE,
      "NoiseSuppression",
      "{}",
      NULL,
      NULL
    );
    

Una vez creado el transformador, puede aplicarlo a un editor mediante la función otc_publisher_set_audio_transformers() función:

// Array of audio transformers
otc_audio_transformer *audio_transformers[] = {
  noise_suppression
};

otc_publisher_set_audio_transformers(publisher, audio_transformers, 1);

El último parámetro de otc_publisher_set_audio_transformers() es el tamaño del transformers array. En este ejemplo estamos aplicando un transformador de audio al editor. Puede aplicar varios transformadores añadiendo varios objetos otc_audio_transformer a la matriz transformers que se pasa a otc_publisher_set_audio_transformers().

Creación de un transformador de vídeo personalizado

Utiliza el otc_video_transformer_create() para crear un transformador de vídeo.

  • Fije el type a OTC_MEDIA_TRANSFORMER_TYPE_CUSTOM (definido en el SDK). Esto indica que está creando un transformador personalizado.
  • Fije el name a un nombre único para su transformador.
  • Fije el properties parámetro NULL. (Este parámetro se utiliza cuando se utiliza un transformador de la biblioteca multimedia de Vonage).
  • Fije el callback a una función de devolución de llamada. Esta función es una instancia de la página video_transform_callback definido en el SDK. Esta función tiene dos parámetros: user_data -- ver el siguiente parámetro -- y frame -- una instancia del tipo otc_video_frame (definido en el SDK) que se pasa a la función callback cuando hay datos de fotogramas de vídeo disponibles. Transforme los datos del fotograma de vídeo en la función de devolución de llamada.
  • Fije el userData parámetro (opcional) a los datos de usuario que se pasarán en la función callback.

He aquí un ejemplo básico:

void on_transform_black_white(void* user_data, struct otc_video_frame* frame)
{
    // implement transformer on the otc_video_frame data
}

otc_video_transformer *black_white_border = otc_video_transformer_create(
  OTC_MEDIA_TRANSFORMER_TYPE_CUSTOM,
  "blacknwhite",
  NULL,
  on_transform_black_white,
  NULL
);

Una vez creado el transformador, puede aplicarlo a un editor mediante la función otc_publisher_set_video_transformers() función:

// Array of video transformers
otc_video_transformer *video_transformers[] = {
  black_white_border
};

otc_publisher_set_video_transformers(publisher, video_transformers, 1);

Creación de un transformador de audio personalizado

Utiliza el otc_audio_transformer_create() para crear un transformador de audio.

  • Fije el type a OTC_MEDIA_TRANSFORMER_TYPE_CUSTOM (definido en el SDK). Esto indica que está creando un transformador personalizado. (En esta versión, no se admiten se admiten transformadores de audio predefinidos de la biblioteca multimedia de Vonage).
  • Fije el name a un nombre único para su transformador.
  • Fije el properties parámetro NULL. (Este parámetro se utiliza cuando se utiliza un transformador de la biblioteca multimedia de Vonage).
  • Fije el callback a una función de devolución de llamada. Esta función es una instancia de la página audio_transform_callback definido en el SDK. Esta función tiene dos parámetros: user_data -- ver el siguiente parámetro -- y frame -- una instancia del tipo otc_audio_data (definido en el SDK) que se pasa a la función callback cuando hay datos de audio disponibles. Transforma los datos de audio en la función de devolución de llamada.
  • Fije el userData parámetro (opcional) a los datos de usuario que se pasarán en la función callback.

He aquí un ejemplo básico:

void on_transform_audio(void* user_data, struct otc_video_frame* frame)
{
    // implement transformer on the otc_audio_data audio data
}

otc_audio_transformer *lowpass_filter = otc_video_transformer_create(
  OTC_MEDIA_TRANSFORMER_TYPE_CUSTOM,
  "lowpassFilter",
  NULL,
  on_transform_audio,
  NULL
);

Una vez creado el transformador, puede aplicarlo a un editor mediante la función otc_publisher_set_audio_transformers() función:

// Array of audio transformers
otc_audio_transformer *audio_transformers[] = {
  lowpass_filter
};

otc_publisher_set_audio_transformers(publisher, audio_transformers, 1);

El último parámetro de otc_publisher_set_audio_transformers() es el tamaño del transformers array. En este ejemplo estamos aplicando un transformador de audio al editor. Puede aplicar varios transformadores añadiendo varios otc_audio_transformer objetos a la transformers que se pasa a otc_publisher_set_audio_transformers().

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

Para borrar los transformadores de vídeo de un editor, pase una matriz vacía al método otc_publisher_set_video_transformers() función.

otc_audio_transformer empty_array[] = {};
otc_publisher_set_video_transformers(publisher, empty_array, 0);

Utilice la otc_video_transformer_delete() para eliminar una instancia de otc_audio_transformer:

otc_video_transformer_delete(lowpass_filter);

Compensación de transformadores de audio para un editor

Para borrar los transformadores de audio de un editor, pase una matriz vacía al método otc_publisher_set_audio_transformers() función.

otc_video_transformer empty_array[] = {};
otc_publisher_set_audio_transformers(publisher, empty_array, 0);

Utiliza el otc_audio_transformer_delete() para eliminar una instancia de otc_audio_transformer:

otc_audio_transformer_delete(black_white_border);

Aplicación de ejemplo

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