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


Краткое руководство. Добавление видеоэффектов в видеозвонки

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

Примечание.

Библиотеку вызывающего эффекта нельзя использовать автономно и может работать только при использовании с клиентской библиотекой вызовов Azure для WebJS (https://www.npmjs.com/package/@azure/communication-calling).

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

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

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

Внимание

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

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

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

Примечание.

В настоящее время поддержка браузера для создания фоновых эффектов видео поддерживается только в браузере Chrome и Edge Desktop (Windows и Mac) и Mac Safari Desktop.

Примечание.

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

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

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

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

Примечание.

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

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

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

Примечание.

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

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

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

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

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

Чтобы использовать видеоэффекты с пакетом SDK для вызова связи Azure, после создания LocalVideoStreamпакета SDK для вызова связи необходимо получить VideoEffects 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: событие, которое активируется при сбое операции видеоэффекта.

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

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

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

Чтобы использовать видеоэффекты с пакетом SDK для вызова связи Azure, после создания LocalVideoStreamпакета SDK для вызова связи необходимо получить 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("VideoEfects", "Effect enabled for effect " + args.getVideoEffectName());
}
private void handleOnVideoEffectDisabled(VideoEffectDisabledEvent args) {
   Log.i("VideoEfects", "Effect disabled for effect " + args.getVideoEffectName());
}
private void handleOnVideoEffectError(VideoEffectErrorEvent args) {
   Log.i("VideoEfects", "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();
  • videoEffectsFeature Вызов EnableEffect объекта:
public void enableBackgroundBlur() {
    videoEffectsFeature.enableEffect(backgroundBlurEffect);
}

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

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

Замена фона

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

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

  • Создайте метод, который получает VideoEFfects подписку компонента на события:
private void handleOnVideoEffectEnabled(VideoEffectEnabledEvent args) {
   Log.i("VideoEfects", "Effect enabled for effect " + args.getVideoEffectName());
}
private void handleOnVideoEffectDisabled(VideoEffectDisabledEvent args) {
   Log.i("VideoEfects", "Effect disabled for effect " + args.getVideoEffectName());
}
private void handleOnVideoEffectError(VideoEffectErrorEvent args) {
   Log.i("VideoEfects", "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);
  • videoEffectsFeature Вызов EnableEffect объекта:
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: событие, которое активируется при сбое операции видеоэффекта.

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

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

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

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

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

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

private async void CameraList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    var selectedCamerea = CameraList.SelectedItem as VideoDeviceDetails;
    cameraStream = new LocalOutgoingVideoStream(selectedCamerea);
    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);
        }
    }
}

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

Дополнительные сведения см. в следующих статьях: