Wymagania wstępne
Przed wdrożeniem funkcji DRM w trybie offline dla technologii FairPlay na urządzeniu z systemem iOS 10 lub nowszym:
- Przeczytaj wymagania licencyjne i konfigurację technologii FairPlay firmy Apple
- Uzyskaj zestaw SDK FPS z sieci deweloperów firmy Apple. Zestaw SDK FPS zawiera dwa składniki:
- Zestaw SDK serwera FPS, który zawiera moduł zabezpieczeń kluczy (KSM), przykłady klienta, specyfikację i zestaw wektorów testowych.
- Pakiet wdrożeniowy FPS, który zawiera specyfikację funkcji D, wraz z instrukcjami dotyczącymi sposobu generowania klucza prywatnego certyfikatu FPS specyficznego dla klienta i klucza tajnego aplikacji. Firma Apple wystawia pakiet wdrożeniowy FPS tylko dla licencjonowanych dostawców zawartości.
- Pliki certyfikatów .der/.cer otrzymane w ramach generowania certyfikatu FPS zawierają klucz publiczny i można je udostępnić klientowi. Klucz prywatny (pfx) powinien być zabezpieczony w usłudze Azure Key Vault lub innej bezpiecznej lokalizacji.
Przechowywanie klucza prywatnego FairPlay (pfx) w usłudze Azure Key Vault
Klucz prywatny (pfx) otrzymany od firmy Apple powinien być traktowany jako bezpieczny certyfikat i może być przechowywany w usłudze Azure Key Vault.
- Plik certyfikatu PFX należy najpierw przekonwertować na podstawowy plik tekstowy 64 przez administratora
- Po przekonwertowaniu ten plik może być przechowywany w Azure DevOps Services jako bezpieczny plik tekstowy.
- Ciąg można następnie przechowywać w usłudze Azure KeyVault ręcznie jako "obiekt tajny" lub jako część skryptu wdrożenia/kompilacji dla rozwiązania. Przykład przechowywania prywatnego certyfikatu FairPlay w usłudze Azure KeyVault można zobaczyć w przykładowym kodzie projektu Gridwich
- Opcjonalnie zapisz hasło dla pliku pfx jako wpis tajny w magazynie kluczy.
Przykładowy skrypt interfejsu wiersza polecenia
Aby skopiować plik klucza prywatnego zakodowanego w formacie Base64 do usługi Azure KeyVault:
set -eu
echo key vault : $SHARED_KV_NAME
echo "Copying FairPlay certificate to key vault as secret"
az keyvault secret set --vault-name $SHARED_KV_NAME -n ams-fairPlay-certificate-b64 -f $(FairPlayCertificate.secureFilePath) --output none
Klonowanie przykładu
Sklonuj przykłady dla platformy .Net usługi Media Services.
git clone https://github.com/Azure-Samples/media-services-v3-dotnet-tutorials.git
modyfikować kod
Zmodyfikuj kod w module Szyfruj przy użyciu narzędzia DRM przy użyciu platformy .NET , aby dodać konfiguracje technologii FairPlay.
Uwaga
Widevine nie jest dostępna w regionie GovCloud.
Wymagania wstępne
Przed wdrożeniem funkcji DRM w trybie offline dla platformy Widevine na urządzeniach z systemem Android należy najpierw:
- Zapoznaj się z pojęciami wprowadzonymi na potrzeby ochrony zawartości online przy użyciu narzędzia Widevine DRM.
- Sklonuj https://github.com/Azure-Samples/media-services-v3-dotnet-tutorials.gitplik .
- Zapoznaj się z zestawem Google ExoPlayer SDK dla systemu Android, zestaw SDK odtwarzacza wideo typu open source umożliwiający obsługę odtwarzania drM w trybie offline Widevine.
Włączanie trybu offline
Aby włączyć tryb offline dla licencji Widevine, skonfiguruj szablon licencji Widevine. W obiekcie policy_overrides ustaw właściwość can_persist na wartość true, jak pokazano w temacie ConfigureWidevineLicenseTemplate.
Najprostszym sposobem tworzenia natywnej aplikacji odtwarzacza dla urządzeń z systemem Android jest użycie zestawu SDK google ExoPlayer, zestawu SDK odtwarzacza wideo typu open source. Aplikacja ExoPlayer obsługuje funkcje, które nie są obecnie obsługiwane przez natywny interfejs API odtwarzacza MediaPlayer systemu Android, w tym protokoły dostarczania MPEG-DASH i Microsoft Smooth Streaming.
ExoPlayer w wersji 2.6 i nowszych zawiera wiele klas, które obsługują odtwarzanie drM w trybie offline Widevine. W szczególności klasa udostępnia funkcje narzędziowe OfflineLicenseHelper
ułatwiające korzystanie z elementu DefaultDrmSessionManager do pobierania, odnawiania i wydawania licencji w trybie offline. Klasy udostępnione w folderze library/core/src/main/java/com/google/android/exoplayer2/offline/
zestawu SDK obsługują pobieranie zawartości wideo w trybie offline.
Poniższa lista klas ułatwia tryb offline w zestawie SDK ExoPlayer dla systemu Android:
library/core/src/main/java/com/google/android/exoplayer2/drm/OfflineLicenseHelper.java
library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSession.java
library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManager.java
library/core/src/main/java/com/google/android/exoplayer2/drm/DrmSession.java
library/core/src/main/java/com/google/android/exoplayer2/drm/ErrorStateDrmSession.java
library/core/src/main/java/com/google/android/exoplayer2/drm/ExoMediaDrm.java
library/core/src/main/java/com/google/android/exoplayer2/offline/SegmentDownloader.java
library/core/src/main/java/com/google/android/exoplayer2/offline/DownloaderConstructorHelper.java
library/core/src/main/java/com/google/android/exoplayer2/offline/Downloader.java
library/dash/src/main/java/com/google/android/exoplayer2/source/dash/offline/DashDownloader.java
Deweloperzy powinni odwoływać się do Przewodnika dewelopera ExoPlayer i odpowiedniego bloga dla deweloperów podczas tworzenia aplikacji.
Praca ze starszymi urządzeniami z systemem Android
W przypadku niektórych starszych urządzeń z systemem Android należy ustawić wartości następujących właściwości policy_overrides (zdefiniowanych w szablonie licencji Widevine: rental_duration_seconds, playback_duration_seconds i license_duration_seconds. Alternatywnie można ustawić je na 0
wartość , co oznacza, że nie ma ograniczeń czasowych.
Ostrzeżenie
Wartości muszą być ustawione, aby uniknąć błędu przepełnienia liczby całkowitej. Aby uzyskać więcej informacji na temat problemu, zobacz https://github.com/google/ExoPlayer/issues/3150 i https://github.com/google/ExoPlayer/issues/3112.
Jeśli nie ustawisz jawnie wartości, zostaną przypisane bardzo duże wartości parametrów PlaybackDurationRemaining i LicenseDurationRemaining (na przykład 9223372036854775807, która jest maksymalną wartością dodatnią dla 64-bitowej liczby całkowitej). W związku z tym licencja Widevine wydaje się wygasła, dlatego odszyfrowywanie nie nastąpi.
Ten problem nie występuje w systemie Android 5.0 Lollipop lub nowszym, ponieważ system Android 5.0 jest pierwszą wersją systemu Android, która została zaprojektowana do pełnej obsługi armv8 (Advanced RISC Machine) i 64-bitowych platform, podczas gdy android 4.4 KitKat został pierwotnie zaprojektowany do obsługi platform ARMv7 i 32-bitowych, podobnie jak w przypadku innych starszych wersji systemu Android.
Tworzenie aplikacji odtwarzania systemu Android za pomocą platformy Xamarin
Powiązania platformy Xamarin dla programu ExoPlayer można znaleźć za pomocą następujących linków:
Zobacz również następujący wątek: Powiązanie platformy Xamarin.
Aplikacje odtwarzacza dla programu Chrome dla systemu Android
Począwszy od wersji programu Chrome dla systemu Android w wersji 62, obsługiwana jest trwała licencja w środowisku EME. Rozszerzenie Widevine L1 jest teraz również obsługiwane w przeglądarce Chrome dla systemu Android. Umożliwia to tworzenie aplikacji do odtwarzania w trybie offline w przeglądarce Chrome, jeśli użytkownicy końcowi mają tę (lub nowszą) wersję przeglądarki Chrome.
Ponadto firma Google opracowała przykład Progressive Web App (PWA):
Jeśli uaktualnisz przeglądarkę dla urządzeń przenośnych Chrome do wersji 62 (lub nowszej) na telefonie z systemem Android i przetestujesz powyższą hostowaną przykładową aplikację, zobaczysz, że działa zarówno odtwarzanie strumieniowe online, jak i odtwarzanie w trybie offline.
Powyższa aplikacja PWA typu open source jest utworzona w Node.js. Jeśli chcesz hostować własną wersję na serwerze z systemem Ubuntu, pamiętaj o następujących typowych problemach, które mogą uniemożliwić odtwarzanie:
- Problem z mechanizmem CORS: przykładowy film wideo w przykładowej aplikacji jest hostowany w programie https://storage.googleapis.com/biograf-video-files/videos/. Firma Google skonfigurowała mechanizm CORS dla wszystkich swoich przykładów testowych hostowanych w zasobniku usługi Google Cloud Storage. Są one obsługiwane z nagłówkami CORS, określając jawnie wpis CORS:
https://biograf-155113.appspot.com
(domena, w której google hostuje ich przykład), uniemożliwiając dostęp przez inne witryny. Jeśli spróbujesz, zostanie wyświetlony następujący błąd HTTP: Failed to load https://storage.googleapis.com/biograf-video-files/videos/poly-sizzle-2015/mp4/dash.mpd: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https:\//13.85.80.81:8080' is therefore not allowed access. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
- Problem z certyfikatem: Począwszy od przeglądarki Chrome v 58, EME for Widevine wymaga protokołu HTTPS. W związku z tym należy hostować przykładową aplikację za pośrednictwem protokołu HTTPS przy użyciu certyfikatu X509. Zwykle certyfikat testowy nie działa z powodu następujących wymagań: Należy uzyskać certyfikat spełniający następujące minimalne wymagania:
- Przeglądarka Chrome i Firefox wymagają, aby ustawienie alternatywnej nazwy SAN-Subject istniało w certyfikacie
- Certyfikat musi mieć zaufany urząd certyfikacji, a certyfikat programowania z podpisem własnym nie działa
- Certyfikat musi mieć nazwę CN zgodną z nazwą DNS serwera sieci Web lub bramy
Format pliku smooth streaming (PIFF) z funkcją H264/AAC ma powiązanie z elementem PlayReady (AES-128 CTR). Płynny plik ismv przesyłania strumieniowego, zakładając, że dźwięk jest muxed w wideo, sam jest fMP4 i może być używany do odtwarzania. Jeśli płynne przesyłanie strumieniowe zawartości przechodzi przez szyfrowanie PlayReady, każdy plik ismv staje się fragmentem MP4 chronionym przez element PlayReady. Możesz wybrać plik ismv z preferowaną szybkością transmisji bitów i zmienić jego nazwę na .mp4 do pobrania.
Dostępne są dwie opcje hostowania chronionego pliku MP4 PlayReady do pobierania progresywnego:
- Plik MP4 można umieścić w tym samym elemecie zawartości kontenera/usługi Media Services i użyć punktu końcowego przesyłania strumieniowego usługi Azure Media Services do pobierania progresywnego.
- Możesz użyć adresu URL sygnatury dostępu współdzielonego do pobierania progresywnego bezpośrednio z usługi Azure Storage.
Możesz użyć dwóch typów dostarczania licencji PlayReady:
- Usługa dostarczania licencji PlayReady w usłudze Azure Media Services
- Serwery licencji PlayReady hostowane w dowolnym miejscu.
Aby uzyskać licencję PlayReady z usługą dostarczania AMS, zobacz szablon licencji Usługi Media Services w wersji 3 z licencją PlayReady.
Do testowania odtwarzania można użyć aplikacji uniwersalnej systemu Windows w Windows 10. W Windows 10 uniwersalnych przykładów istnieje podstawowy przykład odtwarzacza o nazwie Adaptive Streaming Sample. Dodaj kod do wybrania pobranego pliku wideo i użyj go jako źródła zamiast źródła adaptacyjnego przesyłania strumieniowego.