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