تسجيل الوسائط والقيود

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

أجهزة الوسائط

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

القيود

عند الوصول إلى أجهزة الوسائط، من الممارسات الجيدة تقديم قيود مقيّدة قدر الإمكان. ومع أنه يمكن فتح الكاميرا التلقائية والميكروفون مع فرض قيود بسيطة، قد يؤدي ذلك إلى عرض بث وسائط بعيدًا عن أفضل طريقة للتطبيق.

ويتم تحديد القيود المحدّدة في عنصر MediaTrackConstraint، تمثّل قيودًا للصوت والفيديو. السمات في هذا العنصر من النوع ConstraintLong أو ConstraintBoolean أو ConstraintDouble أو ConstraintDOMString. ويمكن أن تكون هذه القيمة محدّدة (مثل رقم أو قيمة منطقية أو سلسلة)، أو نطاق (LongRange أو DoubleRange بالحد الأدنى والحد الأقصى) أو كائن بتعريف ideal أو exact. لعرض قيمة معيّنة، سيحاول المتصفّح اختيار محتوى أقرب ما يمكن. بالنسبة إلى النطاق، سيتم استخدام أفضل قيمة في هذا النطاق. وعند تحديد exact، سيتم عرض بث الوسائط الذي يتطابق تمامًا مع ذلك القيد.

قريب

// Camera with a resolution as close to 640x480 as possible
{
    "video": {
        "width": 640,
        "height": 480
    }
}

النطاق

// Camera with a resolution in the range 640x480 to 1024x768
{
    "video": {
        "width": {
            "min": 640,
            "max": 1024
        },
        "height": {
            "min": 480,
            "max": 768
        }
    }
}

تامة

// Camera with the exact resolution of 1024x768
{
    "video": {
        "width": {
            "exact": 1024
        },
        "height": {
            "exact": 768
        }
    }
}

لتحديد الضبط الفعلي الذي يتضمّنه مسار معيّن لبث الوسائط، يمكننا استدعاء القيمة MediaStreamTrack.getSettings() التي تعرض MediaTrackSettings المُطبّقة حاليًا.

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

وسائط الشبكة الإعلانية

إذا كان لديك رغبة في التمكن من تنفيذ تسجيل الشاشة وتسجيلها، يجب أن يستخدم Display Media API. الدالة getDisplayMedia() (وهي جزء من navigator.mediaDevices) تشبه getUserMedia() وتُستخدم لغرض فتح محتوى الشاشة (أو جزء منها، مثل النافذة). تعمل السمة MediaStream المعروضة كما هي عند استخدام getUserMedia().

تختلف قيود getDisplayMedia() عن القيود المستخدمة لإدخال الفيديو العادي أو إدخال الصوت.

{
    video: {
        cursor: 'always' | 'motion' | 'never',
        displaySurface: 'application' | 'browser' | 'monitor' | 'window'
    }
}

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

مجموعات البث والمقاطع الصوتية

تمثّل MediaStream مجموعة بث لمحتوى الوسائط، تتألف من مقاطع صوتية (MediaStreamTrack) من الصوت والفيديو. يمكنك استرداد جميع المسارات من MediaStream من خلال استدعاء MediaStream.getTracks()، الذي يعرض مجموعة من كائنات MediaStreamTrack.

قناة MediaStreamTrack

تشتمل السمة MediaStreamTrack على السمة kind إمّا audio أو video، للإشارة إلى نوع الوسائط الذي تمثله. يمكن كتم صوت كل مقطع صوتي عن طريق التبديل إليه في خاصية enabled. يحتوي المسار على خاصية منطقية remote تشير إلى ما إذا كان مصدره RTCPeerConnection هو مصدره من التطبيقات المشابهة عن بُعد.