빠른 시작: 영상 통화에 비디오 효과 추가

비디오 효과 기능을 사용하여 영상 통화에서 비디오에 효과를 추가할 수 있습니다. 이 기능을 사용하면 개발자가 통화 환경에 배경 시각 효과와 배경 비디오 바꾸기를 빌드할 수 있습니다. 배경 흐림은 참가자가 배경에 방해가 되는 활동이나 기밀 정보 없이 통신할 수 있도록 참가자 뒤에 방해 요소를 제거하는 메커니즘을 사용자에게 제공합니다. 이 기능은 공급자나 환자가 중요한 정보 또는 개인 식별 정보를 보호하기 위해 주변을 가리려고 하는 원격 의료의 컨텍스트에서 특히 유용합니다. 텔레뱅킹 및 가상 청문회를 포함하여 사용자 프라이버시를 보호하기 위해 모든 가상 약속 시나리오에 배경 흐림을 적용할 수 있습니다. 향상된 기밀성 외에도 배경 흐림을 사용하면 표현의 창의성이 향상되어 사용자가 사용자 지정 배경을 업로드하여 보다 재미있는 맞춤형 통화 환경을 호스트할 수 있습니다.

참고 항목

이 통화 효과 라이브러리는 독립 실행형으로 사용할 수 없으며 WebJS(https://www.npmjs.com/package/@azure/communication-calling)용 Azure Communication Calling 클라이언트 라이브러리와 함께 사용할 때만 작동할 수 있습니다.

비디오 효과 사용

패키지 설치

참고 항목

웹 데스크톱 브라우저의 백그라운드 흐림 및 백그라운드 대체 기능이 GA 단계에 있습니다. 이 빠른 시작에서는 1.13.1(또는 그 이상)의 Azure Communication Services 통화 SDK 버전과 1.0.1 이상인 Azure Communication Services 통화 효과 SDK 버전을 사용합니다. 현재 동영상 배경 효과 만들기에 대한 데스크톱 브라우저 지원은 Chrome 및 Edge 데스크톱 브라우저(Windows 및 Mac)와 Mac Safari Desktop에서만 지원됩니다.

Important

Android Chrome 모바일 브라우저의 백그라운드 흐림 및 백그라운드 대체 기능은 빌드 1.29.1 및 이후 베타 WebJS SDK 버전부터 공개 미리 보기로 제공됩니다. 이 미리 보기 버전은 서비스 수준 계약 없이 제공되며, 프로덕션 워크로드에는 권장되지 않습니다. 특정 기능이 지원되지 않거나 기능이 제한될 수 있습니다. 자세한 내용은 Microsoft Azure Preview에 대한 추가 사용 약관을 참조하세요.

npm install 명령을 사용하여 JavaScript용 Azure Communication Services 효과 SDK를 설치합니다.

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

통화 통신 효과 npm 패키지 페이지에 대한 자세한 내용은 여기를 참조하세요.

참고 항목

현재 사용할 수 있는 두 가지 비디오 효과는 다음과 같습니다.

  • 배경색 흐리게
  • 이미지를 사용하여 배경 바꾸기(호환 가능하려면 가로 세로 비율이 16:9여야 함)

Azure Communication 통화 SDK에서 비디오 효과를 사용하려면 LocalVideoStream을 만든 후 LocalVideoStreamVideoEffects 기능 API를 가져와서 비디오 효과를 시작/중지해야 합니다.

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을 제공해야 합니다.

Important

URL이 이미지가 아니거나 연결할 수 없거나 읽을 수 없는 경우 startEffects 메서드가 실패합니다.

참고 항목

현재 지원되는 이미지 형식은 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); 
}

이 효과에 대한 이미지 변경은 configure 메서드를 통해 이미지를 전달하여 수행할 수 있습니다.

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

참고 항목

iOS 통화 SDK에서 비디오 효과를 사용하기 위해 기계 학습 모델이 고객의 디바이스에 다운로드됩니다. 필요한 경우 애플리케이션에서 개인 정보 취급 방침을 검토하고 그에 따라 업데이트하는 것이 좋습니다.

