すべてのプロダクト
Search
ドキュメントセンター

ApsaraVideo VOD:セキュアダウンロード

最終更新日:Aug 06, 2026

ApsaraVideo Player SDK のセキュアダウンロード機能は、ローカルデバイスにダウンロードされた動画を暗号化します。暗号化された動画は、指定したアプリから生成されたキーファイルを使用してのみ再生でき、悪意のある再生や配布を防止します。

重要

本トピックで説明する機能に関連するすべてのコードと実装の詳細については、API-Example デモプロジェクトを参照し、ベストプラクティスに基づいてコードを調整することを推奨します

具体的な実装については、API-Example-Android および API-Example-iOSVideo 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 でのみ再生できます。

前提条件

Androidの主要な実装

セキュアダウンロードの設定

  1. 暗号化検証ファイルを設定して、セキュアダウンロードを有効にします。

    ApsaraVideo VOD コンソールで生成されたキーファイルを ApsaraVideo Player SDK に設定します。キーファイルは、動画のダウンロード時の暗号化と再生時の復号化に使用されます。キーファイルの生成方法の詳細については、「セキュアダウンロード」をご参照ください。

    説明

    キーファイル内の情報が、指定したアプリの情報と一致していることを確認してください。一致しない場合、動画のダウンロードは失敗します。

    この設定は Application で 1 回のみ行うことを推奨します。次に例を示します。

    PrivateService.initService(getApplicationContext(), "Path to encryptedApp.dat file"); // encryptedApp.dat 検証ファイルをスマートフォンに保存し、ここにローカルファイルパスを設定することを推奨します。
  2. ダウンローダーを作成して設定する。

    AliDownloaderFactory を使用してダウンローダーを作成します。例:

    AliMediaDownloader mAliDownloader = null;
    ......
    // ダウンローダーを作成します。
    mAliDownloader = AliDownloaderFactory.create(getApplicationContext());
    // ダウンロードの保存パスを設定します。
    mAliDownloader.setSaveDir("Save folder path");
  3. イベントリスナーを設定します。

    ダウンローダーは複数のイベントリスナーを提供します。例:

    展開してコードを表示

    mAliDownloader.setOnPreparedListener(new AliMediaDownloader.OnPreparedListener() {
       @Override
       public void onPrepared(MediaInfo mediaInfo) {
           // ダウンロード項目の準備に成功しました。
       }
    });
    mAliDownloader.setOnProgressListener(new AliMediaDownloader.OnProgressListener() {
       @Override
       public void onDownloadingProgress(int percent) {
           // ダウンロード進捗率。
       }
       @Override
       public void onProcessingProgress(int percent) {
           // 処理の進捗率。
       }
    });
    mAliDownloader.setOnErrorListener(new AliMediaDownloader.OnErrorListener() {
       @Override
       public void onError(ErrorInfo errorInfo) {
           // ダウンロードエラー。
       }
    });
    mAliDownloader.setOnCompletionListener(new AliMediaDownloader.OnCompletionListener() {
       @Override
       public void onCompletion() {
           // ダウンロードに成功しました。
       }
    });
  4. ダウンロードソースを準備します。

    ダウンロードソースを 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 の値を設定してください。

  5. 準備が完了したら、ダウンロード項目を選択してダウンロードを開始します。

    準備が正常に完了すると、OnPreparedListener メソッドが呼び出されます。返された TrackInfo には、ビデオストリームの解像度などの情報が含まれています。ダウンロード用に Track を 1 つ選択します。例:

    public void onPrepared(MediaInfo mediaInfo) {
        // ダウンロード項目の準備に成功しました。
        List<TrackInfo> trackInfos = mediaInfo.getTrackInfos();
        // 例:最初の TrackInfo をダウンロードします。
        mAliDownloader.selectItem(trackInfos.get(0).getIndex());
        // ダウンロードを開始します。
        mAliDownloader.start();
    }
  6. (任意) ダウンロードソースの更新

    VidSts と VidAuth の有効期限切れを防ぐために、ダウンロードソース情報を更新してダウンロードを開始できます。例:

    // ダウンロードソースを更新します。
    mAliDownloader.updateSource(aliyunVidSts);
    // ダウンロードを開始します。
    mAliDownloader.start();
  7. ダウンロードの成否にかかわらず、ダウンローダーを解放します。

    ダウンロードが成功したら、release メソッドを onCompletion または onError コールバックで呼び出してダウンローダーを解放します。例:

    mAliDownloader.release();
  8. 任意: ダウンロードしたファイルを削除します。

    ダウンロード中またはダウンロード後に、ダウンロードしたファイルを削除できます。例:

    // オブジェクトを介してファイルを削除します。
    mAliDownloader.deleteFile();
    // 静的メソッドで削除します。成功した場合は 0 を返します。
    AliDownloaderFactory.deleteFile("ダウンロードフォルダーへのパス", "動画 ID", "動画フォーマット", "ダウンロードされた動画のインデックス");

