Compartir vía


Inicio rápido: Adición de efectos de vídeo a videollamadas

La característica Efectos de vídeo se puede usar para agregar efectos al vídeo en videollamadas. Permite a los desarrolladores crear efectos visuales de fondo y sustituir el vídeo en segundo plano en las llamadas. El desenfoque del fondo proporciona a los usuarios un mecanismo para eliminar las distracciones que pueda haber detrás de un participante para que los participantes puedan comunicarse sin actividad molesta ni información confidencial en segundo plano. Esto es especialmente útil en el contexto de la telemedicina, donde un proveedor o un paciente podría querer ocultar su entorno para proteger información confidencial o información de identificación personal. El desenfoque del fondo se puede aplicar en todos los escenarios de citas virtuales, incluidas la banca telefónica y las audiencias virtuales, para proteger la privacidad del usuario. Además de aumentar la confidencialidad, el desenfoque del fondo mejora la creatividad de expresión, ya que permite a los usuarios cargar fondos personalizados para que las llamadas sean más divertidas y personalizadas.

Nota:

La biblioteca de efectos para llamadas no se puede usar de forma independiente y solo puede funcionar cuando se usa con la biblioteca cliente de llamadas de Azure Communication para WebJS (https://www.npmjs.com/package/@azure/communication-calling).

Uso de efectos de vídeo

Instalar el paquete

Importante

El desenfoque en segundo plano y el reemplazo de fondo para exploradores de escritorio web está en disponibilidad general. En este inicio rápido se usa la versión del SDK de llamadas de Azure Communication Services de 1.13.1 (o superior) y la versión del SDK de efectos de llamada de Azure Communication Services mayor o igual que 1.0.1. Actualmente, la compatibilidad del explorador para crear efectos de vídeo en segundo plano solo se admite en los exploradores de escritorio Chrome y Edge (Windows y Mac) y Mac Safari Desktop.

Nota:

El desenfoque de fondo y el reemplazo de fondo para Android Chrome y Android Edge mobile browser está disponible en versión preliminar pública a partir de la compilación 1.29.1 y versiones posteriores del SDK de WebJS beta.

Use el comando npm install para instalar el SDK de efectos de Azure Communication Services para JavaScript.

npm install @azure/communication-calling-effects --save

Para más información, consulte aquí para más detalles sobre la página del paquete npm de efectos de comunicación en las llamadas.

Nota:

Actualmente hay dos efectos de vídeo disponibles:

  • Desenfoque de fondo
  • Reemplazo de fondo con una imagen (la relación de aspecto debe ser 16:9 para ser compatible)

Para usar efectos de vídeo con el SDK de llamadas de Azure Communication, una vez creado un LocalVideoStream, debe obtener la API de la característica VideoEffects de LocalVideoStream para iniciar o detener los efectos de vídeo:

import * as AzureCommunicationCallingSDK from '@azure/communication-calling'; 

import { BackgroundBlurEffect, BackgroundReplacementEffect } from '@azure/communication-calling-effects'; 

// Get the video effects feature api on the LocalVideoStream 
// (here, localVideoStream is the LocalVideoStream object you created while setting up video calling)
const videoEffectsFeatureApi = localVideoStream.feature(AzureCommunicationCallingSDK.Features.VideoEffects); 


// Subscribe to useful events 
videoEffectsFeatureApi.on(‘effectsStarted’, () => { 
    // Effects started
});

videoEffectsFeatureApi.on(‘effectsStopped’, () => { 
    // Effects stopped
}); 

videoEffectsFeatureApi.on(‘effectsError’, (error) => { 
    // Effects error
});

Desenfoque de fondo

// Create the effect instance 
const backgroundBlurEffect = new BackgroundBlurEffect(); 

// Recommended: Check support by using the isSupported method on the feature API
const backgroundBlurSupported = await videoEffectsFeatureApi.isSupported(backgroundBlurEffect);

if (backgroundBlurSupported) { 
    // Use the video effects feature api we created to start effects
    await videoEffectsFeatureApi.startEffects(backgroundBlurEffect); 
}

Reemplazo de fondo con una imagen

Debe proporcionar la dirección URL de la imagen que desea como fondo para este efecto.

Importante

El método startEffects no funcionará si la dirección URL no es de una imagen o no se puede acceder a ella o leerla.

Nota:

Los formatos de imagen compatibles actualmente son: png, jpg, jpeg, tiff, bmp.

La relación de aspecto admitida actualmente es 16:9.

const backgroundImage = 'https://linkToImageFile'; 

// Create the effect instance 
const backgroundReplacementEffect = new BackgroundReplacementEffect({ 
    backgroundImageUrl: backgroundImage
}); 

// Recommended: Check support by using the isSupported method on the feature API
const backgroundReplacementSupported = await videoEffectsFeatureApi.isSupported(backgroundReplacementEffect);

if (backgroundReplacementSupported) { 
    // Use the video effects feature api as before to start/stop effects 
    await videoEffectsFeatureApi.startEffects(backgroundReplacementEffect); 
}

Para cambiar la imagen de este efecto, es preciso usar el método configure:

const newBackgroundImage = 'https://linkToNewImageFile'; 

await backgroundReplacementEffect.configure({ 
    backgroundImageUrl: newBackgroundImage
});

El cambio de efectos de conmutación se puede realizar mediante el mismo método en la API de características efectos de vídeo:

// Switch to background blur 
await videoEffectsFeatureApi.startEffects(backgroundBlurEffect); 

// Switch to background replacement 
await videoEffectsFeatureApi.startEffects(backgroundReplacementEffect);

En cualquier momento si desea comprobar qué efectos están activos, puede usar la propiedad activeEffects. La propiedad activeEffects devuelve una matriz con los nombres de los efectos activos actuales y devuelve una matriz vacía si no hay ningún efecto activo.

// Using the video effects feature api
const currentActiveEffects = videoEffectsFeatureApi.activeEffects;

Para detener los efectos:

await videoEffectsFeatureApi.stopEffects();

Nota:

Para usar efectos de vídeo en el SDK de llamadas de iOS, se descarga un modelo de aprendizaje automático en el dispositivo del cliente. Le recomendamos que revise las notas de privacidad de su aplicación y las actualice en consecuencia, si es necesario.

La característica Efectos de vídeo se puede usar para agregar efectos al vídeo en videollamadas. El desenfoque del fondo proporciona a los usuarios un mecanismo para eliminar las distracciones que pueda haber detrás de un participante para que los participantes puedan comunicarse sin actividad molesta ni información confidencial en segundo plano. Esta característica es especialmente útil en el contexto de la telemedicina, donde un proveedor o un paciente podría querer ocultar su entorno para proteger información confidencial o datos personales. El desenfoque del fondo se puede aplicar en todos los escenarios de citas virtuales, incluidas la banca telefónica y las audiencias virtuales, para proteger la privacidad del usuario.

Uso de efectos de vídeo

Nota:

La compatibilidad con efectos de vídeo en iOS se limita a las dos versiones principales más recientes de iOS. Por ejemplo, cuando se publica una nueva versión principal de iOS, el requisito de iOS consiste en la nueva versión y las versiones más recientes que la preceden.

Actualmente hay un efecto de vídeo disponible: desenfoque de fondo.

El objeto LocalVideoEffectsFeature tiene la siguiente estructura de API:

  • enable: habilita un efecto de vídeo en la instancia de LocalVideoStream.
  • disable: deshabilita un efecto de vídeo en la instancia de LocalVideoStream.
  • isSupported: indica si se admite un efecto de vídeo en la instancia LocalVideoStream.
  • onVideoEffectEnabled: evento que se desencadena cuando un efecto de vídeo se ha habilitado correctamente.
  • onVideoEffectDisabled: evento que se desencadena cuando un efecto de vídeo se ha deshabilitado correctamente.
  • onVideoEffectError: evento que se desencadena cuando se produce un error en una operación de efecto de vídeo.

Una vez que tenga el objeto LocalVideoEffectsFeature, puede suscribirse a los eventos. Estos tienen los siguientes delegados: didEnableVideoEffect, didDisableVideoEffect, didReceiveVideoEffectError.

Para usar efectos de vídeo con el SDK de llamadas de Azure Communication, una vez creado un LocalVideoStream, debe obtener la API de la característica VideoEffects de LocalVideoStream para habilitar/deshabilitar los efectos de vídeo:

// Obtain the Video Effects feature from the LocalVideoStream object that is sending the video.
@State var localVideoEffectsFeature: LocalVideoEffectsFeature?
localVideoEffectsFeature = self.localVideoStreams.first.feature(Features.localVideoEffects)
// Subscribe to the events
public func localVideoEffectsFeature(_ videoEffectsLocalVideoStreamFeature: LocalVideoEffectsFeature, didEnableVideoEffect args: VideoEffectEnabledEventArgs) {
        os_log("Video Effect Enabled, VideoEffectName: %s", log:log, args.videoEffectName)
    }
public func localVideoEffectsFeature(_ videoEffectsLocalVideoStreamFeature: LocalVideoEffectsFeature, didDisableVideoEffect args: VideoEffectDisabledEventArgs) {
    os_log("Video Effect Disabled, VideoEffectName: %s", log:log, args.videoEffectName)
}
public func localVideoEffectsFeature(_ videoEffectsLocalVideoStreamFeature: LocalVideoEffectsFeature, didReceiveVideoEffectError args: VideoEffectErrorEventArgs) {
    os_log("Video Effect Error, VideoEffectName: %s, Code: %s, Message: %s", log:log, args.videoEffectName, args.code, args.message)
}

y empezar a usar las API para habilitar y deshabilitar los efectos de vídeo:

localVideoEffectsFeature.enable(effect: backgroundBlurVideoEffect)
localVideoEffectsFeature.disable(effect: backgroundBlurVideoEffect)

Desenfoque de fondo

El desenfoque de fondo es un efecto de vídeo que permite desenfocar el fondo de una persona. Para usar efectos de vídeo en segundo plano, debe obtener una característica LocalVideoEffectsFeature de un LocalVideoStream válido.

  • Cree un nuevo objeto efecto de vídeo de desenfoque de fondo:
@State var backgroundBlurVideoEffect: BackgroundBlurEffect?
  • Compruebe si BackgroundBlurEffect se admite y llame a Enable en el objeto videoEffectsFeature:
if((localVideoEffectsFeature.isSupported(effect: backgroundBlurVideoEffect)) != nil)
{
    localVideoEffectsFeature.enable(effect: backgroundBlurVideoEffect)
}

Para deshabilitar el efecto de vídeo de desenfoque de fondo:

localVideoEffectsFeature.disable(effect: backgroundBlurVideoEffect)

Reemplazo de fondo

El reemplazo de fondo es un efecto de vídeo que permite a una persona establecer su propio fondo personalizado. Para usar efectos de reemplazo de fondo, debe obtener una característica LocalVideoEffectsFeature de un LocalVideoStream válido.

  • Cree un nuevo objeto Efecto de vídeo de reemplazo de fondo:
@State var backgroundReplacementVideoEffect: BackgroundReplacementEffect?
  • Establezca un fondo personalizado pasando la imagen a través de un búfer.
let image = UIImage(named:"image.png")
guard let imageData = image?.jpegData(compressionQuality: 1.0) else {
return
}
backgroundReplacementVideoEffect.buffer = imageData
  • Compruebe si BackgroundReplacementEffect se admite y llame a Enable en el objeto videoEffectsFeature:
if((localVideoEffectsFeature.isSupported(effect: backgroundReplacementVideoEffect)) != nil)
{
    localVideoEffectsFeature.enable(effect: backgroundReplacementVideoEffect)
}

Para deshabilitar el efecto de vídeo de reemplazo de fondo:

localVideoEffectsFeature.disable(effect: backgroundReplacementVideoEffect)

Nota:

Para usar efectos de vídeo en el SDK de llamadas de Android, se descarga un modelo de aprendizaje automático en el dispositivo del cliente. Le recomendamos que revise las notas de privacidad de su aplicación y las actualice en consecuencia, si es necesario.

La característica Efectos de vídeo se puede usar para agregar efectos al vídeo en videollamadas. El desenfoque del fondo proporciona a los usuarios un mecanismo para eliminar las distracciones que pueda haber detrás de un participante para que los participantes puedan comunicarse sin actividad molesta ni información confidencial en segundo plano. Esta característica es especialmente útil en el contexto de la telemedicina, donde un proveedor o un paciente podría querer ocultar su entorno para proteger información confidencial o datos personales. El desenfoque del fondo se puede aplicar en todos los escenarios de citas virtuales, incluidas la banca telefónica y las audiencias virtuales, para proteger la privacidad del usuario.

Este inicio rápido se basa en Inicio rápido: Adición de llamadas de vídeo 1:1 a la aplicación para Android.

Uso de efectos de vídeo

Nota:

La compatibilidad con efectos de vídeo en Android se limita a las cuatro últimas versiones principales de Android. Por ejemplo, cuando se publica una nueva versión principal de Android, el requisito de Android consiste en la nueva versión y las tres versiones más recientes que la preceden.

Actualmente hay un efecto de vídeo disponible: desenfoque de fondo.

El objeto VideoEffectsLocalVideoStreamFeature tiene la siguiente estructura de API:

  • enableEffect: habilita un efecto de vídeo en la instancia de LocalVideoStream.
  • disableEffect: deshabilita un efecto de vídeo en la instancia de LocalVideoStream.
  • OnVideoEffectEnabledListener: evento que se desencadena cuando un efecto de vídeo se ha habilitado correctamente.
  • OnVideoEffectDisabledListener: evento que se desencadena cuando un efecto de vídeo se ha deshabilitado correctamente.
  • OnVideoEffectErrorListener: evento que se desencadena cuando se produce un error en una operación de efecto de vídeo.

Los objetos VideoEffectEnabledEvent, VideoEffectDisabledEvent y VideoEffectErrorEvent tienen la siguiente estructura de API:

  • getVideoEffectName: obtiene el nombre del efecto de vídeo que desencadenó el evento.

Una vez que tenga el objeto VideoEffectsLocalVideoStreamFeature, puede suscribirse a los eventos:

Para usar efectos de vídeo con el SDK de llamadas de Azure Communication, una vez creado un LocalVideoStream, debe obtener la API de la característica VideoEffects de LocalVideoStream para habilitar/deshabilitar los efectos de vídeo:

// Obtain the Video Effects feature from the LocalVideoStream object that is sending the video.
VideoEffectsLocalVideoStreamFeature videoEffectsFeature = currentVideoStream.feature(Features.LOCAL_VIDEO_EFFECTS);
// Create event handlers for the events
private void handleOnVideoEffectEnabled(VideoEffectEnabledEvent args) {
}
private void handleOnVideoEffectDisabled(VideoEffectDisabledEvent args) {
}
private void handleOnVideoEffectError(VideoEffectErrorEvent args) {
}
 
// Subscribe to the events
videoEffectsFeature.addOnVideoEffectEnabledListener(this::handleOnVideoEffectEnabled);
videoEffectsFeature.addOnVideoEffectDisabledListener(this::handleOnVideoEffectDisabled);
videoEffectsFeature.addOnVideoEffectErrorListener(this::handleOnVideoEffectError);

y empezar a usar las API para habilitar y deshabilitar los efectos de vídeo:

videoEffectsFeature.enableEffect( {{VIDEO_EFFECT_TO_DISABLE}} );
videoEffectsFeature.disableEffect( {{VIDEO_EFFECT_TO_DISABLE}} );

Desenfoque de fondo

El desenfoque de fondo es un efecto de vídeo que permite desenfocar el fondo de una persona. Para usar efectos de vídeo en segundo plano, debe obtener una característica VideoEffectsLocalVideoStreamFeature de un LocalVideoStream válido.

Para habilitar el efecto de vídeo de desenfoque de fondo:

  • Cree un método que obtenga la característica VideoEFfects se suscribe a los eventos:
private void handleOnVideoEffectEnabled(VideoEffectEnabledEvent args) {
   Log.i("VideoEffects", "Effect enabled for effect " + args.getVideoEffectName());
}
private void handleOnVideoEffectDisabled(VideoEffectDisabledEvent args) {
   Log.i("VideoEffects", "Effect disabled for effect " + args.getVideoEffectName());
}
private void handleOnVideoEffectError(VideoEffectErrorEvent args) {
   Log.i("VideoEffects", "Error " + args.getCode() + ":" + args.getMessage()
           + " for effect " + args.getVideoEffectName());
}

VideoEffectsLocalVideoStreamFeature videoEffectsFeature;
public void createVideoEffectsFeature() {
    videoEffectsFeature = currentVideoStream.feature(Features.LOCAL_VIDEO_EFFECTS);
    videoEffectsFeature.addOnVideoEffectEnabledListener(this::handleOnVideoEffectEnabled);
    videoEffectsFeature.addOnVideoEffectDisabledListener(this::handleOnVideoEffectDisabled);
    videoEffectsFeature.addOnVideoEffectErrorListener(this::handleOnVideoEffectError);
}

  • Cree un nuevo objeto efecto de vídeo de desenfoque de fondo:
BackgroundBlurEffect backgroundBlurVideoEffect = new BackgroundBlurEffect();
  • Llame a EnableEffect en el objeto videoEffectsFeature:
public void enableBackgroundBlur() {
    videoEffectsFeature.enableEffect(backgroundBlurEffect);
}

Para deshabilitar el efecto de vídeo de desenfoque de fondo:

public void disableBackgroundBlur() {
    videoEffectsFeature.disableEffect(backgroundBlurEffect);
}

Reemplazo de fondo

El reemplazo de fondo es un efecto de vídeo que permite reemplazar el fondo de una persona. Para usar efectos de vídeo en segundo plano, debe obtener una característica VideoEffectsLocalVideoStreamFeature de un LocalVideoStream válido.

Para habilitar el efecto de vídeo de reemplazo de fondo:

  • Cree un método que obtenga la característica VideoEFfects se suscribe a los eventos:
private void handleOnVideoEffectEnabled(VideoEffectEnabledEvent args) {
   Log.i("VideoEffects", "Effect enabled for effect " + args.getVideoEffectName());
}
private void handleOnVideoEffectDisabled(VideoEffectDisabledEvent args) {
   Log.i("VideoEffects", "Effect disabled for effect " + args.getVideoEffectName());
}
private void handleOnVideoEffectError(VideoEffectErrorEvent args) {
   Log.i("VideoEffects", "Error " + args.getCode() + ":" + args.getMessage()
           + " for effect " + args.getVideoEffectName());
}

VideoEffectsLocalVideoStreamFeature videoEffectsFeature;
public void createVideoEffectsFeature() {
    videoEffectsFeature = currentVideoStream.feature(Features.LOCAL_VIDEO_EFFECTS);
    videoEffectsFeature.addOnVideoEffectEnabledListener(this::handleOnVideoEffectEnabled);
    videoEffectsFeature.addOnVideoEffectDisabledListener(this::handleOnVideoEffectDisabled);
    videoEffectsFeature.addOnVideoEffectErrorListener(this::handleOnVideoEffectError);
}

  • Cree un nuevo objeto Efecto de vídeo de reemplazo de fondo:
BackgroundReplacementEffect backgroundReplacementVideoEffect = new BackgroundReplacementEffect();
  • Establezca un fondo personalizado pasando la imagen a través de un búfer.
//example of where we can get an image from, in this case, this is from assets in Android folder
InputStream inputStream = getAssets().open("image.jpg");
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] data = stream.toByteArray();
ByteBuffer dataBuffer = ByteBuffer.allocateDirect(data.length);
dataBuffer.put(data);
dataBuffer.rewind();
backgroundReplacementVideoEffect.setBuffer(dataBuffer);
  • Llame a EnableEffect en el objeto videoEffectsFeature:
public void enableBackgroundReplacement() {
    videoEffectsFeature.enableEffect(backgroundReplacementVideoEffect);
}

Para deshabilitar el efecto de vídeo de reemplazo de fondo:

public void disableBackgroundReplacement() {
    videoEffectsFeature.disableEffect(backgroundReplacementVideoEffect);
}

Nota:

Para usar efectos de vídeo en el SDK de llamadas de Windows, se descarga un modelo de aprendizaje automático en el dispositivo del cliente. Le recomendamos que revise las notas de privacidad de su aplicación y las actualice en consecuencia, si es necesario.

La característica Efectos de vídeo se puede usar para agregar efectos al vídeo en videollamadas. El desenfoque del fondo proporciona a los usuarios un mecanismo para eliminar las distracciones que pueda haber detrás de un participante para que los participantes puedan comunicarse sin actividad molesta ni información confidencial en segundo plano. Esta característica es especialmente útil en el contexto de la telemedicina, donde un proveedor o un paciente podría querer ocultar su entorno para proteger información confidencial o datos personales. El desenfoque del fondo se puede aplicar en todos los escenarios de citas virtuales, incluidas la banca telefónica y las audiencias virtuales, para proteger la privacidad del usuario.

Este inicio rápido se basa en el Inicio rápido: Adición de llamadas de vídeo 1:1 a la aplicación para Windows.