비디오 효과 기능을 사용하여 영상 통화에서 비디오에 효과를 추가할 수 있습니다. 배경 흐림은 참가자가 배경에 방해가 되는 활동이나 기밀 정보 없이 통신할 수 있도록 참가자 뒤에 방해 요소를 제거하는 메커니즘을 사용자에게 제공합니다. 이 기능은 공급자나 환자가 중요한 정보 또는 개인 데이터를 보호하기 위해 주변을 가리려고 하는 원격 의료의 컨텍스트에서 특히 유용합니다. 텔레뱅킹 및 가상 청문회를 포함하여 사용자 프라이버시를 보호하기 위해 모든 가상 약속 시나리오에 배경 흐림을 적용할 수 있습니다.

비디오 효과 사용

참고 항목

iOS의 비디오 효과 지원은 두 가지 최신 주요 버전의 iOS로 제한됩니다. 예를 들어 iOS의 새 주 버전이 릴리스되면 iOS 요구 사항은 새 버전과 그 이전의 최신 버전입니다.

현재 사용할 수 있는 비디오 효과인 배경 흐림 효과가 있습니다.

LocalVideoEffectsFeature 개체에는 다음 API 구조가 있습니다.

  • enable: LocalVideoStream 인스턴스에서 비디오 효과를 사용하도록 설정합니다.
  • disable: LocalVideoStream 인스턴스에서 비디오 효과를 사용하지 않도록 설정합니다.
  • isSupported: LocalVideoStream 인스턴스에서 비디오 효과가 지원되는지를 나타냅니다.
  • onVideoEffectEnabled: 비디오 효과를 사용하도록 설정했을 때 트리거되는 이벤트입니다.
  • onVideoEffectDisabled: 비디오 효과를 사용하지 않도록 설정했을 때 트리거되는 이벤트입니다.
  • onVideoEffectError: 비디오 효과 작업이 실패할 때 트리거되는 이벤트입니다.

LocalVideoEffectsFeature 개체가 있으면 이벤트를 구독할 수 있으며 이벤트에는 didEnableVideoEffect, didDisableVideoEffect, didReceiveVideoEffectError 대리자가 있습니다.

Azure Communication 통화 SDK에서 비디오 효과를 사용하려면 LocalVideoStream을 만든 후 LocalVideoStreamVideoEffects 기능 API를 가져와서 비디오 효과를 사용하거나 사용하지 않도록 설정해야 합니다.

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

배경색 흐리게

배경 흐림은 사용자의 배경을 흐리게 할 수 있는 비디오 효과입니다. 배경 비디오 효과를 사용하려면 유효한 LocalVideoStream에서 LocalVideoEffectsFeature 기능을 가져와야 합니다.

  • 새 배경 흐림 비디오 효과 개체를 만듭니다.
@State var backgroundBlurVideoEffect: BackgroundBlurEffect?
  • BackgroundBlurEffect가 지원되는지 확인하고 videoEffectsFeature 개체에서 Enable을 호출합니다.
if((localVideoEffectsFeature.isSupported(effect: backgroundBlurVideoEffect)) != nil)
{
    localVideoEffectsFeature.enable(effect: backgroundBlurVideoEffect)
}

배경 흐림 비디오 효과를 사용하지 않도록 설정하려면 다음을 수행합니다.

localVideoEffectsFeature.disable(effect: backgroundBlurVideoEffect)

백그라운드 대체

백그라운드 대체는 사용자가 사용자 지정 배경을 설정할 수 있는 동영상 효과입니다. 백그라운드 대체 효과를 사용하려면 유효한 LocalVideoStream에서 LocalVideoEffectsFeature 기능을 가져와야 합니다.

  • 새로운 백그라운드 대체 동영상 효과 개체를 만듭니다.
@State var backgroundReplacementVideoEffect: BackgroundReplacementEffect?
  • 버퍼를 통해 이미지를 전달하여 사용자 지정 배경을 설정합니다.
let image = UIImage(named:"image.png")
guard let imageData = image?.jpegData(compressionQuality: 1.0) else {
return
}
backgroundReplacementVideoEffect.buffer = imageData
  • BackgroundReplacementEffect가 지원되는지 확인하고 videoEffectsFeature 개체에서 Enable을 호출합니다.
if((localVideoEffectsFeature.isSupported(effect: backgroundReplacementVideoEffect)) != nil)
{
    localVideoEffectsFeature.enable(effect: backgroundReplacementVideoEffect)
}

백그라운드 대체 동영상 효과를 사용하지 않도록 설정하려면:

localVideoEffectsFeature.disable(effect: backgroundReplacementVideoEffect)

참고 항목

Android 통화 SDK에서 비디오 효과를 사용하기 위해 기계 학습 모델이 고객의 디바이스에 다운로드됩니다. 필요한 경우 애플리케이션에서 개인 정보 취급 방침을 검토하고 그에 따라 업데이트하는 것이 좋습니다.

비디오 효과 기능을 사용하여 영상 통화에서 비디오에 효과를 추가할 수 있습니다. 배경 흐림은 참가자가 배경에 방해가 되는 활동이나 기밀 정보 없이 통신할 수 있도록 참가자 뒤에 방해 요소를 제거하는 메커니즘을 사용자에게 제공합니다. 이 기능은 공급자나 환자가 중요한 정보 또는 개인 데이터를 보호하기 위해 주변을 가리려고 하는 원격 의료의 컨텍스트에서 특히 유용합니다. 텔레뱅킹 및 가상 청문회를 포함하여 사용자 프라이버시를 보호하기 위해 모든 가상 약속 시나리오에 배경 흐림을 적용할 수 있습니다.

이 빠른 시작은 Android용 빠른 시작: 앱에 1:1 영상 통화 추가를 기반으로 합니다.

비디오 효과 사용

참고 항목

Android의 비디오 효과 지원은 최신 4개 주요 버전의 Android으로 제한됩니다. 예를 들어 Android의 새 주 버전이 릴리스되면 Android 요구 사항은 새 버전과 그 이전의 세 가지 최신 버전입니다.

현재 사용할 수 있는 비디오 효과인 배경 흐림 효과가 있습니다.

VideoEffectsLocalVideoStreamFeature 개체에는 다음 API 구조가 있습니다.

  • enableEffect: LocalVideoStream 인스턴스에서 비디오 효과를 사용하도록 설정합니다.
  • disableEffect: LocalVideoStream 인스턴스에서 비디오 효과를 사용하지 않도록 설정합니다.
  • OnVideoEffectEnabledListener: 비디오 효과를 사용하도록 설정했을 때 트리거되는 이벤트입니다.
  • OnVideoEffectDisabledListener: 비디오 효과를 사용하지 않도록 설정했을 때 트리거되는 이벤트입니다.
  • OnVideoEffectErrorListener: 비디오 효과 작업이 실패할 때 트리거되는 이벤트입니다.

VideoEffectEnabledEvent, VideoEffectDisabledEventVideoEffectErrorEvent 개체에는 다음과 같은 API 구조가 있습니다.

  • getVideoEffectName: 이벤트를 트리거한 비디오 효과의 이름을 가져옵니다.

VideoEffectsLocalVideoStreamFeature 개체가 있으면 이벤트를 구독할 수 있습니다.

Azure Communication 통화 SDK에서 비디오 효과를 사용하려면 LocalVideoStream을 만든 후 LocalVideoStreamVideoEffects 기능 API를 가져와서 비디오 효과를 사용하거나 사용하지 않도록 설정해야 합니다.

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

배경색 흐리게

배경 흐림은 사용자의 배경을 흐리게 할 수 있는 비디오 효과입니다. 배경 비디오 효과를 사용하려면 유효한 LocalVideoStream에서 VideoEffectsLocalVideoStreamFeature 기능을 가져와야 합니다.

배경 흐림 비디오 효과를 사용하도록 설정하려면 다음을 수행합니다.

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

백그라운드 대체

