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

ApsaraVideo VOD:ファイルのアップロード

最終更新日:Oct 29, 2024

メディアファイルをApsaraVideo VODにアップロードできます。 メディアファイルは、ローカルファイルまたはオンラインファイルとすることができます。 iOSデバイスでは、アップロードインスタンスVODUploadClientを使用してファイルをアップロードします。 このトピックでは、iOS用アップロードSDKを使用してファイルをアップロードする方法について説明します。

前提条件

iOS用のアップロードSDKが統合されています。 詳細については、「iOS用アップロードSDKの統合」をご参照ください。

プロセスのアップロード

クライアントアップロードSDKは、ファイルをOSSバケットにアップロードするロジックをカプセル化します。 クライアントからメディア・ファイルをアップロードすると、サーバーで転送することなく、ApsaraVideo VODによって割り当てられたOSSバケットにファイルが直接アップロードされます。 したがって、クライアントを認証する必要があります。 アップロードURLと資格情報を取得するには、アプリケーションサーバーに認証サービスを展開する必要があります。 クライアントのアップロードSDKは、アップロード資格情報に基づく承認とSTSトークンに基づく承認をサポートしています。 アップロード資格情報の使用を推奨します。 詳細については、「資格情報とSTSの比較」をご参照ください。

アップロードURLとアップロード資格情報を使用してメディアファイルをアップロードするプロセス

次の図は、アップロードURLとアップロード資格情報を使用してメディアファイルをアップロードする完全なプロセスを示しています。 この例では、ApsaraVideo VOD SDKを統合してアップロードURLと認証情報を取得します。客户端SDK上传凭证上传流程

  1. ユーザーは、ApsaraVideo VOD SDKなどのアプリケーションサーバーに認証サービスをデプロイして、アップロードURLと資格情報を取得します。

  2. クライアントは、アップロードURLとアップロード資格情報を要求する要求をアプリケーションサーバーに送信します。

  3. アプリケーションサーバーがApsaraVideo VODにリクエストを送信し、アップロードURLと資格情報をリクエストします。

  4. ApsaraVideo VODはアップロードURLと資格情報を返します。

    説明

    ApsaraVideo VODはメディアIDも生成し、メディアのライフサイクル管理とメディア処理で使用できます。

    • ビデオの場合、メディアIDはVideoIdパラメーターで返されます。

    • 画像の場合、メディアIDはImageIdパラメーターで返されます。

    • 補助メディアアセットの場合、メディアIDはMediaIdパラメーターで返されます。

    • 返されたメディアIDは、メディアアセット管理、オーディオおよびビデオの再生、メディア処理などの後続のタスクで必要となるものを適切に保持します。

  5. アプリケーションサーバーは、アップロードURLと資格情報をクライアントに返します。

    説明

    アプリケーションサーバーは、アップロードURLまたは資格情報に対してBase64デコードを実行する必要はありません。

  6. クライアントは、アップロードURLと資格情報を使用して、アップロードインスタンスを初期化します。

  7. クライアントはアップロードパラメータを構築してアップロード要求を送信する。

  8. OSSはアップロード結果を返します。

    説明

    事前にコールバックを設定して、アップロードイベントに関する通知を受け取ることもできます。

STSトークンを使用してメディアファイルをアップロードするプロセス

STSトークンに基づく権限付与を使用する場合は、RAMロールを作成し、ApsaraVideo VODにアクセスするための権限をRAMロールに付与する必要があります。 詳細については、「STSを使用した動画のアップロード」をご参照ください。

