Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Функция "Эффекты видео" позволяет пользователям добавлять визуальные эффекты в видеозвонки, включая размытие фона и замену изображения в видео. Это помогает устранять отвлекающие факторы и защищать конфиденциальную информацию, особенно в контекстах, таких как 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 функций VideoEffects
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();
Добавьте эффект матового стекла для фона
Заморозенные стеклянные фоны объединяют конфиденциальность размытого фона с настройкой выбранного изображения, чтобы создать сложный эффект, напоминающий заморозенные стеклянные окна. Чтобы добиться этого эффекта, отправьте прозрачное изображение 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
, , didDisableVideoEffect
didReceiveVideoEffectError
.
Чтобы использовать видеоэффекты с 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
объект и вызываетсяEnable
videoEffectsFeature
: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
объект и вызываетсяEnable
videoEffectsFeature
: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);
}
}
}
Следующие шаги
- Ознакомьтесь с нашим примером вызова героя.
- Начало работы с библиотекой пользовательского интерфейса.
- Узнайте о возможностях пакета SDK для вызовов.
- Узнайте больше о том, как работают звонки.