עדכוני מדיה ב-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, כך שאפשר להפעיל מדיה בצורה המאובטחת ביותר. שימו לב שהתכונה הזו כבר נתמכת ב-ChromeOS.

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 | מעקב אחר סטטוס Chrome | באג ב-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 | מעקב אחר סטטוס Chrome | באג ב-Chromium

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

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