Aktualności multimedialne w Chrome 62

François Beaufort
François Beaufort

Trwałe licencje na Androida

Trwała licencja w zaszyfrowanych rozszerzeniach multimediów (EME) oznacza, że licencja może być przechowywana na urządzeniu, aby aplikacje mogły wczytać ją do pamięci bez wysyłania kolejnego żądania licencji do serwera. W ten sposób odtwarzanie offline jest obsługiwane w EME.

Do tej pory ChromeOS był jedyną platformą obsługującą trwałe licencje. To już nie jest prawdą. Odtwarzanie treści chronionych za pomocą szyfrowania EME jest teraz możliwe również na urządzeniach z Androidem, gdy są one offline.

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.
});

Możesz samodzielnie wypróbować licencje trwałe, korzystając z próbnej wersji PWA z multimediami i wykonując te czynności:

  1. Wejdź na stronę https://biograf-155113.appspot.com/ttt/episode-2/.
  2. Kliknij „Udostępnij w trybie offline” i poczekaj na pobranie filmu.
  3. Włącz tryb samolotowy.
  4. Kliknij przycisk „Odtwórz” i obejrzyj film.

Widevine L1 na Androida

Jak pewnie wiesz, wszystkie urządzenia z Androidem muszą obsługiwać poziom zabezpieczeń 3 (Widevine L3) systemu Widevine. Istnieje jednak wiele urządzeń, które obsługują najwyższy poziom zabezpieczeń: Widevine Security Level 1, w których przypadku wszystkie operacje przetwarzania treści, szyfrowania i kontroli są wykonywane w zaufanym środowisku wykonawczym (TEE).

Dobre wieści! Widevine L1 jest teraz obsługiwany w Chrome na Androida, dzięki czemu można odtwarzać multimedia w najbezpieczniejszy sposób. Ta funkcja była już obsługiwana w 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.
});

W Shaka Player, bibliotece JavaScriptu na potrzeby adaptacyjnych formatów multimediów (takich jak DASH i HLS), znajdziesz wersję demonstracyjną, w której możesz wypróbować Widevine L1:

  1. Wejdź na https://shaka-player-demo.appspot.com/demo/ i gdy pojawi się prośba, kliknij „Zezwól”.
  2. Wybierz „Angel One (multikodek, wiele języków, Widevine)”.
  3. Wpisz HW_SECURE_ALL w polu „Video Robustness” (Robustness Video) w sekcji „Konfiguracja”.
  4. Kliknij przycisk „Wczytaj” i oglądaj film.

Optymalizacja ścieżki wideo w tle (tylko MSE)

Zespół Chrome nieustannie szuka nowych sposobów na wydłużenie czasu pracy na baterii – w tym przypadku Chrome 62 nie jest wyjątkiem.

Chrome wyłącza teraz ścieżki wideo, gdy film jest odtwarzany w tle (np. na niewidocznej karcie), jeśli używa rozszerzeń źródła multimediów (MSE). Więcej informacji znajdziesz w poprzednim artykule.

Dostosuj zakres przewijania w transmisjach MSE na żywo

Jak już wiesz, atrybut seekable zawiera zakresy zasobów multimedialnych, do których przeglądarka może się odwoływać. Zwykle zawiera jeden zakres czasu, który zaczyna się od 0 i kończy w miejscu, w którym kończy się czas trwania zasobu multimedialnego. Jeśli czas trwania nie jest dostępny (np. w przypadku transmisji na żywo), zakres czasu może się stale zmieniać.

Dobra wiadomość jest taka, że teraz możesz skuteczniej dostosowywać seekablelogikę zakresu za pomocą rozszerzeń źródła multimediów (MSE), podając lub usuwając pojedynczy zakres, który można przeskakiwać i który jest złączany z bieżącymi zakresami buforowanymi. Powoduje to powstanie 1 przewijanego zakresu, który pasuje do obu, jeśli czas trwania źródła multimediów to +Infinity.

W poniższym kodzie źródło multimediów jest już dołączone do elementu multimedialnego i zawiera tylko jego segment 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) }

Istnieje wiele przypadków, których nie omówiliśmy powyżej, dlatego zalecamy wypróbowanie oficjalnego przykładu, aby sprawdzić, jak zakresy czasu z buforowaniem i możliwością przewijania reagują na różne zdarzenia MSE.

Intend to Ship | Chromestatus Tracker | Chromium Bug

FLAC w formacie MP4 na potrzeby MSE

Od wersji 56 przeglądarki Chrome format kodowania audio bez strat FLAC jest obsługiwany w przypadku zwykłego odtwarzania multimediów. Wkrótce potem dodano obsługę FLAC w formacie ISO-BMFF (czyli FLAC w MP4). Teraz FLAC w MP4 jest dostępny w Chrome 62 dla rozszerzeń źródeł multimediów (MSE).

Dla przypomnienia: to zespół Firefoxa opracował i wdrożył obsługę specyfikacji opakowania FLAC w MP4, a BBC eksperymentowała z korzystaniem z tego formatu w przypadku MSE. Więcej informacji znajdziesz w artykule „Delivering Radio 3 Concert Sound” (ang.) na stronie BBC.

Aby sprawdzić, czy FLAC w MP4 jest obsługiwany w MSE:

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

Jeśli chcesz zobaczyć pełny przykład, zapoznaj się z naszym oficjalnym plikiem.

Intend to Ship | Chromestatus Tracker | Chromium Bug

Po obróceniu urządzenia film automatycznie włącza się do pełnego ekranu

Jeśli podczas odtwarzania filmu w widoku przekręcisz urządzenie w orientację poziomą, odtwarzanie automatycznie przełączy się w tryb pełnoekranowy. Obrócenie urządzenia do orientacji pionowej spowoduje, że film powróci do trybu pełnoekranowego. Więcej informacji znajdziesz w tym artykule.