اليوم سأتحدث عن وحدة
الأجهزة في Voximplant Web SDK. حلت هذه الوحدة محل نظام إدارة جهاز الصوت والفيديو القديم. ولكن أولاً ، القليل عن إدارة الجهاز في حزمة WebRTC وسبب الحاجة إلى كل هذا.
نادرًا ما يكون لدى المستخدمين النهائيين عدة ميكروفونات. أو هناك عدة مكبرات صوت: على سبيل المثال ، مكبرات الصوت العادية وسماعات البلوتوث. أو سماعة الهاتف ومكبر الصوت للهاتف الذكي.
لكن الكاميرات في العالم الحديث شائعة جدًا. على الأجهزة اللوحية والهواتف: عادي وجبهي. على أجهزة الكمبيوتر المحمولة: مدمجة وأفضل الخارجية. وهكذا دواليك. يمكن أن يكون المستخدم منزعجًا للغاية إذا تم تحديد مجموعة الأجهزة الخاطئة افتراضيًا ولا يمكنه تغييرها بأي شكل من الأشكال. هذا هو أول تطبيق لإدارة الوسائط في WebRTC.
التطبيق الثاني هو الضبط الدقيق للصوت والفيديو. جميع أنواع إلغاء الصدى ، والحد من الضوضاء ، وضبط دقة الفيديو ، ومعدل الإطارات ، وتوازن اللون الأبيض ، وغيرها من الأشياء التي يدعمها متصفحك على وجه التحديد.
في السابق ، بالنسبة لإدارة الجهاز ، قدمنا واجهة
القيود ، وكان على المطور تعيين جميع القيود والمعلمات لطلب الوسائط بشكل مستقل. فيما يلي مثال صغير لطلب صوت وفيديو مخصص بالكامل:
const myConstraints = { audio:{ sampleSize: 16, channelCount: 2, noiseSuppression: true, echoCancellation: false }, video:{ width: { min: 640, ideal: 1920, max: 1920 }, height: { min: 400, ideal: 1080 }, aspectRatio: 1.777777778, frameRate: { max: 30 }, facingMode: { exact: "user" } } };
هذا يعطي مرونة لا تصدق عند إعداد الصوت والفيديو ، ولكن هناك دائما "بوت". كما أظهرت إحصائيات استبيان الدعم ، لم يستخدم العملاء هذا الخيار بشكل أساسي ، نظرًا لأننا نظام أساسي سهل الاستخدام ونعتاد المستخدمين على البساطة. أولئك الذين تجرأوا على استخدام هذا ، غالبًا ما أطلقوا النار على أنفسهم فوق الركبة ، نظرًا لأن المتصفحات لديها عدم توافق طفيف في هذه المرحلة من الفضاء.
الآن أصبح من الواضح كيف وصلنا إلى مثل هذه الحياة. حان الوقت لبدء العمل: نظرة سريعة على الوحدة ؛ لقراءة تفصيلية ، سأترك رابطًا
للوثائق على موقعنا .
نقطة الدخول لهذه الوحدة هي
StreamManager . تاريخياً ، [الصورة مع elephant.jpg] ، أن العديد من أجزاء Web SDK الخاصة بنا هي مفرد ، وهذه الفئة ليست استثناء: يمكنك الحصول على مثيل باستخدام وظيفة
get () . هناك بحر من الأسباب ، ولكن ربما أكثر من ذلك في وقت آخر ، ربما.
const streamManager = VoxImplant.Hardware.StreamManager.get();
باستخدام StreamManager ، يمكنك تمكين أو تعطيل الفيديو المحلي و
للحصول على دفق وسائط له - في الواقع ، هذا كل شيء. نقطة الدخول ليست كبيرة جدًا عند النظر إلى الواجهات الخارجية.
(async () => { try{ console.log('[WebSDK] '); await streamManager.showLocalVideo(); console.log('[WebSDK] '); await streamManager.hideLocalVideo(); console.log('[WebSDK] !'); } catch(e){ console.log('[WebSDK] - . , ?!'); console.error(e); } })();
حقيقة مثيرة للاهتمام حول الفيديو المحلي: لا يتم نقل الفيديو المحلي إلى المحاور بأي شكل من الأشكال. على سبيل المثال ، يمكن للمستخدم عرض صورة بدقة عالية ، وإرسال 320 * 240 ، أو العكس ، إذا كان الفيديو المحلي مخفيًا في زاوية. فيما يلي سيكون حول كيفية التحريك مثل هذه الحيلة.
هناك 3 أحداث في StreamManager:
باستخدام وظيفة
getLocalMediaRenderers () ، من المفيد الحصول على روابط لعناصر DOM بالفيديو المحلي إذا لم تقم بحفظ الكائن لنفسك.
streamManager.getLocalMediaRenderers().forEach(renderer => { cont elementOfDOM = renderer.element; elementOfDOM.addEventListener('on42',doSomething,true); });
دعنا ننتقل إلى إعدادات الفيديو (الأكثر لذيذ ، شاهد يديك). فجأة
CameraManager . مرة أخرى ، المفرد مع وظيفة
get () المملة:
const cameraManager= VoxImplant.Hardware.CameraManager.get();
ما هي الإعدادات التي يمكننا ضبطها على الإطلاق؟ دعونا نلقي نظرة على واجهة
CameraParams :
هناك 3 خيارات أخرى مسؤولة عن حجم الفيديو:
دعونا نعود إلى CameraManager ونطبق الإعدادات! يوجد في الداخل حرفان وضبطان للإعدادات:
كل ذلك مع "افتراضي" هو الإعدادات "الافتراضية" ، كما قد تخمن. سيتم استخدامها لتلقي الفيديو المحلي ، للمكالمات الواردة والصادرة الجديدة.
والآن التركيز الموعود:
console.log('[WebSDK] .'); await cameraManager.setDefaultVideoSettings({ frameWidth:320, frameHeight:240, frameRate:12 }); await streamManager.showLocalVideo(); cameraManager.setDefaultVideoSettings({ frameWidth:640, frameHeight:480, frameRate:25 }); const newCall = client.call('mySchoolFriendBoris');
الاقتران مع
Call في الاسم أكثر تعقيدًا بعض الشيء. تم تصميم هذه الوظائف لتلقي وتعيين التفضيلات أثناء مكالمة جارية بالفعل. عند تغيير الإعدادات ،
سيحدث الحدث
CallEvents.Updated .
console.log('[WebSDK] .'); cameraManager.setCallVideoSettings(newCall,{ frameWidth:320, frameHeight:240, frameRate:12 }); newCall.on(VoxImplant.CallEvents.Updated,e => { console.log('[WebSDK] .'); });
تبقى وظيفتان لـ CameraManager. قوية جدا لكنها متطورة. يحتوي تعداد
VideoQuality على ثلاثة معاني مثيرة للاهتمام:
- VIDEO_QUALITY_HIGH ،
- VIDEO_QUALITY_MEDIUM ،
- VIDEO_QUALITY_LOW.
سؤال منطقي: "إيغور! إذا كانت Web SDK تعرف أفضل جودة وأسوأها ومتوسطها ، فلماذا لا توجد طريقة لإدراج القرارات التي تدعمها كاميرا الويب؟! " Tsimes لا يعرف.
وللاكتشاف ، تحتاج إلى فرز جميع الأذونات الممكنة حرفيا. ما تمكنت من الحصول عليه مدعوم. يبدو الأمر بسيطًا جدًا ، ولكنه في الواقع يستغرق عدة دقائق. لذلك ، لا يمكننا القيام بذلك في تهيئة WebSDK ، على سبيل المثال. بحيث يمكنك القيام بذلك في الوقت الذي هو أكثر راحة للمستخدم - إذا كنت ترغب في القيام بذلك على الإطلاق - وهناك
قرارات الدقة . سيكون من الجيد حفظ نتيجة عمل الوظيفة في
التخزين المحلي ثم تحميلها لاحقًا من خلال
loadResolutionTestResult عند إعادة تحميل الصفحة:
console.log('[WebSDK] , WebSDK .'); const testResults = await cameraManager.testResolutions(); localStorage.setItem('defaultCameraResolutionTestResults',JSON.stringify(testResolutions));
أخيرًا وليس آخرًا ،
AudioDeviceManager . يشبه الفصل إلى حد كبير
CameraManager . للصوت فقط ، تنعكس إعداداتك في واجهة
AudioParams :
- صارم - صحيح هو المسؤول عن اتباع إرادتك بدقة ؛
- inputId - اختيار الميكروفون. يمكن الحصول على قائمة بجميع الميكروفونات من خلال AudioDeviceManager.getInputDevices ؛
- outputId - اختيار مكبرات الصوت. يعمل هذا الخيار فقط في Chrome ، وسوف تتجاهله المتصفحات الأخرى. يمكنك الحصول على قائمة بالأجهزة من خلال getOutputDevices ؛
- الضجيج قمع - الحد من الضوضاء. بشكل افتراضي ، يتم تمكين تقليل الضوضاء ويعمل بشكل رائع. ولكن قد يحدث فقدان جزئي للصوت إذا كان المستخدم يعمل في غرفة يتحدثون فيها كثيرًا ، على سبيل المثال ، في مركز اتصال. قد يقوم المرشح بخطأ بسيط ويقطع الفائض. إذا كانت لديك مشاكل من هذا النوع ، فمن الجدير ضبط هذا الخيار على خطأ ؛
- إلغاء الصدى - يزيل صدى الصوت من الميكروفون. يجب تعطيله مع الخيار السابق ؛
- autoGainControl - يتضمن آلية لضبط مكاسب الميكروفون المضمنة في نظام التشغيل تلقائيًا. لا يحتوي الخيار على أي آثار جانبية ، لكن تشغيله يعتمد بشكل كبير على نظام التشغيل والأجهزة. في بعض الأحيان قد لا يعمل ببساطة وسيكون الربح ثابتًا ، وهو أمر جيد أيضًا.