التشغيل السريع: إضافة تأثيرات الفيديو إلى مكالمات الفيديو

يمكنك استخدام ميزة تأثيرات الفيديو لإضافة تأثيرات إلى الفيديو في مكالمات الفيديو. تمكن هذه الميزة المطورين من إنشاء تأثيرات مرئية خلفية واستبدال الفيديو في الخلفية في تجربة الاتصال. يوفر تمويه الخلفية للمستخدمين آلية إزالة عوامل التشتيت وراء المشارك بحيث يمكن للمشاركين التواصل دون نشاط تخريبي أو معلومات سرية في الخلفية. وهذا مفيد بشكل خاص في سياق الصحة عن بعد، حيث قد يرغب الموفر أو المريض في إخفاء محيطه لحماية المعلومات الحساسة أو معلومات التعريف الشخصية. يمكن تطبيق تمويه الخلفية عبر جميع سيناريوهات المواعيد الظاهرية، بما في ذلك البنوك عن بعد وجلسات الاستماع الظاهرية، لحماية خصوصية المستخدم. بالإضافة إلى السرية المحسنة، يسمح تمويه الخلفية بمزيد من الإبداع في التعبير، ما يسمح للمستخدمين بتحميل خلفيات مخصصة لاستضافة تجربة اتصال أكثر متعة وتخصيصا.

إشعار

لا يمكن استخدام مكتبة تأثير الاستدعاء مستقلة ويمكن أن تعمل فقط عند استخدامها مع مكتبة عميل Azure Communication Calling ل WebJS (https://www.npmjs.com/package/@azure/communication-calling).

استخدام تأثيرات الفيديو

تثبيت الحزمة

npm install استخدم الأمر لتثبيت Azure Communication Services Effects SDK ل JavaScript.

هام

يستخدم هذا التشغيل السريع إصدار Azure Communication Services Calling SDK من 1.13.1 (أو أكبر) وإصدار Azure Communication Services Calling Effects SDK أكبر من أو equil إلى 1.0.1.

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

راجع هنا لمزيد من التفاصيل حول صفحة حزمة npm لتأثيرات commmunication الاستدعاء.

إشعار

دعم المستعرض حاليا لإنشاء تأثيرات خلفية الفيديو مدعوم فقط على متصفح Chrome و Edge Desktop (Windows و Mac) و Mac Safari Desktop.

إشعار

يوجد حاليا تأثيران متوفران للفيديو:

  • تمويه الخلفية
  • استبدال الخلفية بصورة (يجب أن تكون نسبة العرض إلى الارتفاع 16:9 لتكون متوافقة)

لاستخدام تأثيرات الفيديو مع Azure Communication Calling SDK، بمجرد إنشاء LocalVideoStream، تحتاج إلى الحصول على 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
});

يمكن إجراء تبديل التأثيرات باستخدام نفس الأسلوب على واجهة برمجة تطبيقات ميزة تأثيرات الفيديو:

// 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 Calling SDK، يتم تنزيل نموذج التعلم الآلي إلى جهاز العميل. نحن نشجعك على مراجعة ملاحظات الخصوصية في تطبيقك وتحديثها وفقا لذلك، إذا لزم الأمر.

يمكنك استخدام ميزة تأثيرات الفيديو لإضافة تأثيرات إلى الفيديو في مكالمات الفيديو. يوفر تمويه الخلفية للمستخدمين آلية إزالة عوامل التشتيت وراء المشارك بحيث يمكن للمشاركين التواصل دون نشاط تخريبي أو معلومات سرية في الخلفية. هذه الميزة مفيدة بشكل خاص في سياق الصحة عن بعد، حيث قد يرغب الموفر أو المريض في إخفاء محيطه لحماية المعلومات الحساسة أو البيانات الشخصية. يمكن تطبيق تمويه الخلفية عبر جميع سيناريوهات المواعيد الظاهرية، بما في ذلك البنوك عن بعد وجلسات الاستماع الظاهرية، لحماية خصوصية المستخدم.

استخدام تأثيرات الفيديو

إشعار

