אנחנו מוציאים משימוש את MediaStream

אם אתם משתמשים ב-getUserMedia() או ב-WebRTC, יכול להיות שתצטרכו לשנות את הקוד ב-Chrome 45 ואילך.

MediaStream API מייצג שידורים מסונכרנים של מדיה. לדוגמה, בשידור שנקלט מהמצלמה והמיקרופון יש טראקים מסונכרנים של וידאו ואודיו. כל טראק מיוצג על ידי MediaStreamTrack. (להתבלבל עם האלמנט<track>!)

ב-Chrome 45 יצאו משימוש שלושה סוגים של MediaStream:

  • MediaStream.ended
  • MediaStream.label
  • MediaStream.stop()

במקביל יש שתי תוספות:

  • MediaStream.active
  • MediaStreamTrack.stop()

אלה השינויים שצריך לבצע:

  • באמצעות MediaStream.active אפשר לבדוק אם מתבצע סטרימינג של MediaStream, ולא MediaStream.ended.
  • יש להשתמש בMediaStreamTrack.stop() כדי להפסיק את השידור, ולא ב-MediaStream.stop().
  • אם נדרש מזהה ייחודי ל-MediaStream, צריך להשתמש ב-MediaStream.id במקום ב-MediaStream.label. MediaStreamTrack.label מספק שם קריא (לבני אדם) למכשיר המקור של השידור, למשל FaceTime HD Camera (Built-in) (05ac:8510).

אפשר לראות אותם בפעולה: פותחים את simpl.info/gum ב-Chrome (במכשיר עם מצלמה) וצופים במסוף כלי הפיתוח ל-Chrome. אובייקט ה-MediaStream stream שהועבר לקריאה החוזרת (callback) של getUserMedia() בהדגמה הזו נמצא בהיקף גלובלי, כך שאפשר לבדוק אותו מהמסוף. אפשר להתקשר אל stream.getTracks()[0] כדי להציג את MediaStreamTrack של השידור הזה.

צילום מסך שבו מוצגים MediaStream ו-MediaStreamTrack במסוף כלי הפיתוח של Chrome

Stop(), הסתיים ופעיל

כאשר קבוצת העבודה של ארגון W3C לכידת מדיה וסטרימינג שלMediaStreamMediaStreamMediaStreamended בחלקים אחרים של HTML5 'הסתיים' פירושו 'זה הסתיים ולא ימשיך'. למצב 'פעיל' אין השפעה כזו: זרם לא פעיל יכול להפוך שוב ל'פעיל', למשל אם מוסיפים לו טראק חדש. במקום להשאיר מאפיין ופונקציה מבלבלים, קבוצת העבודה החליטה להסיר אותם.

הנה דוגמה לשימוש ב-'MediaStream.active' כדי לבדוק את הסטטוס של סטרימינג:

var gumStream;

navigator.getUserMedia({audio: false, video: true},
    function(stream) {
            gumStream = stream;
        // ...
    },
    function(error) {
        console.log('getUserMedia() error', error);
    });

// …

if (gumStream.active) {
    // do something with the stream
}

הסרת stop() מ-MediaStream לא הסירה פונקציונליות אמיתית: תהליכים לניתוק מכשירי מקור וכן הלאה צריך לבצע ב-MediaStreamTrack בכל מקרה. במקום זאת, יש להשתמש באפליקציה stop() ב-MediaStreamTrack:

navigator.getUserMedia({audio: false, video: true},
    function(stream) {
            // can also use getAudioTracks() or getVideoTracks()
        var track = stream.getTracks()[0];  // if only one media track
        // ...
        track.stop();
    },
    function(error){
        console.log('getUserMedia() error', error);
    });

label

מסתבר שאף אחד לא הצליח להבין איך להשתמש בנכס הזה!

הוספנו את MediaStream.label לגרסה הראשונה של המפרט, אבל אף אחד לא ידע מה המטרה של label. גם לא היה ברור מה קרה ל-label כששידור נשלח דרך RTCPeerConnection.

קבוצת העבודה של W3C ביקשה עזרה, ואף אחד לא רצה את זה, אז הם הסירו אותה.

כדי לחזור: MediaStream.id מספק מזהה ייחודי ל-MediaStream, ו-MediaStreamTrack.label מספק את שם מקור השידור, למשל סוג המצלמה או המיקרופון.

מידע נוסף על MediaStream ו-MediaStreamTrack זמין ב-Mozilla Developer Network ו-HTML5 Rocks מספק מבוא מצוין ל-getUserMedia() בצילום אודיו ווידאו.

כמו תמיד, אנחנו מעריכים את המשוב שלך לגבי שינויים ב-Chrome. אפשר לעקוב אחר הבאגים שמוציאים משימוש (כאן וכאן) ולמצוא דיון נוסף ופרטים נוספים בכוונה ליישם.