אילוץ מדיה ואילוצים

חלק המדיה של 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 יש נכס kind שהוא audio או video, המציין את סוג המדיה שהוא מייצג. אפשר להשתיק כל טראק על ידי החלפת המצב של הנכס enabled. למסלול יש מאפיין בוליאני remote, המציין אם הוא הגיע מ-RTCPeerConnection ומגיע מעמית מרוחק.