אם אתם עובדים עם 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 (מוטמעת) (05ac:8510).
אפשר לראות את התכונות האלה בפעולה: פותחים את simpl.info/gum ב-Chrome (במכשיר עם מצלמה) ומציגים את מסוף כלי הפיתוח של Chrome. אובייקט MediaStream stream
שמוענק ל-callback getUserMedia()
בדמו הזה נמצא בהיקף גלובלי, כך שאפשר לבדוק אותו מהמסוף. אפשר להריץ את הפונקציה stream.getTracks()[0]
כדי להציג את MediaStreamTrack
של השידור הזה.
Stop(), ended ו-active
כשקבוצת העבודה של W3C בנושא Media Capture and Streams בחנה את הבעיה של מה שקורה כשמוסיפים טראקים חדשים ל-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. אפשר לעקוב אחרי הבאגים של ההוצאות האלה משימוש (כאן וכאן) ולמצוא דיון ופרטי מידע נוספים בכוונת ההטמעה.