Поделиться через


Включение фоновых эффектов видео

Функция "Эффекты видео" позволяет пользователям добавлять визуальные эффекты в видеозвонки, включая размытие фона и замену изображения в видео. Это помогает устранять отвлекающие факторы и защищать конфиденциальную информацию, особенно в контекстах, таких как telehealth, telebanking и виртуальные слушания. Размытие фона улучшает конфиденциальность и позволяет настраивать пользовательские фоновые изображения, делая вызовы более привлекательными и персонализированными.

Примечание.

Библиотека эффектов вызова предназначена исключительно для работы с клиентской библиотекой Azure Communication Calling для WebJS и не может использоваться независимо.

Реализация видеоэффектов

Установка пакета

Внимание

Фоновое размытие и замена фона для браузеров на настольных компьютерах доступны в общей доступности. В этом кратком руководстве используется версия пакета SDK для вызовов Службы коммуникации Azure версии 1.13.1 (или более поздней) и версия пакета SDK для Службы коммуникации Azure для эффектов вызова больше или равна 1.0.1. В настоящее время поддержка классического браузера для создания фоновых эффектов видео поддерживается только в браузере Chrome и Microsoft Edge Desktop (Windows и Mac) и Mac Safari Desktop.

Внимание

Размытие фона и его замена для мобильных браузеров Android Chrome и Android Edge доступны в общедоступной доступности, начиная с версии сборки 1.34.1 и более поздних версий WebJS SDK. Для реализации фоновых эффектов в мобильных браузерах Android необходимо использовать версию 1.1.4 или более поздней версии пакета вызывающих эффектов.

npm install Используйте команду, чтобы установить пакет SDK Службы коммуникации Azure Effects для JavaScript.

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

Дополнительные сведения о пакете npm для эффектов звонков по связи см. в разделе "Эффекты вызова связи".

Примечание.

В настоящее время доступны два доступных эффекта видео:

  • Размытие фона
  • Замена фона изображением (пропорции должны быть совместимыми с 16:9)

Чтобы использовать видеоэффекты с пакетом SDK для вызовов связи Azure, после создания LocalVideoStream необходимо получить API функций VideoEffectsLocalVideoStream для запуска и остановки видеоэффектов:

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
});

Размытие фона

// 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); 
}

Замена фона изображением

Необходимо указать URL-адрес изображения, который требуется в качестве фона для этого эффекта.

Внимание

Метод startEffects выдает ошибку, если URL-адрес не является изображением или недоступен или непрочитабельный.

Примечание.

Текущие поддерживаемые форматы изображений: png, jpg, jpeg, tiff, bmp.

Текущая поддерживаемая пропорция — 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); 
}

Изменение образа для этого эффекта можно сделать, передав его с помощью метода настройки:

const newBackgroundImage = 'https://linkToNewImageFile'; 

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

Переключение эффектов можно сделать с помощью того же метода в API функций эффектов видео:

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

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

В любое время, если вы хотите проверить, какие эффекты активны, можно использовать activeEffects свойство.

Свойство activeEffects возвращает массив с именами текущих активных эффектов и возвращает пустой массив, если эффектов нет.

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

Чтобы остановить эффекты, выполните приведенные действия.

await videoEffectsFeatureApi.stopEffects();

Добавьте эффект матового стекла для фона

Заморозенные стеклянные фоны объединяют конфиденциальность размытого фона с настройкой выбранного изображения, чтобы создать сложный эффект, напоминающий заморозенные стеклянные окна. Чтобы добиться этого эффекта, отправьте прозрачное изображение PNG в качестве пользовательского фона. Это может быть логотип компании или уникальный дизайн. Эффект заморозки стекла размыт прозрачные области изображения, сохраняя рисунок как часть фона. Чтобы использовать внешний вид матового стекла, необходимо воспользоваться версией 1.1.3 или более новой библиотеки эффектов вызовов Azure Communication для JavaScript.