次の図は、STSトークンを使用してメディアファイルをアップロードする完全なプロセスを示しています。客户端STS方式上传流程

  1. ユーザーは、ApsaraVideo VOD SDKなどのアプリケーションサーバーに認証サービスをデプロイして、一時的なSTSトークンを取得します。

  2. クライアントは、STSトークンを要求する要求をアプリケーションサーバーに送信します。

  3. アプリケーションサーバーは、STSトークンを要求する要求をSTSに送信します。

  4. STSはトークンを返します。

  5. アプリケーションサーバーはSTSトークンをクライアントに返します。

  6. クライアントはSTSトークンを使用してアップロードインスタンスを初期化します。

  7. クライアントはアップロードパラメータを構築してアップロード要求を送信します。

  8. OSSはアップロード結果を返します。

    説明

    事前にコールバックを設定して、アップロードイベントに関する通知を受け取ることもできます。

ファイルのアップロード

iOSでファイルをアップロードするには、次の手順を実行します。

  1. アップロードURLとアップロード資格情報、またはアップロード認証用のSecurity Token Service (STS) トークンを取得します。

    iOS用アップロードSDKには2つの権限付与方法が用意されています。 承認にはアップロード資格情報を使用することを推奨します。

    結果

    取得したアップロードURLと資格情報、または取得したSTSトークンを使用して、アップロードインスタンスを初期化します。

  2. アップロードURLと資格情報またはSTSトークンを使用して、アップロードインスタンスを初期化します。

    アップロードインスタンスを初期化する前に、初期化コールバックを設定する必要があります。

    1. VODUploadClientインスタンスを宣言します。ローカル変数にすることはできません。

    2. アップロードインスタンスを初期化します。 アップロードURLと資格情報、またはSTSトークンを使用して、ビジネス要件に基づいてアップロードインスタンスを初期化します。

      • (推奨) アップロードURLと資格情報を使用してアップロードインスタンスを初期化する

        説明
        • アップロードURLと資格情報を使用する場合は、initメソッドを呼び出してアップロードインスタンスを初期化します。

        • 初期化時に取得したアップロードURLと資格情報を指定する必要はありません。 代わりに、アップロードの開始時に起動されるOnUploadStartedListenerコールバックでsetUploadAuthAndAddress: uploadAuth:uploadAddress: メソッドを呼び出してSDKで指定します。

        • アップロード資格情報の有効期限が切れると、OnUploadTokenExpiredListenerコールバックが発生します。 新しいアップロード資格情報を使用してアップロードを再開するには、resumeWithAuthメソッドを呼び出します。

        表示コード

        // Create a VODUploadClient object.
        self.uploader = [VODUploadClient new];
        //weakself
        __weak typeof(self) weakSelf = self;
        //setup callback
        OnUploadFinishedListener FinishCallbackFunc = ^(UploadFileInfo* fileInfo, VodUploadResult* result){
            NSLog(@"upload finished callback videoid:%@, imageurl:%@", result.videoId, result.imageUrl);
        };
        OnUploadFailedListener FailedCallbackFunc = ^(UploadFileInfo* fileInfo, NSString *code, NSString* message){
            NSLog(@"upload failed callback code = %@, error message = %@", code, message);
        };
        OnUploadProgressListener ProgressCallbackFunc = ^(UploadFileInfo* fileInfo, long uploadedSize, long totalSize) {
            NSLog(@"upload progress callback uploadedSize : %li, totalSize : %li", uploadedSize, totalSize);
        };
        OnUploadTokenExpiredListener TokenExpiredCallbackFunc = ^{
            NSLog(@"upload token expired callback.");
            // Specify a new upload credential to resume the upload upon credential expiration.
            [weakSelf.uploader resumeWithAuth:`new upload auth`];
        };
        OnUploadRertyListener RetryCallbackFunc = ^{
            NSLog(@"upload retry begin callback.");
        };
        OnUploadRertyResumeListener RetryResumeCallbackFunc = ^{
            NSLog(@"upload retry end callback.");
        };
        OnUploadStartedListener UploadStartedCallbackFunc = ^(UploadFileInfo* fileInfo) {
            NSLog(@"upload upload started callback.");
            // Specify the upload URL and credential.
            [weakSelf.uploader setUploadAuthAndAddress:fileInfo uploadAuth:`upload auth` uploadAddress:`upload address`];
        };
        VODUploadListener *listener = [[VODUploadListener alloc] init];
        listener.finish = FinishCallbackFunc;
        listener.failure = FailedCallbackFunc;
        listener.progress = ProgressCallbackFunc;
        listener.expire = TokenExpiredCallbackFunc;
        listener.retry = RetryCallbackFunc;
        listener.retryResume = RetryResumeCallbackFunc;
        listener.started = UploadStartedCallbackFunc;
        //init with upload address and upload auth
        [self.uploader init:listener];
      • STSトークンを使用してアップロードインスタンスを初期化する

        説明
        • STSトークンを使用する場合は、initメソッドを呼び出してアップロードインスタンスを初期化し、setKeyId:accessKeySecret:secretToken:expireTime:listener: メソッドを呼び出してSTSトークンを指定します。

        • STSトークンの有効期限が切れると、OnUploadTokenExpiredListenerコールバックが発生します。 新しいSTSトークンを使用してアップロードを再開するには、resumeWithToken: accessKeySecret: secretToken: expireTimeメソッドを呼び出します。

        表示コード

        // Create a VODUploadClient object.
        self.uploader = [VODUploadClient new];
        //weakself
        __weak typeof(self) weakSelf = self;
        //setup callback
        OnUploadFinishedListener FinishCallbackFunc = ^(UploadFileInfo* fileInfo,  VodUploadResult* result){
            NSLog(@"upload finished callback videoid:%@, imageurl:%@", result.videoId, result.imageUrl);
        };
        OnUploadFailedListener FailedCallbackFunc = ^(UploadFileInfo* fileInfo, NSString *code, NSString* message){
            NSLog(@"upload failed callback code = %@, error message = %@", code, message);
        };
        OnUploadProgressListener ProgressCallbackFunc = ^(UploadFileInfo* fileInfo, long uploadedSize, long totalSize) {
            NSLog(@"upload progress callback uploadedSize : %li, totalSize : %li", uploadedSize, totalSize);
        };
        OnUploadTokenExpiredListener TokenExpiredCallbackFunc = ^{
            NSLog(@"upload token expired callback.");
            // Specify a new STS token to resume the upload upon token expiration.
            [weakSelf.uploader resumeWithToken:`STS Key Id` accessKeySecret:`STS Key Secret` secretToken:`STS Secret Token` expireTime:`STS Expire Time`];
        };
        OnUploadRertyListener RetryCallbackFunc = ^{
            NSLog(@"upload retry begin callback.");
        };
        OnUploadRertyResumeListener RetryResumeCallbackFunc = ^{
            NSLog(@"upload retry end callback.");
        };
        OnUploadStartedListener UploadStartedCallbackFunc = ^(UploadFileInfo* fileInfo) {
            NSLog(@"upload upload started callback.");
        };
        //init
        VODUploadListener *listener = [[VODUploadListener alloc] init];
        listener.finish = FinishCallbackFunc;
        listener.failure = FailedCallbackFunc;
        listener.progress = ProgressCallbackFunc;
        listener.expire = TokenExpiredCallbackFunc;
        listener.retry = RetryCallbackFunc;
        listener.retryResume = RetryResumeCallbackFunc;
        listener.started = UploadStartedCallbackFunc;
        //set STS and listener
        [self.uploader setKeyId:`STS Key Id` accessKeySecret:`STS Key Secret` secretToken:STS Secret Token` expireTime:`STS Expire Time` listener:listener];
  3. アップロード中にキーメッセージを受信するようにコールバックを設定します。

    アップロードステータスのコールバックのクラスに属するVODUploadListenerオブジェクトを設定します。 次のコールバックを設定する必要があります。

    表示コード

    /**
     The callback that is fired when the upload succeeds.
     @param fileInfo The information about the file that you upload.
     @param result The upload result.
     */
    typedef void (^OnUploadFinishedListener) (UploadFileInfo* fileInfo, VodUploadResult* result);
    /**
     The callback that is fired when the upload fails.
     @param fileInfo The information about the file that you upload.
     @param code The error code.
     @param message The error message.
     */
    typedef void (^OnUploadFailedListener) (UploadFileInfo* fileInfo, NSString *code, NSString * message);
    /**
     The callback that is fired when the default or custom upload progress is reached.
     @param fileInfo The information about the file that you upload.
     @param uploadedSize The size of uploaded parts.
     @param totalSize The total size of the file that you upload.
     */
    typedef void (^OnUploadProgressListener) (UploadFileInfo* fileInfo, long uploadedSize, long totalSize);
    /**
     The callback that is fired when the STS token expires.
     If you use the upload URL and credential to upload a file, call the resumeWithAuth: method to resume the upload.
     If you use the STS token to upload a file, call the resumeWithToken:accessKeySecret:secretToken:expireTime: method to resume the upload.
     */
    typedef void (^OnUploadTokenExpiredListener) ();
    /**
     The callback that is fired when the system retries the upload.
     */
    typedef void (^OnUploadRertyListener) ();
    /**
     The callback that is fired when the system resumes the upload after the upload retry is complete.
     */
    typedef void (^OnUploadRertyResumeListener) ();
    /**
     The callback that is fired when the upload starts.
     If you use the upload URL and credential to upload a file, call the setUploadAuthAndAddress:uploadAuth:uploadAddress: method to specify the upload URL and credential.
     @param fileInfo The information about the file that you upload.
     */
    typedef void (^OnUploadStartedListener) (UploadFileInfo* fileInfo);
  4. アップロードするファイルの種類に基づいてアップロードパラメーターを作成します。 オーディオ、ビデオ、または画像ファイルをアップロードできます。

    説明

    画像のアップロードパラメータは、オーディオおよびビデオファイルのアップロードパラメータとは少し異なります。 クライアントアップロードSDKを使用して補助メディアアセットをアップロードすることはできません。

    オーディオおよびビデオファイルのアップロードパラメーター

    アップロードリストにオーディオまたはビデオファイルを追加するアップロード要求関数を作成します。

    表示コード

    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"The name of the source video." ofType:@"The format of the source video. Example: mp4."];
    VodInfo *vodInfo = [[VodInfo alloc] init];
    vodInfo.title = @"The name of the uploaded video.";
    vodInfo.desc =@"The description of the uploaded video.";
    vodInfo.ca teId = @(The category ID of the uploaded video.);
    vodInfo.tags = @"The video tags, such as sports.";
    [self.uploader addFile:filePath vodInfo:vodInfo];

    VodInfoオブジェクトの構造

    表示コード

    // The title.
    @property (nonatomic, copy) NSString* title;
    // The tags.
    @property (nonatomic, copy) NSString* tags;
    // The description.
    @property (nonatomic, copy) NSString* desc;
    // The category ID.
    @property (nonatomic, strong) NSNumber* cateId;
    // The URL of the thumbnail. The value must be a complete URL that starts with https://.
    @property (nonatomic, copy) NSString* coverUrl;

    アップロードするファイルを追加すると、SDKは次の構造を持つUploadFileInfoオブジェクトにファイルをカプセル化します。

    表示コード

    // The local path of the file.
    @property (nonatomic, copy) NSString* filePath;
    //endpoint
    @property (nonatomic, copy) NSString* endpoint;
    //bucket
    @property (nonatomic, copy) NSString* bucket;
    //object
    @property (nonatomic, copy) NSString* object;
    //VodInfo
    @property (nonatomic, strong) VodInfo* vodInfo;
    説明

    アルバムからビデオをアップロードする場合は、filePathパラメーターを、セレクターを使用して選択したビデオの絶対パスに設定します。

    画像ファイルのアップロードパラメーター

    表示コード

    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"The name of the source image." ofType:@"The format of the source image. Example: jpg."];
    VodInfo *imageInfo = [[VodInfo alloc] init];
    vodInfo.title = @"The name of the uploaded image.";
    vodInfo.desc =@"The description of the uploaded image.";
    vodInfo.ca teId = @(The category ID of the uploaded image.);
    vodInfo.tags = @"The image tags, such as sports.";
    [self.uploader addFile:filePath vodInfo:imageInfo];
  5. アップロードを開始します。

    1. startメソッドは、アップロードを開始するために呼び出されます。

      [self.uploader start];

      このメソッドが呼び出されると、OnUploadStartedListenerコールバックが発生します。 アップロードURLとアップロード資格情報を使用してファイルをアップロードする場合は、次のコードに示すように、このコールバックでアップロードURLと資格情報を指定します。

      [weakSelf.uploader setUploadAuthAndAddress:fileInfo uploadAuth:weakSelf.uploadAuth uploadAddress:weakSelf.uploadAddress];
    2. アップロードが開始されると、OnUploadProgressListenerコールバックが起動され、アップロードの進行状況が同期されます。

      コールバックパラメーターには、uploadedSizetotalSizeが含まれます。 uploadedSizeパラメーターはアップロードされたパーツのサイズを示し、totalSizeパラメーターはアップロードされたファイルの合計サイズを示します。

    3. ファイルがアップロードされると、OnUploadFinishedListenerコールバックが返されます。 コールバックメッセージで、UploadFileInfoパラメーターはファイル情報を示し、VodUploadResultパラメーターはアップロード結果を示します。

      VodUploadResultオブジェクトには、次のプロパティが含まれます。

      @property (nonatomic, copy) NSString* videoId;
      @property (nonatomic, copy) NSString* imageUrl;
      説明

      STSトークンを使用してビデオがアップロードされた場合にのみ、videoIdパラメーターの値が返されます。 STSトークンを使用してイメージがアップロードされた場合にのみ、imageUrlパラメーターの値が返されます。 アップロードURLと資格情報を使用してファイルをアップロードすると、videoIdimageUrlパラメーターは返されません。 アップロードURLと資格情報を取得するときに、パラメーターの値を取得できます。

結果

  • ビデオがアップロードされると、videoIdパラメーターが返されます。 videoIdパラメーターの値は、ビデオIDを示します。 次に、ビデオを再生するためのストリーミングURLを取得できます。 詳細については、「ビデオを再生するための再生URLの取得」をご参照ください。

  • イメージがアップロードされると、imageUrlパラメーターが返されます。 imageUrlパラメーターの値は、イメージURLを示します。 URL署名が有効になっている場合、イメージURLは特定の期間後に期限切れになります。 詳細については、「URL署名の設定」をご参照ください。

キュー管理

アップロードインスタンスVODUploadClientを使用すると、アップロードする複数のファイルを順番に追加できます。 次の方法を使用して、アップロードリストを管理できます。

説明

VODUploadClientオブジェクトを使用すると、一度に複数のファイルをアップロードできます。 ただし、アップロードURLと資格情報を使用してメディアファイルをアップロードする場合は、各ファイルの構成を個別に設定する必要があります。 一度に複数のファイルをアップロードするためのコードは複雑です。 そのため、一度に1つのファイルをアップロードリストに追加することをお勧めします。

  • アップロードリストからファイルを削除します。 削除するファイルがアップロード中の場合、システムはアップロードをキャンセルし、リスト内の次のファイルのアップロードを自動的に開始します。

    - (BOOL)deleteFile:(int) index;
  • アップロードリストをクリアします。 クリアするアップロードリストにアップロード中のファイルが含まれている場合、アップロードはキャンセルされます。

    - (BOOL)clearFiles;
  • アップロードリストを照会します。

    - (NSMutableArray<UploadFileInfo *> *)listFiles;
  • アップロードリストから削除せずに、アップロードリスト内のファイルをキャンセル済みとしてマークします。 キャンセルするファイルがアップロード中の場合、システムはアップロードをキャンセルし、リスト内の次のファイルのアップロードを自動的に開始します。

    - (BOOL)cancelFile:(int)index;
  • キャンセルされたファイルを再開し、自動的にファイルのアップロードを開始します。

    - (BOOL)resumeFile:(int)index;

アップロード管理

  • アップロードを停止します。 ファイルがアップロードされている場合、システムはアップロードをキャンセルします。

    - (BOOL)stop;
    説明

    アップロードを停止した後にアップロードを再開する場合は、resumeFileメソッドを呼び出して、アップロードするファイルを再開します。 または、アップロードリストをクリアし、ファイルを再度追加してアップロードします。

  • アップロードを一時停止します。

    - (BOOL)pause;
  • アップロードを再開します。

    - (BOOL)resume;

コールバックの処理

  • アップロードの失敗

    アップロードが失敗した場合、OnUploadFailedListenerコールバックが呼び出されます。 codeおよびmessageコールバックパラメーターに基づいて、障害の原因を確認できます。 さらに、プロンプトがwebページに表示されます。 エラーコードの詳細については、「エラーコード」および「例外処理」をご参照ください。

  • 資格情報またはトークンの有効期限

    アップロード資格情報またはSTSトークンの有効期限が切れると、OnUploadTokenExpiredListenerコールバックが呼び出されます。 AppServerにリクエストを送信して、新しいアップロード資格情報またはSTSトークンを取得し、次のメソッドを呼び出してアップロードを再開できます。

    • 新しいアップロード資格情報の指定

      - (BOOL)resumeWithAuth:(NSString *)uploadAuth;
    • 新しいSTSトークンの指定

      - (BOOL)resumeWithToken:(NSString *)accessKeyId
              accessKeySecret:(NSString *)accessKeySecret
                  secretToken:(NSString *)secretToken
                   expireTime:(NSString *)expireTime;
  • アップロードタイムアウト

    アップロードがタイムアウトすると、OnUploadRertyListenerコールバックが呼び出され、システムは自動的にファイルのアップロードを再試行します。 webページでプロンプトを受け取るか、stopメソッドを呼び出してアップロードを停止できます。 さらに、maxRetryCountパラメーターを設定して、再試行の最大数を指定できます。 再試行の結果、アップロードを再開できることが示された場合、OnUploadRertyResumeListenerコールバックが呼び出され、アップロードが再開されます。

拡張設定

VODUploadClientインスタンスは、トランスコード、タイムアウト時の再試行、キャッシュパス、再開可能アップロード、マルチパートアップロード、およびサービスリージョンの詳細設定をサポートしています。 サンプルコード:

トランスコード

/**
 Specify whether to transcode a video when it is uploaded to ApsaraVideo VOD. Default value: YES. For more information about video transcoding formats, see Audio and video transcoding. 
 */
@property (nonatomic, assign) BOOL transcode;

タイムアウト時の再試行

/**
 Specify the maximum number of retries allowed upon a timeout. Default value: INT_MAX.
 */
@property (nonatomic, assign) uint32_t maxRetryCount;
/**
 Specify the timeout period.
 */
@property (nonatomic, assign) NSTimeInterval timeoutIntervalForRequest;

キャッシュパス

/**
 Specify the path in which cached data is stored.
 */
@property (nonatomic, copy) NSString * recordDirectoryPath;

再開可能なアップロード

/**
 Specify whether to record the upload progress for a resumable upload. Default value: YES.
 */
@property (nonatomic, assign) BOOL recordUploadProgress;

マルチパートアップロード

/**
 Specify the size of each part in multipart upload. Default value: 1024 × 1024.
*/
@property (nonatomic, assign) NSInteger uploadPartSize;

サービスリージョン

/**
 Specify the region in which ApsaraVideo VOD is activated. Default value: cn-shanghai.
 */
@property (nonatomic, copy) NSString *region;