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

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

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

יש שלוש הוצאות משימוש של MediaStream ב-Chrome 45:

  • 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 בנושא צילום וסטרימינג של מדיה בחנו את הבעיה מה קורה כשאתם מוסיפים טראקים חדשים ל-MediaStream, ואם הסתיים MediaStream ריק, הם הבינו שיש אין דרך הגיונית להטמיע את ended ב-MediaStream (כמו 'לא יתחיל שוב אף פעם'). בחלקים אחרים של 'סוף' ב-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);
    });

תווית

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

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

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

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

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

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