Для получения наилучших результатов при подготовке заморозированного изображения PNG помните:

  • Разрешение: использование 1920x1080 пикселей для высококачественного фона
  • Избегайте полной непрозрачности: цветное содержимое, например логотипы, выглядит лучше всего с небольшой прозрачностью. Рекомендуется 75 % непрозрачности
  • Трафарет с серым передним планом средней интенсивности: для серого изображения PNG с прозрачностью рекомендуется иметь полное изображение в средне-сером (значение 128), чтобы шаблон прозрачности был виден как на светлом, так и на темном фоне.

Примечание.

Чтобы использовать видеоэффекты в пакете SDK для вызовов iOS, Службы коммуникации Azure скачивают модель машинного обучения на устройство клиента. При необходимости рекомендуется просматривать заметки о конфиденциальности в приложении и обновлять их соответствующим образом.

Функцию "Эффекты видео" можно использовать для добавления эффектов в видео в видеозвонках. Фоновое размытие предоставляет пользователям механизм для удаления отвлекающих факторов позади участников, чтобы они могли взаимодействовать без мешающей активности или конфиденциальной информации на фоне.

Эта функция наиболее полезна в контексте телемедицины, где поставщик или пациент может захотеть скрыть своё окружение для защиты конфиденциальной информации или персональных данных. Размытие фона можно применять во всех сценариях виртуальной встречи, включая телебанки и виртуальные слушания, для защиты конфиденциальности пользователей.

Реализация видеоэффектов

Примечание.

Поддержка эффектов видео в iOS ограничена двумя последними основными версиями iOS. Например, когда выпущена новая основная версия iOS, требование iOS — это новая версия и последние версии, предшествующие ей.

В настоящее время существует один доступный эффект видео: размытие фона.

Объект LocalVideoEffectsFeature имеет следующую структуру API:

  • enable: включает видеоеффект на экземпляре LocalVideoStream.
  • disable: отключает эффект видео на экземпляре LocalVideoStream .
  • isSupported: указывает, поддерживается ли в экземпляре LocalVideoStream эффект видео.
  • onVideoEffectEnabled: событие, которое активируется при успешном включении эффекта видео.
  • onVideoEffectDisabled: событие, которое активируется при успешном отключении эффекта видео.
  • onVideoEffectError: событие, которое активируется при сбое операции видеоэффекта.

После получения LocalVideoEffectsFeature объекта вы можете подписаться на события, события имеют следующие делегаты: didEnableVideoEffect, , didDisableVideoEffectdidReceiveVideoEffectError.

Чтобы использовать видеоэффекты с Azure Communication Calling SDK, после создания LocalVideoStream необходимо получить API возможностей LocalVideoStream для включения и отключения видеоэффектов:

// 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)
}

Затем начните использовать API для включения и отключения эффектов видео:

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

Размытие фона

Фоновое размытие — это видеоэффект, позволяющий приложению размывать фон человека. Чтобы использовать фоновый видеоэффект, необходимо получить функцию LocalVideoEffectsFeature из допустимого LocalVideoStream.

  • Создайте новый объект Эффекта видео размытия фона:

    @State var backgroundBlurVideoEffect: BackgroundBlurEffect?
    
  • Проверьте, поддерживается ли BackgroundBlurEffect объект и вызывается EnablevideoEffectsFeature :

    if((localVideoEffectsFeature.isSupported(effect: backgroundBlurVideoEffect)) != nil)
    {
        localVideoEffectsFeature.enable(effect: backgroundBlurVideoEffect)
    }
    

Чтобы отключить эффект видео размытия фона:

localVideoEffectsFeature.disable(effect: backgroundBlurVideoEffect)

Замена фона

Фоновая замена — это эффект видео, позволяющий пользователю задать собственный пользовательский фон. Чтобы использовать эффект замены фона, необходимо получить LocalVideoEffectsFeature функцию из допустимого LocalVideoStream.

  • Создайте новый объект видеоэффекта замены фона.

    @State var backgroundReplacementVideoEffect: BackgroundReplacementEffect?
    
  • Задайте пользовательский фон, передав изображение через буфер.

    let image = UIImage(named:"image.png")
    guard let imageData = image?.jpegData(compressionQuality: 1.0) else {
    return
    }
    backgroundReplacementVideoEffect.buffer = imageData
    
  • Проверьте, поддерживается ли BackgroundReplacementEffect объект и вызывается EnablevideoEffectsFeature :

    if((localVideoEffectsFeature.isSupported(effect: backgroundReplacementVideoEffect)) != nil)
    {
        localVideoEffectsFeature.enable(effect: backgroundReplacementVideoEffect)
    }
    

