Uso de la biblioteca «Vonage Media Processor» y aplicación de transformaciones multimedia
Puedes utilizar los transformadores predefinidos de la biblioteca de Vonage Media Processor o crear tu propio transformador de audio o vídeo personalizado para aplicarlo al vídeo publicado.
Puedes utilizar el 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:
-
Moderado - Para vídeo, puede aplicar los transformadores de vídeo de desenfoque de fondo y de sustitución de fondo incluidos en la función Biblioteca multimedia de Vonage. Véase Aplicación de un transformador de vídeo de la biblioteca multimedia de Vonage. Para el audio, puede aplicar el transformador de audio con supresión de ruido incluido en el Biblioteca multimedia de Vonage. Véase Aplicación de un transformador de audio desde la biblioteca multimedia de Vonage.
-
Avanzado — Puedes crear el tuyo propio transformadores de vídeo personalizados y transformadores de audio personalizados.
Requisitos del sistema
Actualmente, los transformadores de Vonage Media Library solo son compatibles con los Mac con Apple Silicon.
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 En esos casos, utiliza el modo de bajo consumo.
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 con la biblioteca multimedia de Vonage
Debido al considerable aumento de tamaño que supone la integración de Vonage Media Library en el SDK, a partir de la versión 2.27.3 del SDK de OpenTok, los transformadores multimedia están disponibles a través de la biblioteca opcional Vonage Media Library. Esta biblioteca debe añadirse explícitamente al proyecto.
La biblioteca multimedia de Vonage se integró inicialmente en el SDK de OpenTok. Si tu versión del SDK de OpenTok es anterior a la 2.27.3, ve directamente a Aplicación de un transformador de vídeo de 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 se realiza una llamada a otc_video_transformer_create() u otc_audio_transformer_create() sin haber cargado la biblioteca, el transformador devuelto será nulo. Debes utilizar errno, una variable global que las llamadas al sistema establecen en caso de error para indicar qué ha fallado. Está definida en el encabezado «». El código de error correspondiente a la falta de la biblioteca es 0x0A000006.
Aplicación de un transformador de vídeo de la biblioteca multimedia de Vonage
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.
Se admiten dos transformadores:
-
Desenfoque de fondo.
- Fije el
typeparámetro aOTC_MEDIA_TRANSFORMER_TYPE_VONAGE(definido en el SDK). Esto indica que estás utilizando un transformador de la biblioteca multimedia de Vonage. - Fije el
nameparámetro a"BackgroundBlur". - Fije el
propertiesa 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ámetroradiusson "Ninguno", "Alto", "Bajo" y "Personalizado". Si establece la propiedadradiusa "Personalizado", añada una propiedadcustom_radiusa la propiedad JSON string: "{"radio": "Personalizado", "radio_personalizado": "valor"}" (dondecustom_radiuses un número entero positivo que define el radio de desenfoque). - Fije el
callbackparámetro aNULL. (Este parámetro se utiliza para los transformadores de vídeo personalizados). - Fije el
userDataparámetro aNULL. (Este parámetro se utiliza para los transformadores de vídeo personalizados).
Copiaotc_video_transformer *backgroundBlur = otc_video_transformer_create( OTC_MEDIA_TRANSFORMER_TYPE_VONAGE, "BackgroundBlur", "{\"radius\":\"High\"}", NULL, NULL ); - Fije el
-
Sustitución de antecedentes.
- Fije el
typeparámetro aOTC_MEDIA_TRANSFORMER_TYPE_VONAGE(definido en el SDK). Esto indica que estás utilizando un transformador de la biblioteca multimedia de Vonage. - Fije el
nameparámetro a"BackgroundReplacement". - Fije el
propertiesparámetro a una cadena JSON que define las propiedades del transformador. En el caso del transformador de sustitución de fondo, el formato del JSON es «{"image_file_path":"path/to/image"}», dondeimage_file_pathes 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
callbackparámetro aNULL. (Este parámetro se utiliza para los transformadores de vídeo personalizados). - Fije el
userDataparámetro aNULL. (Este parámetro se utiliza para los transformadores de vídeo personalizados).
Copiaotc_video_transformer *backgroundReplacement = otc_video_transformer_create( OTC_MEDIA_TRANSFORMER_TYPE_VONAGE, "BackgroundReplacement", "{\"image_file_path\":\"path-to-image\"}", NULL, NULL ); - Fije el
Una vez creado el transformador, puedes aplicarlo a un editor mediante el 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 de la 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
typeparámetro aOTC_MEDIA_TRANSFORMER_TYPE_VONAGE(definido en el SDK). Esto indica que estás utilizando un transformador de la biblioteca multimedia de Vonage. - Fije el
nameparámetro a"NoiseSuppression". - Fije el
propertiesparámetro a una cadena JSON que define las propiedades del transformador. En el caso del transformador de supresión de ruido, actualmente no hay propiedades, por lo que el formato del JSON es «». - Fije el
callbackparámetro aNULL. (Este parámetro se utiliza para transformadores de audio personalizados.) - Fije el
userDataparámetro aNULL. (Este parámetro se utiliza para transformadores de audio personalizados.)
Copiaotc_audio_transformer *noise_suppression = otc_audio_transformer_create( OTC_MEDIA_TRANSFORMER_TYPE_VONAGE, "NoiseSuppression", "{}", NULL, NULL ); - Fije el
Una vez creado el transformador, puedes aplicarlo a un editor mediante el 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 de la transformers matriz.
En este ejemplo, estamos aplicando un transformador de audio al editor. Puedes aplicar varios transformadores
añadiendo varios objetos `otc_audio_transformer` al 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() función para crear un transformador de vídeo.
- Fije el
typeparámetro aOTC_MEDIA_TRANSFORMER_TYPE_CUSTOM(definido en el SDK). Esto indica que estás creando un transformador personalizado. - Fije el
namea un nombre único para su transformador. - Fije el
propertiesparámetroNULL. (Este parámetro se utiliza cuando se emplea un transformador de la biblioteca multimedia de Vonage.) - Fije el
callbacka una función de devolución de llamada. Esta función es una instancia de la páginavideo_transform_callbacktipo, definido en el SDK. Esta función tiene dos parámetros:user_data-- ver el siguiente parámetro -- yframe-- una instancia de tipootc_video_frame(definido en el SDK) se pasa a la función de devolución de llamada cuando hay datos de fotograma de vídeo disponibles. Transforma los datos del fotograma de vídeo en la función de devolución de llamada. - Fije el
userDataparámetro (opcional) para los datos de usuario que se pasarán a la función de devolución de llamada.
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, puedes aplicarlo a un editor mediante el 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
typeparámetro aOTC_MEDIA_TRANSFORMER_TYPE_CUSTOM(definido en el SDK). Esto indica que estás creando un transformador personalizado. (En esta versión, no se admiten los transformadores de audio predefinidos de la biblioteca multimedia de Vonage.) - Fije el
namea un nombre único para su transformador. - Fije el
propertiesparámetroNULL. (Este parámetro se utiliza cuando se emplea un transformador de la biblioteca multimedia de Vonage.) - Fije el
callbacka una función de devolución de llamada. Esta función es una instancia de la páginaaudio_transform_callbacktipo, definido en el SDK. Esta función tiene dos parámetros:user_data-- ver el siguiente parámetro -- yframe-- una instancia de tipootc_audio_data(definido en el SDK) se pasa a la función de llamada de retorno cuando hay datos de audio disponibles. Transforma los datos de audio en la función de llamada de retorno. - Fije el
userDataparámetro (opcional) para los datos de usuario que se pasarán a la función de devolución de llamada.
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, puedes aplicarlo a un editor mediante el 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 de la transformers matriz.
En este ejemplo, estamos aplicando un transformador de audio al editor. Puedes 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, pasa una matriz vacía a la función
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);
Utilice la 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 repositorio «opentok-macos-sdk-samples» de GitHub.