前提条件
iOS 10 以降のデバイスの FairPlay 用にオフライン DRM を実装する前に、次の準備が必要です。
-
Apple FairPlay ライセンスの要件と構成を読む
- Apple Developer Network から FPS SDK を入手します。 FPS SDK には、2 つのコンポーネントが含まれています。
- FPS Server SDK には、キー セキュリティ モジュール (KSM)、クライアントのサンプル、仕様、テスト ベクターのセットが含まれています。
- FPS 展開パック。D 関数の仕様と、FPS 証明書の顧客固有の秘密キーとアプリケーション シークレット キーを生成する方法に関する手順が含まれています。 Apple は、ライセンスのあるコンテンツ プロバイダーに対してのみ、FPS Deployment Pack を発行します。
- FPS 証明書の生成の一環として受け取る .der または .cer 証明書ファイルには公開キーが含まれており、クライアントで使用できます。 秘密キー (.pfx) は、Azure Key Vault またはその他の安全な場所でセキュリティ保護する必要があります。
FairPlay 秘密キー (.pfx) を Azure Key Vaultに格納する
Apple から受け取る秘密キー (.pfx) は、セキュリティで保護された証明書として扱われる必要があり、Azure Key Vault に保存できます。
- .pfx 証明書ファイルは、管理者が最初に base 64 テキスト ファイルに変換する必要があります
- 変換後、このファイルはセキュリティで保護されたテキスト ファイルとして Azure DevOps Services に保存できます。
- その後、文字列は、"シークレット オブジェクト" として、またはソリューションのデプロイ/ビルド スクリプトの一部として、Azure KeyVault に手動で保存できます。 Azure KeyVault に FairPlay プライベート証明書を保存する例は、Gridwich プロジェクトのサンプル コードで確認できます
- 必要に応じて、.pfx ファイルのパスワードをシークレットとしてキー コンテナーに保存します。
CLI スクリプトの例
base64 でエンコードされた秘密キー ファイルを 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
サンプルを複製する
Media Services .Net サンプルを複製します。
git clone https://github.com/Azure-Samples/media-services-v3-dotnet-tutorials.git
コードを変更する
「.NET を使用して DRM を使用して暗号化する」のコードを変更して、FairPlay 構成を追加します。
Note
Widevine は、GovCloud リージョンでは使用できません。
前提条件
Android デバイスに Widevine 用のオフライン DRM を実装する前に、次のことを行っておく必要があります。
オフライン モードを有効にする
Widevine ライセンスの オフライン モードを有効にするには、 Widevine ライセンス テンプレートを構成します。
policy_overrides オブジェクトで、「ConfigureWidevineLicenseTemplate」に示すように、can_persist プロパティを true に設定します。
Android デバイス用のネイティブ プレーヤー アプリを開発する最も簡単な方法は、オープンソースのビデオ プレーヤー SDK である Google ExoPlayer SDK を使うことです。 ExoPlayer では、Android のネイティブ MediaPlayer API では現在サポートされていない、MPEG-DASH や Microsoft Smooth Streaming 配信プロトコルなどの機能がサポートされています。
ExoPlayer バージョン 2.6 以降には、Widevine DRM のオフライン再生をサポートする多くのクラスが含まれています。 特に、 OfflineLicenseHelper
クラスには、オフライン ライセンスのダウンロード、更新、およびリリースに DefaultDrmSessionManager を使用するためのユーティリティ関数が用意されています。 SDK フォルダー library/core/src/main/java/com/google/android/exoplayer2/offline/
に用意されているクラスは、オフライン ビデオ コンテンツのダウンロードをサポートしています。
ExoPlayer SDK for 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
開発者は、アプリケーションの開発中に、ExoPlayer 開発者ガイドおよび対応する開発者ブログを参照する必要があります。
古い Android デバイスの使用
一部の古い Android デバイスでは、policy_overrides のプロパティ rental_duration_seconds、playback_duration_seconds、license_duration_seconds の値を設定する必要があります (Widevine ライセンス テンプレートで定義されています)。 または、 を に 0
設定することもできます。これは、時間制限がないことを意味します。
Xamarin を使用して Android 再生アプリをビルドする
ExoPlayer 用の Xamarin バインドについては以下のリンクをご覧ください。
次のスレッドもご覧ください。Xamarin バインディング。
Android 用の Chrome プレーヤー アプリ
Chrome for Android v.62 のリリース以降では、EME での永続ライセンスがサポートされます。
Widevine L1 も、Chrome for Android でサポートされるようになっています。 これにより、エンド ユーザーがこのバージョン (またはそれ以降) の Chrome を使っている場合、Chrome でオフライン再生アプリケーションを作成できます。
さらに、Google はプログレッシブ Web アプリ (PWA) サンプルを作成しました。
Android フォンでモバイル Chrome ブラウザーを v62 (またはそれ以降) にアップグレードし、上記のホストされたサンプル アプリをテストした場合、オンライン ストリーミングとオフライン再生の両方が機能することを確認できます。
上記のオープンソース PWA アプリは、Node.js で作成されています。 独自のバージョンを Ubuntu サーバーでホストする場合は、再生を妨げる可能性のある、以下のよく発生する問題に留意してください。
- CORS の問題:サンプル アプリ内のサンプル ビデオは、 https://storage.googleapis.com/biograf-video-files/videos/ でホストされます。 Google は、Google Cloud Storage バケットでホストされているすべてのテスト サンプル用に CORS を設定しています。 これらは CORS ヘッダーで提供され、CORS エントリ
https://biograf-155113.appspot.com
(Google がサンプルをホストしているドメイン) が明示的に指定されていて、他のサイトではアクセスできません。 試みると、次のような 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.
- 証明書の問題:Chrome v 58 以降では、Widevine 用の EME には HTTPS が必要です。 したがって、X509 証明書を使って HTTPS 経由でサンプル アプリをホストする必要があります。 通常のテスト証明書は次の要件のため機能しません。次の最小要件を満たす証明書を取得する必要があります。
- Chrome および Firefox では、SAN-Subject Alternative Name の設定が証明書に存在する必要があります
- 証明書には信頼された CA が必要であり、開発用の自己署名証明書は機能しません
- 証明書には、Web サーバーまたはゲートウェイの DNS 名と一致する CN が必要です。
H264/AAC によるスムーズ ストリーミング (PIFF) ファイル形式には、PlayReady (AES-128 CTR) とのバインディングがあります。 スムーズストリーミング.ismvファイルは、オーディオがビデオで多重化されていると仮定して、それ自体がfMP4であり、再生に使用することができます。 スムーズ ストリーミング コンテンツが PlayReady 暗号化を通過すると、各 .ismv ファイルは PlayReady で保護された MP4 フラグメントになります。 優先ビットレートの .ismv ファイルを選択し、ダウンロード .mp4 として名前を変更できます。
プログレッシブ ダウンロード用の、PlayReady で保護された MP4 をホストするためのオプションが 2 つあります。
- MP4 を同じコンテナー/メディア サービス資産に配置し、Azure Media Services ストリーミング エンドポイントを使用してプログレッシブ ダウンロードを行うことができます。
- SAS URL は、Azure Storage から直接プログレッシブ ダウンロードに使用できます。
2 種類の PlayReady ライセンス配信を使用できます。
- Azure Media Services の PlayReady ライセンス配信サービス
- 任意の場所でホストされる PlayReady ライセンス サーバー。
AMS 配信サービスで PlayReady ライセンスを取得するには、 Media Services v3 with PlayReady ライセンス テンプレートを参照してください。
再生テストには、Windows 10 でユニバーサル Windows アプリケーションを使用できます。
Windows 10 のユニバーサル サンプルのセクションには、アダプティブ ストリーミングのサンプルという名前の基本的なプレーヤーのサンプルがあります。 ダウンロードしたビデオを選択するためのコードを追加し、アダプティブ ストリーミング ソースではなくソースとして使用します。