ApsaraVideo Player SDK はセキュアダウンロード機能を提供します。このモードでローカルデバイスにダウンロードされたビデオは暗号化されます。暗号化されたビデオは、指定したアプリから生成されたキーファイルを使用してのみ再生できます。セキュアダウンロードは、ビデオを不正な再生や配布から保護します。このトピックでは、ApsaraVideo Player SDK for Android および iOS を使用してビデオをセキュアにダウンロードする方法について説明します。
このトピックのすべての機能関連のコードと実装の詳細については、API-Example デモプロジェクトをご参照いただき、ベストプラクティスに基づいてコードを調整することを推奨します。
具体的な実装については、このトピックで説明されているソリューションを使用し、対応する API-Example-Android および API-Example-iOS の ビデオのダウンロードとオフライン再生 モジュールのソースコードをご参照ください。
概要
ApsaraVideo VOD は、モバイルデバイスへのビデオダウンロードとオフライン再生をサポートしています。通常ダウンロードとセキュアダウンロードの 2 つのモードがサポートされています。以下に、2 つのモードの違いを説明します。
セキュアダウンロード (推奨):このモードでダウンロードされたビデオは Alibaba Cloud によって暗号化されます。再生する前にキーファイルを使用してビデオを復号化する必要があります。ビデオは ApsaraVideo Player を使用してのみ再生できます。
通常ダウンロード:このモードでダウンロードされたビデオは Alibaba Cloud によって暗号化されず、任意のプレーヤーでコピーして再生できます。通常ダウンロードモードを使用する際はご注意ください。
セキュアダウンロードは、ダウンロードしたビデオが暗号化されることを保証します。暗号化されたビデオは、ApsaraVideo VOD コンソールでキーファイルを生成する際に指定したアプリを使用してのみ再生できます。通常ダウンロードモードと比較して、セキュアダウンロードモードは信頼性が高く、ダウンロードされたビデオの著作権保護に適しています。ほとんどの場合、セキュアダウンロードモードを使用することを推奨します。
制限事項
セキュアダウンロード機能を使用するには、ApsaraVideo Player SDK を統合する必要があります。
ApsaraVideo Player SDK は、VidSts と VidAuth に基づくセキュアダウンロードのみをサポートしています。
セキュアダウンロードモードを使用してダウンロードされたビデオは、ローカルデバイス上で暗号化され、指定したアプリの ApsaraVideo Player SDK で再生 URL に基づいてのみ再生できます。
前提条件
ApsaraVideo VOD コンソールでダウンロード機能が有効になっており、ダウンロード方法 が 暗号化 に設定されています。詳細については、「セキュアダウンロードを有効にする」をご参照ください。
ApsaraVideo Player SDK が統合されていること。詳細については、「ApsaraVideo Player for Android のクイック統合」または「ApsaraVideo Player for iOS のクイック統合」をご参照ください。
ビデオが Alibaba Cloud 専用の暗号化 または HLS 暗号化 を使用して暗号化されていること。
Android の主要な実装
セキュアダウンロードの設定
暗号化検証ファイルを設定して、セキュアダウンロードを有効にします。
ApsaraVideo VOD コンソールで生成されたキーファイルを ApsaraVideo Player SDK に設定します。このキーファイルは、ダウンロードおよび再生するビデオの暗号化と復号化に使用されます。キーファイルの生成方法の詳細については、「セキュアダウンロード」をご参照ください。
説明キーファイルの情報が、指定したアプリ情報と一致していることを確認してください。一致しない場合、ビデオのダウンロードは失敗します。
この設定は Application で一度だけ行うことを推奨します。以下に例を示します。
PrivateService.initService(getApplicationContext(), "encryptedApp.dat があるファイルパス"); // encryptedApp.dat ファイルを携帯電話に保存し、ここに暗号化ファイルのローカルファイルパスを設定することを推奨しますダウンローダーを作成して設定します。
AliDownloaderFactory を使用してダウンローダーを作成できます。以下にコード例を示します。
AliMediaDownloader mAliDownloader = null; ...... // ダウンローダーを作成します mAliDownloader = AliDownloaderFactory.create(getApplicationContext()); // ダウンロードの保存パスを設定します mAliDownloader.setSaveDir("保存フォルダのアドレス");リスナーを設定します。
ダウンローダーは複数のイベントリスナーを提供します。以下にコード例を示します。
ダウンロードソースを準備します。
prepareメソッドを使用してダウンロードソースを準備できます。ダウンロードソースは VidSts と VidAuth の両方のメソッドをサポートしています。以下にコード例を示します。VidSts
// VidSts オブジェクトを作成します。 VidSts aliyunVidSts = new VidSts(); aliyunVidSts.setVid("your_video_id"); // ビデオ ID。 aliyunVidSts.setAccessKeyId("<yourAccessKeyId>"); // 一時的な STS トークンの AccessKey ID。トークンを取得するには、STS の AssumeRole 操作を呼び出す必要があります。 aliyunVidSts.setAccessKeySecret("<yourAccessKeySecret>"); // 一時的な STS トークンの AccessKey Secret。トークンを取得するには、STS の AssumeRole 操作を呼び出す必要があります。 aliyunVidSts.setSecurityToken("<yourSecurityToken>"); // セキュリティトークン。トークンを取得するには、STS の AssumeRole 操作を呼び出す必要があります。 aliyunVidSts.setRegion("your_region_id"); // VOD が有効化されているリージョンの ID。デフォルト値:cn-shanghai。 // VOD コンソールでパラメーターパススルー付きの HLS 暗号化を有効にし、デフォルトのパラメーター名が MtsHlsUriToken の場合、config パラメーターを設定して VidSts オブジェクトに渡す必要があります。詳細については、次のコードをご参照ください。 // VOD コンソールでパラメーターパススルー付きの HLS 暗号化を有効にしていない場合は、次のコードを統合する必要はありません。 VidPlayerConfigGen vidConfig = new VidPlayerConfigGen(); vidConfig.setMtsHlsUriToken("<yourMtsHlsUriToken>"); aliyunVidSts.setPlayerConfig(vidConfig); // ダウンロードソースを準備します。 mAliDownloader.prepare(aliyunVidSts);VidAuth
// VidAuth オブジェクトを作成します。 VidAuth vidAuth = new VidAuth(); vidAuth.setVid("Your Video ID");// ビデオ ID (VideoId)。 vidAuth.setPlayAuth("<yourPlayAuth>");// 再生認証情報。VOD サービスの GetVideoPlayAuth 操作を呼び出して認証情報を生成する必要があります。 vidAuth.setRegion("The region");// プレーヤー SDK V5.5.5.0 以降では、このパラメーターは非推奨です。プレーヤーが自動的にリージョンを解析するため、リージョンを設定する必要はありません。V5.5.5.0 より前のプレーヤー SDK では、このパラメーターは必須です。VOD サービスが有効化されているリージョンを指定します。デフォルト値は cn-shanghai です。 // VOD コンソールで HLS 暗号化パラメーターのパススルーを有効にし、デフォルトのパラメーター名が MtsHlsUriToken の場合、config を設定して VidAuth オブジェクトに渡す必要があります。詳細については、次のコードをご参照ください。 VidPlayerConfigGen vidConfig = new VidPlayerConfigGen(); vidConfig.setMtsHlsUriToken("<yourMtsHlsUriToken>"); vidAuth.setPlayerConfig(vidConfig); // ダウンロードソースを準備します。 mAliDownloader.prepare(vidAuth);
説明ソースファイルの形式と出力されるダウンロードファイルの形式は同じであり、変更することはできません。
VOD コンソールで HLS 標準暗号化パラメーターのパススルーを有効にし、デフォルトのパラメーター名が MtsHlsUriToken の場合 (詳細については、「HLS 標準暗号化パラメーターのパススルー」をご参照ください)、上記のコードに示すように、VOD ソースに MtsHlsUriToken の値を設定する必要があります。
準備が成功したら、ダウンロード項目を選択してダウンロードを開始します。
準備が成功すると、
OnPreparedListenerメソッドが呼び出されます。返される TrackInfo オブジェクトには、各ビデオストリームの解像度などの情報が含まれています。ダウンロードするトラックを選択できます。以下にコード例を示します。public void onPrepared(MediaInfo mediaInfo) { // ダウンロード項目の準備が成功しました List<TrackInfo> trackInfos = mediaInfo.getTrackInfos(); // 例えば、最初の TrackInfo をダウンロードします mAliDownloader.selectItem(trackInfos.get(0).getIndex()); // ダウンロードを開始します mAliDownloader.start(); }(任意) ダウンロードソースを更新します。
VidSts と VidAuth の有効期限が切れるのを防ぐために、ダウンロードを開始する前にダウンロードソース情報を更新することもできます。以下にコード例を示します。
// ダウンロードソースを更新します mAliDownloader.updateSource(VidSts); // ダウンロードを開始します mAliDownloader.start();ダウンロードが成功または失敗した後、ダウンローダーを解放します。
ダウンロードが完了したら、
onCompletionまたはonErrorコールバックでreleaseを呼び出してダウンローダーを解放できます。以下にコード例を示します。mAliDownloader.stop(); mAliDownloader.release();任意: ダウンロードしたファイルを削除します。
ダウンロード中またはダウンロード後に、ダウンロードしたファイルを削除できます。以下にコード例を示します。
// オブジェクトを介してファイルを削除します mAliDownloader.deleteFile(); // 静的メソッドで削除します。成功した場合、0 を返します AliDownloaderFactory.deleteFile("削除するダウンロードフォルダのパス", "ビデオ ID", "ビデオ形式", "ダウンロードしたビデオのインデックス");
ダウンロードしたビデオの再生
ダウンロードされたビデオは、ApsaraVideo Player SDK の再生 URL に基づいてのみ再生できます。ダウンロードしたビデオを再生するには、次の手順を実行します。
ダウンロードが完了したら、ビデオファイルの絶対パスを取得します。
String path = mAliDownloader.getFilePath();UrlSource メソッドを使用して再生用の絶対パスを設定します。
UrlSource urlSource = new UrlSource(); urlSource.setUri("再生 URL");// ダウンロードしたビデオの絶対パスを設定します aliPlayer.setDataSource(urlSource);
iOS の主要な実装
セキュアダウンロードの設定
暗号化検証ファイルを設定して、セキュアダウンロードを有効にします。
ApsaraVideo VOD コンソールで生成されたキーファイルを ApsaraVideo Player SDK に設定します。このキーファイルは、ダウンロードおよび再生するビデオの暗号化と復号化に使用されます。キーファイルの生成方法の詳細については、「セキュアダウンロード」をご参照ください。
説明キーファイルの情報が、指定したアプリ情報と一致していることを確認してください。一致しない場合、ビデオのダウンロードは失敗します。
この設定はアプリケーションごとに一度だけ行うことを推奨します。以下に例を示します。
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 = @"アクセスリージョン"; // ApsaraVideo VOD のアクセスリージョン。デフォルトは cn-shanghai です。 stsSource.vid = @"Vid 情報"; // ビデオ ID。 stsSource.securityToken = @"<yourSecurityToken>"; // STS トークン。STS の AssumeRole API 操作を呼び出して生成する必要があります。 stsSource.accessKeySecret = @"<yourAccessKeySecret>"; // 一時的な STS AccessKey ペアの AccessKey Secret。STS の AssumeRole API 操作を呼び出して生成する必要があります。 stsSource.accessKeyId = @"<yourAccessKeyId>"; // 一時的な STS AccessKey ペアの AccessKey ID。STS の AssumeRole API 操作を呼び出して生成する必要があります。 // VOD コンソールで HLS 標準暗号化パラメーターのパススルーを有効にし、デフォルトのパラメーター名が MtsHlsUriToken の場合、config を設定して vid に渡す必要があります。以下に示します。 // VOD コンソールで HLS 標準暗号化パラメーターのパススルーを有効にしていない場合は、次のコードを統合する必要はありません。 VidPlayerConfigGenerator* vp = [[VidPlayerConfigGenerator alloc] init]; [vp setHlsUriToken:yourMtsHlsUriToken]; stsSource.playConfig = [vp generatePlayerConfig]; // ダウンロードソースを準備します。 [downloader prepareWithVid:stsSource];VidAuth
// VidAuth を作成します。 AVPVidAuthSource *authSource = [[AVPVidAuthSource alloc] init]; authSource.vid = @"Vid 情報"; // ビデオ ID。 authSource.playAuth = @"<yourPlayAuth>"; // 再生認証情報。ApsaraVideo VOD の GetVideoPlayAuth API 操作を呼び出して生成する必要があります。 authSource.region = @"アクセスリージョン"; // プレーヤー SDK V5.5.5.0 以降では、このパラメーターは非推奨です。プレーヤーが自動的にリージョンを解析するため、リージョンを設定する必要はありません。V5.5.5.0 より前のプレーヤー SDK では、このパラメーターは必須です。ApsaraVideo VOD のアクセスリージョンを指定します。デフォルトは cn-shanghai です。 // VOD コンソールで HLS 標準暗号化パラメーターのパススルーを有効にし、デフォルトのパラメーター名が MtsHlsUriToken の場合、config を設定して vid に渡す必要があります。以下に示します。 // VOD コンソールで HLS 標準暗号化パラメーターのパススルーを有効にしていない場合は、次のコードを統合する必要はありません。 VidPlayerConfigGenerator* vp = [[VidPlayerConfigGenerator alloc] init]; [vp setHlsUriToken:yourMtsHlsUriToken]; authSource.playConfig = [vp generatePlayerConfig]; // ダウンロードソースを準備します。 [downloader prepareWithVid:authSource];
説明VOD コンソールで HLS 標準暗号化パラメーターパススルーを有効にし、デフォルトのパラメーター名が `MtsHIsUriToken` の場合 (詳細については、「HLS 標準暗号化パラメーターパススルー」をご参照ください。)、上記のコードに示すように `MtsHIsUriToken` の値を VOD ソースに設定してください。
準備が成功したら、ダウンロード項目を選択します。
準備が成功すると、
onPreparedメソッドがコールバックされます。返される `TrackInfo` には、各ビデオストリームの解像度などの情報が含まれています。ダウンロードするトラックを選択できます。以下にコード例を示します。-(void)onPrepared:(AliMediaDownloader *)downloader mediaInfo:(AVPMediaInfo *)info { NSArray<AVPTrackInfo*>* tracks = info.tracks; // 例えば、最初の TrackInfo をダウンロードします。 [downloader selectTrack:[tracks objectAtIndex:0].trackIndex]; }ダウンロードソースを更新し、ダウンロードを開始します。
VidSts と VidAuth の有効期限が切れるのを防ぐために、ダウンロードを開始する前にダウンロードソース情報を更新することを推奨します。以下にコード例を示します。
// ダウンロードソースを更新します。 [downloader updateWithVid:vidSource] // ダウンロードを開始します。 [downloader start];ダウンロードが成功または失敗した後、ダウンローダーを解放します。
ダウンロードが成功したら、
destroyを呼び出してダウンローダーを解放できます。[self.downloader destroy]; self.downloader = nil;
ダウンロードしたビデオの再生
ダウンロードされたビデオは、ApsaraVideo Player SDK の再生 URL に基づいてのみ再生できます。ダウンロードしたビデオを再生するには、次の手順を実行します。
ダウンロードしたビデオファイルの絶対パスを取得します。
説明ダウンロードしたビデオファイルの絶対パスは、次の手順で生成することを推奨します。
downloadedFilePathからカスタムストレージパスとファイル名を取得し、サンドボックスディレクトリを取得してから、カスタムストレージパス、ファイル名、サンドボックスディレクトリを連結します。NSString *downloadedFilePath = downloader.downloadedFilePath;VOD UrlSource を使用して、再生用の絶対パスを設定できます。
AVPUrlSource *urlSource = [[AVPUrlSource alloc] urlWithString:downloadedFilePath]; [self.player setUrlSource:urlSource];