Чтобы отключить эффект фоновой замены видео:

localVideoEffectsFeature.disable(effect: backgroundReplacementVideoEffect)

Примечание.

Чтобы использовать видеоэффекты в пакете SDK для вызовов Android, модель машинного обучения загружается на устройство клиента. При необходимости рекомендуется просматривать заметки о конфиденциальности в приложении и обновлять их соответствующим образом.

Функцию "Эффекты видео" можно использовать для добавления эффектов в видео в видеозвонках. Фоновое размытие предоставляет пользователям механизм для удаления отвлекающих факторов позади участников, чтобы они могли взаимодействовать без мешающей активности или конфиденциальной информации на фоне. Эта функция особенно полезна в контексте телемедицины, где поставщик или пациент может захотеть скрыть свое окружение для защиты конфиденциальной информации или персональных данных. Размытие фона можно применять во всех сценариях виртуальной встречи, включая телебанки и виртуальные слушания, для защиты конфиденциальности пользователей.

Эта статья основана на добавлении видеозвонка 1:1 в приложение для Android.

Использование видеоэффектов

Примечание.

Поддержка эффектов видео на Android ограничена последними четырьмя основными версиями Android. Например, когда выпущена новая основная версия Android, требуется новая версия Android и три последние версии, предшествующие ей.

В настоящее время существует один доступный эффект видео: размытие фона.

Объект VideoEffectsLocalVideoStreamFeature имеет следующую структуру API:

  • enableEffect: включает видеоеффект на экземпляре LocalVideoStream.
  • disableEffect: отключает эффект видео на экземпляре LocalVideoStream .
  • OnVideoEffectEnabledListener: событие, которое активируется при успешном включении эффекта видео.
  • OnVideoEffectDisabledListener: событие, которое активируется при успешном отключении эффекта видео.
  • OnVideoEffectErrorListener: событие, которое активируется при сбое операции видеоэффекта.

Объекты VideoEffectEnabledEvent, VideoEffectDisabledEvent и VideoEffectErrorEvent имеют следующую структуру API:

  • getVideoEffectName: получает имя эффекта видео, активировающего событие.

VideoEffectsLocalVideoStreamFeature Получив объект, вы можете подписаться на события:

Чтобы использовать видеоэффекты с пакетом SDK для вызова связи Azure, после создания LocalVideoStreamнеобходимо получить VideoEffects API LocalVideoStream функций для включения и отключения видеоэффектов:

// 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);

Затем начните использовать API для включения и отключения эффектов видео:

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

Размытие фона

Фоновое размытие — это видеоэффект, позволяющий приложению размывать фон человека. Чтобы использовать фоновый видеоэффект, необходимо получить VideoEffectsLocalVideoStreamFeature функцию из допустимого LocalVideoStream.

Чтобы включить эффект видео размытия фона:

  • Создайте метод, который позволяет компоненту VideoEFfects подписываться на события.
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);
}

  • Создайте новый объект Эффекта видео размытия фона:
BackgroundBlurEffect backgroundBlurVideoEffect = new BackgroundBlurEffect();
  • Вызов EnableEffect на объекте videoEffectsFeature.
public void enableBackgroundBlur() {
    videoEffectsFeature.enableEffect(backgroundBlurEffect);
}

Чтобы отключить эффект видео размытия фона:

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

Замена фона

Фоновая замена — это эффект видео, позволяющий заменить фон человека. Чтобы использовать фоновый видеоэффект, необходимо получить VideoEffectsLocalVideoStreamFeature функцию из допустимого LocalVideoStream.

Чтобы включить эффект фоновой замены видео:

  • Создайте метод, который позволяет компоненту VideoEFfects подписываться на события.
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);
}

  • Создайте новый объект видеоэффекта замены фона.