Uso de efectos de vídeo

Actualmente hay un efecto de vídeo disponible: desenfoque de fondo.

El objeto VideoEffectsLocalVideoStreamFeature tiene la siguiente estructura de API:

  • EnableEffect: habilita un efecto de vídeo en la instancia de LocalVideoStream.
  • DisableEffect: deshabilita un efecto de vídeo en la instancia de LocalVideoStream.
  • VideoEffectEnabled: evento que se desencadena cuando un efecto de vídeo se ha habilitado correctamente.
  • VideoEffectDisabledListener: evento que se desencadena cuando un efecto de vídeo se ha deshabilitado correctamente.
  • VideoEffectErrorListener: evento que se desencadena cuando se produce un error en una operación de efecto de vídeo.

Los objetos VideoEffectEnabledEvent, VideoEffectDisabledEvent y VideoEffectErrorEvent tienen la siguiente estructura de API:

  • VideoEffectName: obtiene el nombre del efecto de vídeo que desencadenó el evento.

Una vez que tenga el objeto VideoEffectsLocalVideoStreamFeature, puede suscribirse a los eventos:

Para usar efectos de vídeo con el SDK de llamadas de comunicación de Azure, agregue las variables a MainPage.

public sealed partial class MainPage : Page
{
    private LocalVideoEffectsFeature localVideoEffectsFeature;
}

