ApsaraVideo Player SDK のセキュアダウンロード機能は、ローカルデバイスにダウンロードされた動画を暗号化します。暗号化された動画は、指定したアプリから生成されたキーファイルを使用してのみ再生でき、悪意のある再生や配布を防止します。
本トピックで説明する機能に関連するすべてのコードと実装の詳細については、API-Example デモプロジェクトを参照し、ベストプラクティスに基づいてコードを調整することを推奨します。
具体的な実装については、API-Example-Android および API-Example-iOS の Video Download and Offline Playback モジュールのソースコードをご参照ください。
概要
ApsaraVideo VOD は、オフライン再生のためにモバイルデバイスへ動画をダウンロードする際、2つのモードをサポートしています。
-
セキュアダウンロード (推奨):このモードでダウンロードされた動画は Alibaba Cloud によって暗号化され、キーファイルでのみ復号化できます。動画は ApsaraVideo Player でのみ再生可能です。
-
通常ダウンロード:このモードでダウンロードされた動画は Alibaba Cloud によって暗号化されず、任意のプレーヤーでコピーおよび再生できます。通常ダウンロードモードを使用する際は十分にご注意ください。
セキュアダウンロード機能は、ダウンロードされた動画を確実に暗号化します。暗号化された動画は、ApsaraVideo VOD コンソールでキーファイルを生成する際に指定したアプリでのみ再生できます。通常ダウンロードと比較して、セキュアダウンロードはダウンロードされた動画の著作権をより適切に保護するため、ほとんどのシナリオで推奨します。
制限事項
-
セキュアダウンロード機能を使用するには、ApsaraVideo Player SDK を組み込む必要があります。
-
ApsaraVideo Player SDK は、VidSts および VidAuth を使用したセキュアダウンロードのみをサポートしています。
-
セキュアダウンロードモードでダウンロードされた動画はローカルデバイス上で暗号化され、指定したアプリの ApsaraVideo Player SDK でのみ再生できます。
前提条件
-
ApsaraVideo VOD コンソールでダウンロード機能が有効になっており、[ダウンロード方法] が [暗号化] に設定されていること。詳細については、「セキュアダウンロードの有効化」をご参照ください。
-
ApsaraVideo Player SDK が組み込まれていること。詳細については、「ApsaraVideo Player for Android のクイック統合」または「ApsaraVideo Player for iOS のクイック統合」をご参照ください。
-
動画がAlibaba Cloud 独自の暗号化またはHLS 暗号化を使用して暗号化されていること。
Androidの主要な実装
セキュアダウンロードの設定
-
暗号化検証ファイルを設定して、セキュアダウンロードを有効にします。
ApsaraVideo VOD コンソールで生成されたキーファイルを ApsaraVideo Player SDK に設定します。キーファイルは、動画のダウンロード時の暗号化と再生時の復号化に使用されます。キーファイルの生成方法の詳細については、「セキュアダウンロード」をご参照ください。
説明キーファイル内の情報が、指定したアプリの情報と一致していることを確認してください。一致しない場合、動画のダウンロードは失敗します。
この設定は Application で 1 回のみ行うことを推奨します。次に例を示します。
PrivateService.initService(getApplicationContext(), "Path to encryptedApp.dat file"); // encryptedApp.dat 検証ファイルをスマートフォンに保存し、ここにローカルファイルパスを設定することを推奨します。 -
ダウンローダーを作成して設定する。
AliDownloaderFactory を使用してダウンローダーを作成します。例:
AliMediaDownloader mAliDownloader = null; ...... // ダウンローダーを作成します。 mAliDownloader = AliDownloaderFactory.create(getApplicationContext()); // ダウンロードの保存パスを設定します。 mAliDownloader.setSaveDir("Save folder path"); -
イベントリスナーを設定します。
ダウンローダーは複数のイベントリスナーを提供します。例:
-
ダウンロードソースを準備します。
ダウンロードソースを
prepareメソッドを使用して準備します。ダウンロードソースは VidSts および VidAuth メソッドに対応しています。例:-
VidSts
// VidSts を作成します。 VidSts aliyunVidSts = new VidSts(); aliyunVidSts.setVid("Vid information"); // 動画 ID (VideoId)。 aliyunVidSts.setAccessKeyId("<yourAccessKeyId>"); // Security Token Service (STS) の AssumeRole API を呼び出して生成された、一時的な STS AccessKey ペアの AccessKey ID。 aliyunVidSts.setAccessKeySecret("<yourAccessKeySecret>"); // Security Token Service (STS) の AssumeRole API を呼び出して生成された、一時的な STS AccessKey ペアの AccessKey secret。 aliyunVidSts.setSecurityToken("<yourSecurityToken>"); // Security Token Service (STS) の AssumeRole API を呼び出して生成された、Security Token Service (STS) トークン。 aliyunVidSts.setRegion("region"); // Video on Demand (VOD) サービスのリージョン。デフォルト値:cn-shanghai。 // VOD コンソールで HLS 暗号化パラメーターのパススルーを有効にしていて、デフォルトのパラメーター名が MtsHlsUriToken の場合は、次のように config を設定して vid に渡す必要があります。 // VOD コンソールで HLS 暗号化パラメーターのパススルーを有効にしていない場合は、次のコードをスキップしてください。 VidPlayerConfigGen vidConfig = new VidPlayerConfigGen(); vidConfig.setMtsHlsUriToken("<yourMtsHlsUriToken>"); aliyunVidSts.setPlayerConfig(vidConfig); // ダウンロードソースを準備します。 mAliDownloader.prepare(aliyunVidSts) -
VidAuth
// VidAuth を作成します。 VidAuth vidAuth = new VidAuth(); vidAuth.setVid("Vid info");// 動画 ID。 vidAuth.setPlayAuth("<yourPlayAuth>");// VOD の GetVideoPlayAuth API を呼び出して生成された再生認証情報。 vidAuth.setRegion("Access region");// プレーヤー SDK バージョン 5.5.5.0 以降では、このパラメーターは非推奨であり、指定は不要です。プレーヤーがリージョンを自動的に解析します。5.5.5.0 より前のバージョンでは、このパラメーターは必須です。VOD のアクセスリージョンのデフォルトは cn-shanghai です。 // VOD コンソールで HLS 標準暗号化パラメーターのパススルーを有効にしていて、デフォルトのパラメーター名が MtsHlsUriToken の場合は、次のように config を設定して vid に渡します。 VidPlayerConfigGen vidConfig = new VidPlayerConfigGen(); vidConfig.setMtsHlsUriToken("<yourMtsHlsUriToken>"); vidAuth.setPlayerConfig(vidConfig); // ダウンロードソースを準備します。 mAliDownloader.prepare(vidAuth);
説明-
ソースファイルのフォーマットはダウンロードしたファイルのフォーマットと一致します。変更はできません。
-
VOD コンソールで HLS 標準暗号化パラメーターのパススルーを有効にしていて、デフォルトのパラメーター名が MtsHlsUriToken の場合は、「HLS 標準暗号化パラメーターのパススルー」をご参照のうえ、上記のとおり VOD ソースに MtsHlsUriToken の値を設定してください。
-
-
準備が完了したら、ダウンロード項目を選択してダウンロードを開始します。
準備が正常に完了すると、
OnPreparedListenerメソッドが呼び出されます。返された TrackInfo には、ビデオストリームの解像度などの情報が含まれています。ダウンロード用に Track を 1 つ選択します。例:public void onPrepared(MediaInfo mediaInfo) { // ダウンロード項目の準備に成功しました。 List<TrackInfo> trackInfos = mediaInfo.getTrackInfos(); // 例:最初の TrackInfo をダウンロードします。 mAliDownloader.selectItem(trackInfos.get(0).getIndex()); // ダウンロードを開始します。 mAliDownloader.start(); } -
(任意) ダウンロードソースの更新
VidSts と VidAuth の有効期限切れを防ぐために、ダウンロードソース情報を更新してダウンロードを開始できます。例:
// ダウンロードソースを更新します。 mAliDownloader.updateSource(aliyunVidSts); // ダウンロードを開始します。 mAliDownloader.start(); -
ダウンロードの成否にかかわらず、ダウンローダーを解放します。
ダウンロードが成功したら、
releaseメソッドをonCompletionまたはonErrorコールバックで呼び出してダウンローダーを解放します。例:mAliDownloader.release(); -
任意: ダウンロードしたファイルを削除します。
ダウンロード中またはダウンロード後に、ダウンロードしたファイルを削除できます。例:
// オブジェクトを介してファイルを削除します。 mAliDownloader.deleteFile(); // 静的メソッドで削除します。成功した場合は 0 を返します。 AliDownloaderFactory.deleteFile("ダウンロードフォルダーへのパス", "動画 ID", "動画フォーマット", "ダウンロードされた動画のインデックス");
ダウンロードした動画の再生
ダウンロードされた動画は、ApsaraVideo Player SDK を使用してのみ再生できます。ダウンロードした動画を再生するには、次の手順を実行します。
-
ダウンロード完了後、ビデオファイルの絶対パスを取得します。
String path = mAliDownloader.getFilePath(); -
VOD
UrlSourceを使用して、再生用の絶対パスを設定します。UrlSource urlSource = new UrlSource(); urlSource.setUri("Playback address");// ダウンロードした動画の絶対パスを設定します。 aliPlayer.setDataSource(urlSource);
VidAuth 方式を使用してダウンロードされた動画には、ダウンロード時に選択した画質のビデオストリームが 1 つだけ含まれます。動画がダウンロードされた後、別の画質に切り替えることはできません。別の画質の動画が必要な場合は、対応するバージョンを再度ダウンロードする必要があります。
iOSの主要な実装
セキュアダウンロードの設定
-
暗号化検証ファイルを設定して、セキュアダウンロードを有効にします。
ApsaraVideo VOD コンソールで生成されたキーファイルを ApsaraVideo Player SDK に設定します。キーファイルは、動画のダウンロード時の暗号化と再生時の復号化に使用されます。キーファイルの生成方法の詳細については、「セキュアダウンロード」をご参照ください。
説明キーファイル内の情報が、指定したアプリの情報と一致していることを確認してください。一致しない場合、動画のダウンロードは失敗します。
この設定はアプリケーションごとに 1 回のみ行うことを推奨します。次に例を示します。
NSString *encrptyFilePath = [[NSBundle mainBundle] pathForResource:@"encryptedApp" ofType:@"dat"]; [AliPrivateService initKey:encrptyFilePath]; ダウンローダーの作成と構成
次のコードに例を示します。
AliMediaDownloader *downloader = [[AliMediaDownloader alloc] init]; [downloader setSaveDirectory:self.downLoadPath]; [downloader setDelegate:self];イベントリスナーの設定
ダウンローダーは複数のイベントリスナーをサポートしています。次のコードに例を示します。
-(void)onPrepared:(AliMediaDownloader *)downloader mediaInfo:(AVPMediaInfo *)info { // ダウンロード項目が正常に準備されました。 } -(void)onError:(AliMediaDownloader *)downloader errorModel:(AVPErrorModel *)errorModel { // ダウンロード中にエラーが発生しました。 } -(void)onDownloadingProgress:(AliMediaDownloader *)downloader percentage:(int)percent { // ダウンロードの進行状況 (パーセンテージ)。 } -(void)onProcessingProgress:(AliMediaDownloader *)downloader percentage:(int)percent { // 処理の進行状況 (パーセンテージ)。 } -(void)onCompletion:(AliMediaDownloader *)downloader { // ダウンロードが成功しました。 }ダウンロードソースの準備
prepareメソッドを呼び出してダウンロードソースを準備します。VidSts および VidAuth ソースがサポートされています。次のコードに例を示します。VidSts
// VidSts ソースを作成します。 AVPVidStsSource* stsSource = [[AVPVidStsSource alloc] init]; stsSource.region = @"your_region"; // ご利用の ApsaraVideo VOD サービスリージョン。デフォルト値:cn-shanghai。 stsSource.vid = @"your_video_id"; // ビデオ ID。 stsSource.securityToken = @"<yourSecurityToken>"; // STS セキュリティトークン。このトークンを取得するには、STS AssumeRole オペレーションを呼び出します。 stsSource.accessKeySecret = @"<yourAccessKeySecret>"; // 一時的な STS 認証情報の AccessKey Secret。このシークレットを取得するには、STS AssumeRole オペレーションを呼び出します。 stsSource.accessKeyId = @"<yourAccessKeyId>"; // 一時的な STS 認証情報の AccessKey ID。この ID を取得するには、STS AssumeRole オペレーションを呼び出します。 // ApsaraVideo VOD コンソールで HLS 暗号化のパラメーターパススルーを有効にしている場合 // かつ、デフォルトのパラメーター名が MtsHlsUriToken の場合は、config を設定して VidSts ソースに渡す必要があります。 // この機能が有効でない場合は、次のコードをスキップできます。 VidPlayerConfigGenerator* vp = [[VidPlayerConfigGenerator alloc] init]; [vp setHlsUriToken:yourMtsHlsUriToken]; stsSource.playConfig = [vp generatePlayerConfig]; // ダウンロードソースを準備します。 [downloader prepareWithVid:stsSource];VidAuth
// VidAuth ソースを作成します。 AVPVidAuthSource *authSource = [[AVPVidAuthSource alloc] init]; authSource.vid = @"your_video_id"; // ビデオ ID。 authSource.playAuth = @"<yourPlayAuth>"; // 再生認証情報。この認証情報を取得するには、ApsaraVideo VOD GetVideoPlayAuth オペレーションを呼び出します。 authSource.region = @"your_region"; // ApsaraVideo Player SDK V5.5.5.0 以降では非推奨です。プレーヤーがリージョンを自動的に解析するためです。 // 以前のバージョンでは必須です。 // ご利用の ApsaraVideo VOD サービスリージョン。デフォルト値:cn-shanghai。 // ApsaraVideo VOD コンソールで HLS 暗号化のパラメーターパススルーを有効にしている場合 // かつ、デフォルトのパラメーター名が MtsHlsUriToken の場合は、config を設定して VidAuth ソースに渡す必要があります。 // この機能が有効でない場合は、次のコードをスキップできます。 VidPlayerConfigGenerator* vp = [[VidPlayerConfigGenerator alloc] init]; [vp setHlsUriToken:yourMtsHlsUriToken]; authSource.playConfig = [vp generatePlayerConfig]; // ダウンロードソースを準備します。 [downloader prepareWithVid:authSource];
説明ApsaraVideo VOD コンソールで HLS 暗号化のパラメーターパススルーを有効にし、デフォルトのパラメーター名が MtsHlsUriToken の場合は、上記のコードに示すようにダウンロードソースに MtsHlsUriToken の値を設定する必要があります。詳細については、「HLS 暗号化のパラメーターパススルー」をご参照ください。
ソース準備後のビデオトラックの選択
ダウンロードソースの準備が完了すると、
onPreparedメソッドが呼び出されます。コールバックのmediaInfoパラメーターには、ビデオ品質など、利用可能な各ビデオトラックに関する情報が含まれています。ダウンロードするトラックを選択します。次のコードに例を示します。-(void)onPrepared:(AliMediaDownloader *)downloader mediaInfo:(AVPMediaInfo *)info { NSArray<AVPTrackInfo*>* tracks = info.tracks; // 例えば、最初のトラックをダウンロードする場合: [downloader selectTrack:[tracks objectAtIndex:0].trackIndex]; }ダウンロードソースの更新とダウンロードの開始
VidSts および VidAuth 認証情報の有効期限切れを防ぐため、ダウンロードを開始する前にソース情報を更新することを推奨します。次のコードに例を示します。
// ダウンロードソースを更新します。 [downloader updateWithVid:vidSource] // ダウンロードを開始します。 [downloader start];ダウンロード完了後または失敗後のダウンローダーの解放
destroyメソッドを呼び出してダウンローダーを解放します。[self.downloader destroy]; self.downloader = nil;
ダウンロードした動画の再生
ダウンロードされた動画は、ApsaraVideo Player SDK を使用してのみ再生できます。ダウンロードした動画を再生するには、次の手順を実行します。
-
ダウンロードした動画ファイルの絶対パスを取得します。
説明ダウンロードした動画ファイルの絶対パスは、次のように生成することを推奨します。
downloadedFilePathからカスタムストレージパスとファイル名を取得し、サンドボックスディレクトリを取得してから、それらを連結します。NSString *downloadedFilePath = downloader.downloadedFilePath; -
UrlSource を使用して、再生用の絶対パスを設定します。
AVPUrlSource *urlSource = [[AVPUrlSource alloc] urlWithString:downloadedFilePath]; [self.player setUrlSource:urlSource];
VidAuth 方式を使用してダウンロードされた動画には、ダウンロード時に選択した画質のビデオストリームが 1 つだけ含まれます。動画がダウンロードされた後、別の画質に切り替えることはできません。別の画質の動画が必要な場合は、対応するバージョンを再度ダウンロードする必要があります。