BackgroundReplacementEffect backgroundReplacementVideoEffect = new BackgroundReplacementEffect();
  • Задайте пользовательский фон, передав изображение через буфер.
//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);
  • Вызов EnableEffect на объекте videoEffectsFeature.
public void enableBackgroundReplacement() {
    videoEffectsFeature.enableEffect(backgroundReplacementVideoEffect);
}

Чтобы отключить эффект фоновой замены видео:

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

Примечание.

Чтобы использовать видеоэффекты в пакете SDK для вызовов Windows, модель машинного обучения загружается на устройство клиента. При необходимости рекомендуется просматривать заметки о конфиденциальности в приложении и обновлять их соответствующим образом.

Функцию "Эффекты видео" можно использовать для добавления эффектов в видео в видеозвонках. Фоновое размытие предоставляет пользователям механизм для удаления отвлекающих факторов позади участников, чтобы они могли взаимодействовать без мешающей активности или конфиденциальной информации на фоне.

Эта функция наиболее полезна в контексте телемедицины, где врач или пациент может захотеть скрыть своё окружение, чтобы защитить конфиденциальную информацию или личные данные. Размытие фона можно применять во всех сценариях виртуальной встречи, включая телебанки и виртуальные слушания, для защиты конфиденциальности пользователей.

Эта статья основана на добавлении видеозвонка 1:1 в приложение для Windows.

Использование видеоэффектов

В настоящее время существует один доступный эффект видео: размытие фона.

Объект VideoEffectsLocalVideoStreamFeature имеет следующую структуру API:

  • EnableEffect: включает видеоеффект на экземпляре LocalVideoStream.
  • DisableEffect: отключает эффект видео на экземпляре LocalVideoStream .
  • VideoEffectEnabled: событие, которое активируется при успешном включении эффекта видео.
  • VideoEffectDisabledListener: событие, которое активируется при успешном отключении эффекта видео.
  • VideoEffectErrorListener: событие, которое активируется при сбое операции видеоэффекта.

Объекты VideoEffectEnabledEvent, VideoEffectDisabledEvent и VideoEffectErrorEvent имеют следующую структуру API:

  • VideoEffectName: получает имя эффекта видео, активировающего событие.

VideoEffectsLocalVideoStreamFeature Получив объект, вы можете подписаться на события:

Чтобы использовать видеоэффекты с пакетом SDK для вызова связи Azure, добавьте переменные в MainPage.

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

После создания LocalVideoStream необходимо получить LocalVideoStream API функций VideoEffects для включения и отключения видеоэффектов.

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;

Затем начните использовать API для включения и отключения эффектов видео:

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

Размытие фона

Фоновое размытие — это видеофильтр, который позволяет приложению размывать фон человека. Чтобы использовать фоновый видеоэффект, необходимо получить функцию VideoEffectsLocalVideoStreamFeature из допустимого LocalVideoStream.

Чтобы включить эффект видео размытия фона:

  • Добавьте экземпляр BackgroundBlurEffect на MainPage.
public sealed partial class MainPage : Page
{
    private BackgroundBlurEffect backgroundBlurVideoEffect = new BackgroundBlurEffect();
}
  • Создайте метод, который позволяет компоненту VideoEFfects подписываться на события.
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);
}
  • Включите и отключите эффект размытия фона:
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);
        }
    }
}

Замена фона

Замена фона — это видеоэффект, позволяющий приложению заменить фон человека. Чтобы использовать фоновый видеоэффект, необходимо получить VideoEffectsLocalVideoStreamFeature функцию из допустимого LocalVideoStream.

Чтобы включить эффект фоновой замены видео:

  • Добавьте экземпляр BackgroundReplacementEffect на MainPage.
public sealed partial class MainPage : Page
{
    private BackgroundReplacementEffect backgroundReplacementVideoEffect = new BackgroundReplacementEffect();
}
  • Создайте метод, который позволяет компоненту VideoEFfects подписываться на события.
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);
}
  • Задайте пользовательский фон, передав изображение через буфер.
//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;
  • Включите и отключите эффект замены фона:
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);
        }
    }
}

Следующие шаги