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

يتناول الجزء المتعلّق بالوسائط في 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 ويأتي من جهاز بعيد.