يقتصر دعم تأثيرات الفيديو على iOS على أحدث إصدارين رئيسيين من iOS. على سبيل المثال، عند إصدار إصدار رئيسي جديد من iOS، فإن متطلبات iOS هي الإصدار الجديد وأحدث الإصدارات التي سبقته.

يوجد حاليا تأثير فيديو واحد متوفر: تمويه الخلفية.

يحتوي LocalVideoEffectsFeature الكائن على بنية واجهة برمجة التطبيقات التالية:

  • enable: تمكين تأثير فيديو على المثيل LocalVideoStream .
  • disable: يعطل تأثير الفيديو على المثيل LocalVideoStream .
  • isSupported: يشير إلى ما إذا كان تأثير الفيديو معتمدا على المثيل LocalVideoStream .
  • onVideoEffectEnabled: الحدث الذي يتم تشغيله عند تمكين تأثير الفيديو بنجاح.
  • onVideoEffectDisabled: الحدث الذي يتم تشغيله عند تعطيل تأثير فيديو بنجاح.
  • onVideoEffectError: الحدث الذي يتم تشغيله عند فشل عملية تأثير الفيديو.

بمجرد أن يكون لديك LocalVideoEffectsFeature الكائن، يمكنك الاشتراك في الأحداث، والأحداث لها المفوضون التاليون: didEnableVideoEffect، ، didDisableVideoEffect. didReceiveVideoEffectError

لاستخدام تأثيرات الفيديو مع Azure Communication Calling SDK، بمجرد إنشاء LocalVideoStream، تحتاج إلى الحصول على VideoEffects واجهة برمجة تطبيقات 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)
}

وابدأ في استخدام واجهات برمجة التطبيقات لتمكين تأثيرات الفيديو وتعطيلها:

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)

إشعار

لاستخدام تأثيرات الفيديو على Android Calling SDK، يتم تنزيل نموذج التعلم الآلي إلى جهاز العميل. نحن نشجعك على مراجعة ملاحظات الخصوصية في تطبيقك وتحديثها وفقا لذلك، إذا لزم الأمر.

يمكنك استخدام ميزة تأثيرات الفيديو لإضافة تأثيرات إلى الفيديو في مكالمات الفيديو. يوفر تمويه الخلفية للمستخدمين آلية إزالة عوامل التشتيت وراء المشارك بحيث يمكن للمشاركين التواصل دون نشاط تخريبي أو معلومات سرية في الخلفية. هذه الميزة مفيدة بشكل خاص في سياق الصحة عن بعد، حيث قد يرغب الموفر أو المريض في إخفاء محيطه لحماية المعلومات الحساسة أو البيانات الشخصية. يمكن تطبيق تمويه الخلفية عبر جميع سيناريوهات المواعيد الظاهرية، بما في ذلك البنوك عن بعد وجلسات الاستماع الظاهرية، لحماية خصوصية المستخدم.

يعتمد هذا التشغيل السريع على التشغيل السريع: إضافة مكالمات فيديو 1:1 إلى تطبيقك لنظام التشغيل Android.

استخدام تأثيرات الفيديو

إشعار

يقتصر دعم تأثيرات الفيديو على Android على الإصدارات الأربعة الرئيسية الأخيرة من Android. على سبيل المثال، عند إصدار إصدار رئيسي جديد من Android، فإن متطلبات Android هي الإصدار الجديد والإصدارات الثلاثة الأحدث التي تسبقه.

يوجد حاليا تأثير فيديو واحد متوفر: تمويه الخلفية.

يحتوي VideoEffectsLocalVideoStreamFeature الكائن على بنية واجهة برمجة التطبيقات التالية:

  • enableEffect: تمكين تأثير فيديو على المثيل LocalVideoStream .
  • disableEffect: يعطل تأثير الفيديو على المثيل LocalVideoStream .
  • OnVideoEffectEnabledListener: الحدث الذي يتم تشغيله عند تمكين تأثير الفيديو بنجاح.
  • OnVideoEffectDisabledListener: الحدث الذي يتم تشغيله عند تعطيل تأثير فيديو بنجاح.
  • OnVideoEffectErrorListener: الحدث الذي يتم تشغيله عند فشل عملية تأثير الفيديو.

