החלק של המדיה ב-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'
}
}
בקטע הקוד שלמעלה אפשר לראות איך פועלות ההגבלות המיוחדות על הקלטת המסך. הערה: יכול להיות שלא כל הדפדפנים שתומכים ב-displayMedia יתמכו בהגדרות האלה.
זרמי נתונים ומסלולים
MediaStream מייצג סטרימינג של תוכן מדיה, שמורכב מטרקים (MediaStreamTrack) של אודיו ווידאו. אפשר לאחזר את כל הרצועות מ-MediaStream באמצעות קריאה ל-MediaStream.getTracks(), שמחזירה מערך של אובייקטים מסוג MediaStreamTrack.
MediaStreamTrack
ל-MediaStreamTrack יש מאפיין kind עם הערך audio או video, שמציין את סוג המדיה שהוא מייצג. אפשר להשתיק כל רצועה באמצעות שינוי הערך של המאפיין enabled שלה. לרכיב track יש מאפיין בוליאני remote שמציין אם הוא מגיע מ-RTCPeerConnection ומעמית מרוחק.