Una vez haya creado un LocalVideoStream, necesita obtener la API de la característica de VideoEffects del LocalVideoStream para activar/desactivar los efectos de vídeo.

private async void CameraList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    var selectedCamera = CameraList.SelectedItem as VideoDeviceDetails;
    cameraStream = new LocalOutgoingVideoStream(selectedCamera);
    InitVideoEffectsFeature(cameraStream);
    
    var localUri = await cameraStream.StartPreviewAsync();
    await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
    {
        LocalVideo.Source = MediaSource.CreateFromUri(localUri);
    });
}

public void InitVideoEffectsFeature(LocalOutgoingVideoStream videoStream){
    localVideoEffectsFeature = videoStream.Features.VideoEffects;
    localVideoEffectsFeature.VideoEffectEnabled += LocalVideoEffectsFeature_VideoEffectEnabled;
    localVideoEffectsFeature.VideoEffectDisabled += LocalVideoEffectsFeature_VideoEffectDisabled;
    localVideoEffectsFeature.VideoEffectError += LocalVideoEffectsFeature_VideoEffectError;
}

// Create event handlers for the events
private void LocalVideoEffectsFeature_VideoEffectEnabled(object sender, VideoEffectEnabledEventArgs args)
{
}

private void LocalVideoEffectsFeature_VideoEffectDisabled(object sender, VideoEffectDisabledEventArgs args)
{
}

private void LocalVideoEffectsFeature_VideoEffectError(object sender, VideoEffectErrorEventArgs args)
{
}
 
// Subscribe to the events
videoEffectsFeature.VideoEffectEnabled += VideoEffectsFeature_OnVideoEffectEnabled;
videoEffectsFeature.VideoEffectDisabled += VideoEffectsFeature_OnVideoEffectDisabled;
videoEffectsFeature.VideoEffectError += VideoEffectsFeature_OnVideoEffectError;

y empezar a usar las API para habilitar y deshabilitar los efectos de vídeo:

videoEffectsLocalVideoStreamFeature.EnableEffect( {{VIDEO_EFFECT_TO_ENABLE}} );
videoEffectsLocalVideoStreamFeature.DisableEffect( {{VIDEO_EFFECT_TO_DISABLE}} );

Desenfoque de fondo

El desenfoque de fondo es un efecto de vídeo que permite desenfocar el fondo de una persona. Para usar efectos de vídeo en segundo plano, debe obtener una característica VideoEffectsLocalVideoStreamFeature de un LocalVideoStream válido.

Para habilitar el efecto de vídeo de desenfoque de fondo:

  • Agregue la instancia de BackgroundBlurEffect a MainPage.
public sealed partial class MainPage : Page
{
    private BackgroundBlurEffect backgroundBlurVideoEffect = new BackgroundBlurEffect();
}
  • Cree un método que obtenga la característica VideoEFfects se suscribe a los eventos:
private async void LocalVideoEffectsFeature_VideoEffectEnabled(object sender, VideoEffectEnabledEventArgs e)
{
    await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () =>
    {
        BackgroundBlur.IsChecked = true;
    });
}

private async void LocalVideoEffectsFeature_VideoEffectDisabled(object sender, VideoEffectDisabledEventArgs e)
{
    await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () =>
    {
        BackgroundBlur.IsChecked = false;
    });
}

private void LocalVideoEffectsFeature_VideoEffectError(object sender, VideoEffectErrorEventArgs e)
{
    String effectName = args.VideoEffectName;
    String errorCode = args.Code;
    String errorMessage = args.Message;

    Trace.WriteLine("VideoEffects VideoEffectError on effect " + effectName + "with code "
        + errorCode + "and error message " + errorMessage);
}
  • Habilite y deshabilite el efecto de desenfoque de fondo:
private async void BackgroundBlur_Click(object sender, RoutedEventArgs e)
{
    if (localVideoEffectsFeature.IsEffectSupported(backgroundBlurVideoEffect))
    {
        var backgroundBlurCheckbox = sender as CheckBox;
        if (backgroundBlurCheckbox.IsChecked.Value)
        {
            localVideoEffectsFeature.EnableEffect(backgroundBlurVideoEffect);
        }
        else
        {
            localVideoEffectsFeature.DisableEffect(backgroundBlurVideoEffect);
        }
    }
}

Reemplazo de fondo

El reemplazo de fondo es un efecto de vídeo que permite reemplazar el fondo de una persona. Para usar efectos de vídeo en segundo plano, debe obtener una característica VideoEffectsLocalVideoStreamFeature de un LocalVideoStream válido.

Para habilitar el efecto de vídeo de reemplazo de fondo:

  • Agregue la instancia de BackgroundReplacementEffect a MainPage.
public sealed partial class MainPage : Page
{
    private BackgroundReplacementEffect backgroundReplacementVideoEffect = new BackgroundReplacementEffect();
}
  • Cree un método que obtenga la característica VideoEFfects se suscribe a los eventos:
private async void LocalVideoEffectsFeature_VideoEffectEnabled(object sender, VideoEffectEnabledEventArgs e)
{
    await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () =>
    {
        BackgroundReplacement.IsChecked = true;
    });
}

private async void LocalVideoEffectsFeature_VideoEffectDisabled(object sender, VideoEffectDisabledEventArgs e)
{
    await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () =>
    {
        BackgroundReplacement.IsChecked = false;
    });
}

private void LocalVideoEffectsFeature_VideoEffectError(object sender, VideoEffectErrorEventArgs e)
{
    String effectName = args.VideoEffectName;
    String errorCode = args.Code;
    String errorMessage = args.Message;

    Trace.WriteLine("VideoEffects VideoEffectError on effect " + effectName + "with code "
        + errorCode + "and error message " + errorMessage);
}
  • Establezca un fondo personalizado pasando la imagen a través de un búfer.
//example of getting the image from storage folder
MemoryBuffer memoryBuffer = new MemoryBuffer(0);
StorageFolder InstallationFolder = Windows.ApplicationModel.Package.Current.InstalledLocation;
StorageFile file = InstallationFolder.GetFileAsync("image.jpg").GetAwaiter().GetResult();
if (File.Exists(file.Path))
{
    byte[] imageBytes = File.ReadAllBytes(file.Path);
    memoryBuffer = new MemoryBuffer((uint)imageBytes.Length);
    using (IMemoryBufferReference reference = memoryBuffer.CreateReference())
    {
        byte* dataInBytes;
        uint capacityInBytes;

        (reference.As<IMemoryBufferByteAccess>()).GetBuffer(out dataInBytes, out capacityInBytes);
        for (int i = 0; i < imageBytes.Length; i++)
        {
            dataInBytes[i] = imageBytes[i];
        }
    }
    return memoryBuffer;
}
backgroundReplacementVideoEffect.Buffer = memoryBuffer;
  • Habilite y deshabilite el efecto Reemplazo de fondo:
private async void BackgroundReplacement_Click(object sender, RoutedEventArgs e)
{
    if (localVideoEffectsFeature.IsEffectSupported(backgroundReplacementVideoEffect))
    {
        var backgroundReplacementCheckbox = sender as CheckBox;
        if (backgroundReplacementCheckbox.IsChecked.Value)
        {
            localVideoEffectsFeature.EnableEffect(backgroundReplacementVideoEffect);
        }
        else
        {
            localVideoEffectsFeature.DisableEffect(backgroundReplacementVideoEffect);
        }
    }
}

Pasos siguientes

Para más información, consulte los siguientes artículos.