백그라운드 대체는 인물의 백그라운드를 바꿀 수 있는 동영상 효과입니다. 배경 비디오 효과를 사용하려면 유효한 LocalVideoStream에서 VideoEffectsLocalVideoStreamFeature 기능을 가져와야 합니다.

백그라운드 대체 동영상 효과를 사용하도록 설정하려면:

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

참고 항목

Windows 통화 SDK에서 비디오 효과를 사용하기 위해 기계 학습 모델이 고객의 디바이스에 다운로드됩니다. 필요한 경우 애플리케이션에서 개인 정보 취급 방침을 검토하고 그에 따라 업데이트하는 것이 좋습니다.

비디오 효과 기능을 사용하여 영상 통화에서 비디오에 효과를 추가할 수 있습니다. 배경 흐림은 참가자가 배경에 방해가 되는 활동이나 기밀 정보 없이 통신할 수 있도록 참가자 뒤에 방해 요소를 제거하는 메커니즘을 사용자에게 제공합니다. 이 기능은 공급자나 환자가 중요한 정보 또는 개인 데이터를 보호하기 위해 주변을 가리려고 하는 원격 의료의 컨텍스트에서 특히 유용합니다. 텔레뱅킹 및 가상 청문회를 포함하여 사용자 프라이버시를 보호하기 위해 모든 가상 약속 시나리오에 배경 흐림을 적용할 수 있습니다.

이 빠른 시작은 Windows용 빠른 시작: 앱에 1:1 영상 통화 추가를 기반으로 합니다.

비디오 효과 사용

현재 사용할 수 있는 비디오 효과인 배경 흐림 효과가 있습니다.

VideoEffectsLocalVideoStreamFeature 개체에는 다음 API 구조가 있습니다.

  • EnableEffect: LocalVideoStream 인스턴스에서 비디오 효과를 사용하도록 설정합니다.
  • DisableEffect: LocalVideoStream 인스턴스에서 비디오 효과를 사용하지 않도록 설정합니다.
  • VideoEffectEnabled: 비디오 효과를 사용하도록 설정했을 때 트리거되는 이벤트입니다.
  • VideoEffectDisabledListener: 비디오 효과를 사용하지 않도록 설정했을 때 트리거되는 이벤트입니다.
  • VideoEffectErrorListener: 비디오 효과 작업이 실패할 때 트리거되는 이벤트입니다.

VideoEffectEnabledEvent, VideoEffectDisabledEventVideoEffectErrorEvent 개체에는 다음과 같은 API 구조가 있습니다.

  • VideoEffectName: 이벤트를 트리거한 비디오 효과의 이름을 가져옵니다.

VideoEffectsLocalVideoStreamFeature 개체가 있으면 이벤트를 구독할 수 있습니다.

Azure Communication 통화 SDK에서 비디오 효과를 사용하려면 MainPage에 변수를 추가합니다.

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

LocalVideoStream을 만든 후에는 LocalVideoStreamVideoEffects 기능 API를 가져와서 비디오 효과를 사용하거나 사용하지 않도록 설정해야 합니다.

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

배경색 흐리게

배경 흐림은 사용자의 배경을 흐리게 할 수 있는 비디오 효과입니다. 배경 비디오 효과를 사용하려면 유효한 LocalVideoStream에서 VideoEffectsLocalVideoStreamFeature 기능을 가져와야 합니다.

배경 흐림 비디오 효과를 사용하도록 설정하려면 다음을 수행합니다.

  • MainPage에 BackgroundBlurEffect 인스턴스를 추가합니다.
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);
        }
    }
}

백그라운드 대체

백그라운드 대체는 인물의 백그라운드를 바꿀 수 있는 동영상 효과입니다. 배경 비디오 효과를 사용하려면 유효한 LocalVideoStream에서 VideoEffectsLocalVideoStreamFeature 기능을 가져와야 합니다.

백그라운드 대체 동영상 효과를 사용하도록 설정하려면:

  • MainPage에 BackgroundReplacementEffect 인스턴스를 추가합니다.
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);
        }
    }
}

다음 단계

자세한 내용은 다음 문서를 참조하세요.