עדכוני מדיה ב-Chrome 62

François Beaufort
François Beaufort

רישיונות קבועים ל-Android

רישיון קבוע ב-Encrypted Media Extensions‏ (EME): הרישיון יכול להישמר במכשיר כדי שאפליקציות יוכלו לטעון אותו לזיכרון בלי לשלוח בקשה נוספת לרישיון לשרת. כך מתאפשרת תמיכה בהפעלה אופליין ב-EME.

עד עכשיו, ChromeOS הייתה הפלטפורמה היחידה שתומכת ברישיונות קבועים. זה כבר לא נכון. הפעלת תוכן מוגן באמצעות EME כשהמכשיר במצב אופליין אפשרית עכשיו גם ב-Android.

const config = [{
  sessionTypes: ['persistent-license'],
  videoCapabilities: [{
    contentType: 'video/webm; codecs="vp09.00.10.08"',
    robustness: 'SW_SECURE_DECODE' // Widevine L3
  }]
}];

// Chrome will prompt user if website is allowed to uniquely identify
// user's device to play protected content.
navigator.requestMediaKeySystemAccess('com.widevine.alpha', config)
.then(access => {
  // User will be able to watch encrypted content while being offline when
  // license is stored locally on device and loaded later.
})
.catch(error => {
  // Persistent licenses are not supported on this platform yet.
});

אתם יכולים לנסות את הרישיונות הקבועים בעצמכם. כדי לעשות את זה, נכנסים ל-PWA לדוגמה של מדיה ומבצעים את השלבים הבאים:

  1. עוברים לכתובת https://biograf-155113.appspot.com/ttt/episode-2/.
  2. לוחצים על 'התאמה לעבודה במצב אופליין' וממתינים להורדת הסרטון.
  3. מפעילים את מצב הטיסה.
  4. לוחצים על הלחצן 'הפעלה' ונהנים מהסרטון.

Widevine L1 ל-Android

כפי שאולי כבר ידעת, כל מכשירי Android נדרשים לתמוך ברמת האבטחה 3 של Widevine‏ (Widevine L3). עם זאת, יש הרבה מכשירים שתומכים גם ברמת האבטחה הגבוהה ביותר: רמת אבטחה 1 של Widevine, שבה כל עיבוד התוכן, הקריפטוגרפיה והבקרה מתבצעים בסביבת מחשוב אמינה (TEE).

חדשות טובות! מעכשיו יש תמיכה ב-Widevine L1 ב-Chrome ל-Android, כך שאפשר להפעיל מדיה בצורה המאובטחת ביותר. שימו לב שהיא נתמכת כבר ב-Chrome OS.

const config = [{
  videoCapabilities: [{
    contentType: 'video/webm; codecs="vp09.00.10.08"',
    robustness: 'HW_SECURE_ALL' // Widevine L1
  }]
}];

// Chrome will prompt user if website is allowed to uniquely identify
// user's device to play protected content.
navigator.requestMediaKeySystemAccess('com.widevine.alpha', config)
.then(access => {
  // User will be able to watch encrypted content in the most secure way.
})
.catch(error => {
  // Widevine L1 is not supported on this platform yet.
});

ב-Shaka Player, ספריית ה-JavaScript לפורמטים של מדיה אדפטיבית (כמו DASH ו-HLS), יש הדגמה שבה אפשר לנסות את Widevine L1:

  1. נכנסים לכתובת https://shaka-player-demo.appspot.com/demo/ ולוחצים על 'אישור' כשתופיע הודעה על כך.
  2. בוחרים באפשרות 'Angel One (multicodec, multilingual, Widevine)'.
  3. מזינים HW_SECURE_ALL בשדה 'עמידות הסרטון' בקטע 'הגדרה'.
  4. לוחצים על הלחצן 'טעינה' ונהנים מהסרטון.

אופטימיזציה של טראק וידאו ברקע (MSE בלבד)

צוות Chrome תמיד מנסה למצוא דרכים חדשות לשיפור חיי הסוללה, ו-Chrome 62 אינו יוצא מן הכלל.

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

התאמה אישית של הטווח הניתן לחיפוש בשידורים חיים של MSE

כפי שאתם אולי יודעים, המאפיין seekable מכיל את טווחי משאבי המדיה שהדפדפן יכול לחפש בהם. בדרך כלל, הוא מכיל טווח זמן אחד שמתחיל ב-0 ומסתיים במשך הזמן של משאב המדיה. עם זאת, אם משך הזמן לא זמין, למשל בשידור חי, טווח הזמן עשוי להשתנות באופן קבוע.

החדשות הטובות הן שאפשר עכשיו להתאים אישית את הלוגיקה של טווח seekable בצורה יעילה יותר באמצעות תוספים של מקורות מדיה (MSE). לשם כך, מספקים או מסירים טווח אחד שניתן לדלג אליו, שמאוחד עם הטווחים הנוכחיים שנשמרו במטמון. התוצאה היא טווח אחד שניתן לדילוג שמתאים לשניהם, כשמשך הזמן של מקור המדיה הוא +Infinity.

בקוד הבא, מקור המדיה כבר מצורף לרכיב מדיה ומכיל רק את מקטע ה-init שלו:

const mediaSource = new MediaSource();
...

mediaSource.duration = +Infinity;
// Seekable time ranges: { }
// Buffered time ranges: { }

mediaSource.setLiveSeekableRange(1 /* start */, 4 /* end */);
// Seekable time ranges: { [1.000, 4.000) }
// Buffered time ranges: { }

// Let's append a media segment that starts at 3 seconds and ends at 6.
mediaSource.sourceBuffers[0].appendBuffer(someData);
// Seekable time ranges: { [1.000, 6.000) }
// Buffered time ranges: { [3.000, 6.000) }

mediaSource.clearLiveSeekableRange();
// Seekable time ranges: { [0.000, 6.000) }
// Buffered time ranges: { [3.000, 6.000) }

יש מקרים רבים שלא תיארתי למעלה, לכן מומלץ לנסות את הדוגמה הרשמית כדי לראות איך טווחי זמן שנשמרו במטמון וניתנים לדילוג מגיבים לאירועי MSE שונים.

Intent to Ship | Chromestatus Tracker | באג ב-Chromium

FLAC ב-MP4 עבור MSE

פורמט קידוד האודיו ללא אובדן נתונים FLAC נתמך בהפעלת מדיה רגילה מאז Chrome 56. זמן קצר לאחר מכן נוספה תמיכה ב-FLAC ב-ISO-BMFF (כלומר FLAC ב-MP4). עכשיו FLAC ב-MP4 זמין ב-Chrome 62 לתוספים של מקורות מדיה (MSE).

לידיעתך, צוות Firefox פיתח ושילב תמיכה במפרט של FLAC בתוך אנקפסולציה של MP4, ו-BBC ניסתה להשתמש בו עם MSE. מידע נוסף זמין בפוסט של BBC בנושא 'העברת הצליל של קונצרטים ברדיו 3'.

כך אפשר לבדוק אם יש תמיכה ב-MSE ב-FLAC ב-MP4:

if (MediaSource.isTypeSupported('audio/mp4; codecs="flac"')) {
  // TODO: Fetch data and feed it to a media source.
}

אם אתם רוצים לראות דוגמה מלאה, תוכלו לעיין בדוגמה הרשמית שלנו.

Intent to Ship | Chromestatus Tracker | באג ב-Chromium

הסרטון מוצג במסך מלא כשמסובבים את המכשיר

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