ダウンロードした動画の再生

ダウンロードされた動画は、ApsaraVideo Player SDK を使用してのみ再生できます。ダウンロードした動画を再生するには、次の手順を実行します。

  1. ダウンロード完了後、ビデオファイルの絶対パスを取得します。

    String path = mAliDownloader.getFilePath();
  2. VOD UrlSource を使用して、再生用の絶対パスを設定します。

     UrlSource urlSource = new UrlSource();
            urlSource.setUri("Playback address");// ダウンロードした動画の絶対パスを設定します。
            aliPlayer.setDataSource(urlSource);

VidAuth 方式を使用してダウンロードされた動画には、ダウンロード時に選択した画質のビデオストリームが 1 つだけ含まれます。動画がダウンロードされた後、別の画質に切り替えることはできません。別の画質の動画が必要な場合は、対応するバージョンを再度ダウンロードする必要があります。

iOSの主要な実装

セキュアダウンロードの設定

  1. 暗号化検証ファイルを設定して、セキュアダウンロードを有効にします。

    ApsaraVideo VOD コンソールで生成されたキーファイルを ApsaraVideo Player SDK に設定します。キーファイルは、動画のダウンロード時の暗号化と再生時の復号化に使用されます。キーファイルの生成方法の詳細については、「セキュアダウンロード」をご参照ください。

    説明

    キーファイル内の情報が、指定したアプリの情報と一致していることを確認してください。一致しない場合、動画のダウンロードは失敗します。

    この設定はアプリケーションごとに 1 回のみ行うことを推奨します。次に例を示します。

    NSString *encrptyFilePath = [[NSBundle mainBundle] pathForResource:@"encryptedApp" ofType:@"dat"];
    [AliPrivateService initKey:encrptyFilePath];
  2. ダウンローダーの作成と構成

    次のコードに例を示します。

    AliMediaDownloader *downloader = [[AliMediaDownloader alloc] init];
    [downloader setSaveDirectory:self.downLoadPath];
    [downloader setDelegate:self];
  3. イベントリスナーの設定

    ダウンローダーは複数のイベントリスナーをサポートしています。次のコードに例を示します。

    -(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 {
        // ダウンロードが成功しました。
    }
  4. ダウンロードソースの準備

    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 暗号化のパラメーターパススルー」をご参照ください。

  5. ソース準備後のビデオトラックの選択

    ダウンロードソースの準備が完了すると、onPrepared メソッドが呼び出されます。コールバックの mediaInfo パラメーターには、ビデオ品質など、利用可能な各ビデオトラックに関する情報が含まれています。ダウンロードするトラックを選択します。次のコードに例を示します。

    -(void)onPrepared:(AliMediaDownloader *)downloader mediaInfo:(AVPMediaInfo *)info {
        NSArray<AVPTrackInfo*>* tracks = info.tracks;
        // 例えば、最初のトラックをダウンロードする場合:
        [downloader selectTrack:[tracks objectAtIndex:0].trackIndex];
    }
  6. ダウンロードソースの更新とダウンロードの開始

    VidSts および VidAuth 認証情報の有効期限切れを防ぐため、ダウンロードを開始する前にソース情報を更新することを推奨します。次のコードに例を示します。

    // ダウンロードソースを更新します。
    [downloader updateWithVid:vidSource]
    // ダウンロードを開始します。
    [downloader start];
  7. ダウンロード完了後または失敗後のダウンローダーの解放

    destroy メソッドを呼び出してダウンローダーを解放します。

    [self.downloader destroy];
    self.downloader = nil;

ダウンロードした動画の再生

ダウンロードされた動画は、ApsaraVideo Player SDK を使用してのみ再生できます。ダウンロードした動画を再生するには、次の手順を実行します。

  1. ダウンロードした動画ファイルの絶対パスを取得します。

    説明

    ダウンロードした動画ファイルの絶対パスは、次のように生成することを推奨します。downloadedFilePathからカスタムストレージパスとファイル名を取得し、サンドボックスディレクトリを取得してから、それらを連結します。

    NSString *downloadedFilePath = downloader.downloadedFilePath;
  2. UrlSource を使用して、再生用の絶対パスを設定します。

    AVPUrlSource *urlSource = [[AVPUrlSource alloc] 
    urlWithString:downloadedFilePath];
    [self.player setUrlSource:urlSource];

VidAuth 方式を使用してダウンロードされた動画には、ダウンロード時に選択した画質のビデオストリームが 1 つだけ含まれます。動画がダウンロードされた後、別の画質に切り替えることはできません。別の画質の動画が必要な場合は、対応するバージョンを再度ダウンロードする必要があります。