Procesador multimedia (Windows)
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 Publisher.AudioTransformers y Publisher.VideoTransformers
para aplicar transformadores de audio y vídeo a un flujo.
El SDK de Vonage Video Windows 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 desde 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 tu propio transformadores de vídeo personalizados y transformadores de audio personalizados.
Requisitos del sistema
Se recomiendan las GPU NVIDIA para obtener un rendimiento óptimo al utilizar los transformadores de la biblioteca multimedia de Vonage.
Pruebe en otras configuraciones 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.
Windows 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 configurar el sistema operativo para que utilice el modo de mejor rendimiento (o para que no utilice 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.2 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 2.27.2, 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.
Existe un paquete nuget con el nombre "Vonage.Client.Video.Transformers". Instálelo en su proyecto.
Si una llamada a VideoTransformer(string name, string properties) o AudioTransformer(string name, string 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 VideoTransformer(string name, string 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
namea"BackgroundBlur". Y establecer unpropertiesa una cadena JSON. El formato del JSON es "{"radius": "None"}". Valores válidos para el parámetroradiusson "Ninguno", "Alto" y "Bajo". 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).VideoTransformer backgroundBlur = new VideoTransformer("BackgroundBlur", "{\"radius\":\"High\"}"); List<VideoTransformer> transformers = new ArrayList<VideoTransformer> { backgroundBlur }; publisher.VideoTransformers = transformers;Sustitución de antecedentes. Para este filtro, establezca los valores
namea"BackgroundReplacement". Y establecer unpropertiesa una cadena JSON. El formato del JSON es "{"ruta_archivo_imagen": "ruta/a/imagen"}", 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.VideoTransformer backgroundReplacement = new VideoTransformer("BackgroundReplacement", "{\"image_file_path\":\"path-to-image\"}"); List<VideoTransformer> transformers = new ArrayList<VideoTransformer> { backgroundReplacement }; publisher.VideoTransformers = transformers;
Aplicación de un transformador de audio desde la biblioteca multimedia de Vonage
Utiliza el AudioTransformer(cadena nombre, cadena propiedades)
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. Para este filtro, establezca los valores
namea"NoiseSuppression". Ajuste elpropertiesa 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"".AudioTransformer noiseSuppression = new AudioTransformer("NoiseSuppression", ""); List<AudioTransformer> transformers = new ArrayList<AudioTransformer> { noiseSuppression }; publisher.AudioTransformers = transformers;
Creación de un transformador de vídeo personalizado
Crear una clase que implemente el métodoICustomVideoTransformer
interfaz. Implementar la interfaz ICustomVideoTransformer.Transform() aplicando una transformación al VideoFrame pasado al método.
La dirección ICustomVideoTransformer.Transform para cada fotograma de vídeo:
public class MyCustomTransformer : IVideoTransformer
{
public void Transform(VideoFrame frame)
{
// transformer implementation
PixelFormat pixelFormat = frame.PixelFormat;
int numberOfPlanes = frame.NumberOfPlanes;
//invert U and V planes
IntPtr[] planes = new IntPtr[] { frame.GetPlane(0), frame.GetPlane(2), frame.GetPlane(1) };
int[] strides = new int[] { frame.GetPlaneStride(0), frame.GetPlaneStride(2), frame.GetPlaneStride(1) };
frame.ConvertInPlace(pixelFormat, planes, strides);
}
}
A continuación, ajuste el PublisherKit.VideoTransformers a una matriz que incluye el objeto que implementa la interfaz
OTCustomVideoTransformer:
MyCustomTransformer myCustomTransformer = new();
List<VideoTransformer> transformers = new ArrayList<VideoTransformer>
{
myCustomTransformer
};
publisher.VideoTransformers = transformers;
Puedes combinar el transformador de la biblioteca multimedia de Vonage (consulta la sección anterior) con transformadores personalizados o aplicar
múltiples transformadores personalizados agregando múltiples objetos VideoTransformer a la ArrayList utilizada
para el PublisherKit.VideoTransformers propiedad.
Creación de un transformador de audio personalizado
Crear una clase que implemente el método ICustomAudioTransformer
interfaz. Implementar la interfaz ICustomAudioTransformer.Transform() método, aplicando una transformación
a la AudioData pasado al método. La dirección CustomAudioTransformer.Transform() método
se activa para cada fotograma de audio. El siguiente ejemplo aplica un limitador de amplitud simple en
el audio:
public class MyCustomTransformer : IAudioTransformer
{
private const short CROP_LIMIT = (short)(short.MaxValue * 0.5);
public unsafe void Transform(AudioData frame)
{
// transformer implementation
short* data = (short*)frame.SampleBuffer;
int samplesXChannels = (int)frame.NumberOfSamples * (int)frame.NumberOfChannels;
for (int s = 0; s < samplesXChannels; ++s)
{
if (data[s] > CROP_LIMIT)
data[s] = CROP_LIMIT;
else if (data[s] < -CROP_LIMIT)
data[s] = -CROP_LIMIT;
}
}
}
A continuación, ajuste el OTPublisherKit.AudioTransformers a un array que incluye el objeto que implementa la interfaz
CustomAudioTransformer:
MyCustomTransformer myCustomTransformer = new();
List<VideoTransformer> transformers = new ArrayList<VideoTransformer>
{
myCustomTransformer
};
publisher.AudioTransformers = transformers;
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 Publisher.VideoTransformers a una matriz vacía.
publisher.VideoTransformers = new ArrayList<VideoTransformer> {};
Compensación de transformadores de audio para un editor
Para borrar los transformadores de audio de un editor, establezca el parámetro Publisher.AudioTransformers a una matriz vacía.
publisher.AudioTransformers = new ArrayList<AudioTransformer> {};
Aplicación de ejemplo
Véase esta muestra en el vonage-video-windows-sdk-samples en GitHub.