VideoEffectEnabledEventVideoEffectDisabledEvent تحتوي الكائنات و على VideoEffectErrorEvent بنية واجهة برمجة التطبيقات التالية:

  • getVideoEffectName: يحصل على اسم تأثير الفيديو الذي قام بتشغيل الحدث.

بمجرد أن يكون لديك VideoEffectsLocalVideoStreamFeature الكائن، يمكنك الاشتراك في الأحداث:

لاستخدام تأثيرات الفيديو مع Azure Communication Calling SDK، بمجرد إنشاء LocalVideoStream، تحتاج إلى الحصول على VideoEffects واجهة برمجة تطبيقات 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);

وابدأ في استخدام واجهات برمجة التطبيقات لتمكين تأثيرات الفيديو وتعطيلها:

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();
  • استدعاء EnableEffect على videoEffectsFeature الكائن:
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);
  • استدعاء EnableEffect على videoEffectsFeature الكائن:
public void enableBackgroundReplacement() {
    videoEffectsFeature.enableEffect(backgroundReplacementVideoEffect);
}

لتعطيل تأثير فيديو استبدال الخلفية:

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

إشعار

لاستخدام تأثيرات الفيديو على Windows Calling SDK، يتم تنزيل نموذج التعلم الآلي إلى جهاز العميل. نحن نشجعك على مراجعة ملاحظات الخصوصية في تطبيقك وتحديثها وفقا لذلك، إذا لزم الأمر.

يمكنك استخدام ميزة تأثيرات الفيديو لإضافة تأثيرات إلى الفيديو في مكالمات الفيديو. يوفر تمويه الخلفية للمستخدمين آلية إزالة عوامل التشتيت وراء المشارك بحيث يمكن للمشاركين التواصل دون نشاط تخريبي أو معلومات سرية في الخلفية. هذه الميزة مفيدة بشكل خاص في سياق الصحة عن بعد، حيث قد يرغب الموفر أو المريض في إخفاء محيطه لحماية المعلومات الحساسة أو البيانات الشخصية. يمكن تطبيق تمويه الخلفية عبر جميع سيناريوهات المواعيد الظاهرية، بما في ذلك البنوك عن بعد وجلسات الاستماع الظاهرية، لحماية خصوصية المستخدم.

يعتمد هذا التشغيل السريع على التشغيل السريع: إضافة مكالمات فيديو 1:1 إلى تطبيقك لنظام التشغيل Windows.

استخدام تأثيرات الفيديو

يوجد حاليا تأثير فيديو واحد متوفر: تمويه الخلفية.

يحتوي VideoEffectsLocalVideoStreamFeature الكائن على بنية واجهة برمجة التطبيقات التالية:

  • EnableEffect: تمكين تأثير فيديو على المثيل LocalVideoStream .
  • DisableEffect: يعطل تأثير الفيديو على المثيل LocalVideoStream .
  • VideoEffectEnabled: الحدث الذي يتم تشغيله عند تمكين تأثير الفيديو بنجاح.
  • VideoEffectDisabledListener: الحدث الذي يتم تشغيله عند تعطيل تأثير فيديو بنجاح.
  • VideoEffectErrorListener: الحدث الذي يتم تشغيله عند فشل عملية تأثير الفيديو.

VideoEffectEnabledEventVideoEffectDisabledEvent تحتوي الكائنات و على VideoEffectErrorEvent بنية واجهة برمجة التطبيقات التالية:

  • VideoEffectName: يحصل على اسم تأثير الفيديو الذي قام بتشغيل الحدث.

بمجرد أن يكون لديك VideoEffectsLocalVideoStreamFeature الكائن، يمكنك الاشتراك في الأحداث:

لاستخدام تأثيرات الفيديو مع Azure Communication Calling SDK، أضف المتغيرات إلى MainPage.

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

بمجرد إنشاء LocalVideoStream، تحتاج إلى الحصول على واجهة برمجة تطبيقات LocalVideoStream الميزة VideoEffects لتمكين/تعطيل تأثيرات الفيديو.

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;

وابدأ في استخدام واجهات برمجة التطبيقات لتمكين تأثيرات الفيديو وتعطيلها:

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

الخطوات التالية

لمزيد من المعلومات، راجع المقالات التالية: