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

ApsaraVideo VOD:iOS SDK を使用したファイルのアップロード

最終更新日:Jan 29, 2026

このトピックでは、iOS ソフトウェア開発キット (SDK) を使用して、ローカルのメディアファイルを VOD ストレージにアップロードする方法について説明します。

前提条件

  • iOS 8.0 以降を使用していること。

  • iOS アップロード SDK は Swift をサポートしていません。

SDK の統合

統合方法

CocoaPods を使用した SDK の統合 (推奨)

  1. pod 'VODUpload' コマンドを実行して、VOD アップロード SDK を Podfile の依存関係として追加します。

  2. pod repo update コマンドを実行して、Pod リポジトリを更新します。

  3. pod install コマンドを実行して、VOD アップロード SDK をインストールします。

SDK の手動統合

  • SDK バージョン:1.6.5

  • 更新日時:2022-01-24

  • パッケージの MD5 ハッシュ:f3551634b53cd1264013db4762f79a14

  • ダウンロードアドレス:V1.6.5 SDK

  1. Xcode で、VODUpload.framework と AliyunOSSiOS.framework をプロジェクトターゲットにドラッグします。表示されるダイアログボックスで、[Copy items if needed] を選択します。

  2. 次のシステム依存ライブラリを追加します。

    1. AVFoundation.framework

    2. CoreMedia.framework

    3. SystemConfiguration.framework

    4. MobileCoreServices.framework

    5. libresolv.9.tbd

プロジェクト設定

SDK を統合した後、プロジェクトを開き、次のように設定を変更します。

  1. メニューバーで、[Build Setting] > [Linking] > [Other Linker Flags] をクリックします。

  2. -Objc を追加します。

基本設定

アップロードインスタンスの初期化

まず、クライアントサイドアップロードの全体的なプロセスを理解します。次に、選択した認証方法に基づいて認証サービスをデプロイします:

  1. アップロード URL と認証情報を使用する場合は、認証サービスからアップロード URL と認証情報を取得します。

  2. Security Token Service (STS) トークンを使用する場合は、認証サービスからSTS トークンを取得します。

アップロードインスタンスの初期化には、初期化コールバックの宣言とインスタンスの初期化の 2 つのステップが含まれます。

  1. VODUploadClient プロパティを宣言します。ローカル変数にすることはできません。

  2. アップロードインスタンスを初期化します。

    アップロード URL と認証情報を使用する方法

    説明
    • アップロード URL と認証情報を使用するには、init メソッドを呼び出して初期化します。

    • 初期化時にアップロード URL と認証情報を設定しないでください。アップロードが開始されると、OnUploadStartedListener コールバックがトリガーされます。このコールバックで setUploadAuthAndAddress:uploadAuth:uploadAddress: メソッドを呼び出して、URL と認証情報を設定します。

    • 認証情報が期限切れになると、OnUploadTokenExpiredListener コールバックがトリガーされます。resumeWithAuth メソッドを呼び出し、新しいアップロード認証情報を提供してアップロードを再開します。

    コードの表示

    // VODUploadClient オブジェクトを作成します
    self.uploader = [VODUploadClient new];
    // weakself
    __weak typeof(self) weakSelf = self;
    // コールバックを設定します
    OnUploadFinishedListener FinishCallbackFunc = ^(UploadFileInfo* fileInfo, VodUploadResult* result){
        NSLog(@"Upload finished. Video ID: %@, Image URL: %@", result.videoId, result.imageUrl);
    };
    OnUploadFailedListener FailedCallbackFunc = ^(UploadFileInfo* fileInfo, NSString *code, NSString* message){
        NSLog(@"Upload failed. Error code: %@, Error message: %@", code, message);
    };
    OnUploadProgressListener ProgressCallbackFunc = ^(UploadFileInfo* fileInfo, long uploadedSize, long totalSize) {
        NSLog(@"Upload progress. Uploaded size: %li, Total size: %li", uploadedSize, totalSize);
    };
    OnUploadTokenExpiredListener TokenExpiredCallbackFunc = ^{
        NSLog(@"Upload token expired.");
        // トークンが期限切れになりました。新しいアップロード認証情報を設定して、アップロードを再開します。
        [weakSelf.uploader resumeWithAuth:@"new upload auth"];
    };
    OnUploadRertyListener RetryCallbackFunc = ^{
        NSLog(@"Upload retry started.");
    };
    OnUploadRertyResumeListener RetryResumeCallbackFunc = ^{
        NSLog(@"Upload retry finished.");
    };
    OnUploadStartedListener UploadStartedCallbackFunc = ^(UploadFileInfo* fileInfo) {
        NSLog(@"Upload started.");
        // アップロード URL とアップロード認証情報を設定します。
        [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;
    // アップローダーを初期化します。
    [self.uploader init:listener];

    STS トークンを使用する方法

    説明
    • STS トークンを使用して初期化するには、init メソッドを呼び出し、setKeyId:accessKeySecret:secretToken:expireTime:listener: メソッドを使用して一時的な STS 認証情報を渡します。

    • トークンが期限切れになると、OnUploadTokenExpiredListener コールバックがトリガーされます。resumeWithToken:accessKeySecret:secretToken:expireTime: メソッドを呼び出し、新しい STS トークンを提供してアップロードを再開します。

    コードの表示

    // VODUploadClient オブジェクトを作成します
    self.uploader = [VODUploadClient new];
    // weakself
    __weak typeof(self) weakSelf = self;
    // コールバックを設定します
    OnUploadFinishedListener FinishCallbackFunc = ^(UploadFileInfo* fileInfo,  VodUploadResult* result){
        NSLog(@"Upload finished. Video ID: %@, Image URL: %@", result.videoId, result.imageUrl);
    };
    OnUploadFailedListener FailedCallbackFunc = ^(UploadFileInfo* fileInfo, NSString *code, NSString* message){
        NSLog(@"Upload failed. Error code: %@, Error message: %@", code, message);
    };
    OnUploadProgressListener ProgressCallbackFunc = ^(UploadFileInfo* fileInfo, long uploadedSize, long totalSize) {
        NSLog(@"Upload progress. Uploaded size: %li, Total size: %li", uploadedSize, totalSize);
    };
    OnUploadTokenExpiredListener TokenExpiredCallbackFunc = ^{
        NSLog(@"Upload token expired.");
        // トークンが期限切れになりました。新しい STS トークンを設定して、アップロードを再開します。
        [weakSelf.uploader resumeWithToken:@"STS Key Id" accessKeySecret:@"STS Key Secret" secretToken:@"STS Secret Token" expireTime:@"STS Expire Time"];
    };
    OnUploadRertyListener RetryCallbackFunc = ^{
        NSLog(@"Upload retry started.");
    };
    OnUploadRertyResumeListener RetryResumeCallbackFunc = ^{
        NSLog(@"Upload retry finished.");
    };
    OnUploadStartedListener UploadStartedCallbackFunc = ^(UploadFileInfo* fileInfo) {
        NSLog(@"Upload started.");
    };
    // 初期化
    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;
    // STS トークンとリスナーを設定します。
    [self.uploader setKeyId:@"STS Key Id" accessKeySecret:@"STS Key Secret" secretToken:@"STS Secret Token" expireTime:@"STS Expire Time" listener:listener];
  3. アップロードプロセス中の主要なイベントに関するメッセージを受信するために、コールバックを設定します。

    VODUploadListener オブジェクトを設定します。このオブジェクトは、アップロードステータスのコールバッククラスです。次のコールバックメソッドを設定する必要があります:

    コードの表示

    /**
     アップロード成功時のコールバック。
     @param fileInfo アップロードされたファイルの情報。
     @param result アップロード結果。
     */
    typedef void (^OnUploadFinishedListener) (UploadFileInfo* fileInfo, VodUploadResult* result);
    /**
     アップロード失敗時のコールバック。
     @param fileInfo アップロードされたファイルの情報。
     @param code エラーコード。
     @param message エラーメッセージ。
     */
    typedef void (^OnUploadFailedListener) (UploadFileInfo* fileInfo, NSString *code, NSString * message);
    /**
     アップロード進捗のコールバック。
     @param fileInfo アップロードされたファイルの情報。
     @param uploadedSize アップロード済みのサイズ。
     @param totalSize ファイルの合計サイズ。
     */
    typedef void (^OnUploadProgressListener) (UploadFileInfo* fileInfo, long uploadedSize, long totalSize);
    /**
     トークン期限切れ時のコールバック。
     アップロード URL と認証情報を使用している場合は、resumeWithAuth: メソッドを呼び出してアップロードを再開します。
     STS トークンを使用している場合は、resumeWithToken:accessKeySecret:secretToken:expireTime: メソッドを呼び出してアップロードを再開します。
     */
    typedef void (^OnUploadTokenExpiredListener) ();
    /**
     アップロードリトライ開始時のコールバック。
     */
    typedef void (^OnUploadRertyListener) ();
    /**
     アップロードリトライ終了時のコールバック。アップロードが再開されます。
     */
    typedef void (^OnUploadRertyResumeListener) ();
    /**
     アップロード開始時のコールバック。
     アップロード URL と認証情報を使用している場合は、setUploadAuthAndAddress:uploadAuth:uploadAddress: メソッドを呼び出してアップロード URL と認証情報を設定します。
     @param fileInfo アップロードされたファイルの情報。
     */
    typedef void (^OnUploadStartedListener) (UploadFileInfo* fileInfo);
  4. 音声、動画、画像などのファイルタイプに基づいてアップロードパラメーターを構築します。

    説明

    音声/動画ファイルと画像ファイルのアップロードパラメーターは若干異なります。クライアントは補助メディアアセットのアップロードをサポートしていません。

    音声/動画ファイルのパラメーター

    アップロードリクエスト関数を構築して、音声または動画ファイルをアップロードリストに追加します。

    コードの表示

    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"video_source_file_name" ofType:@"video_source_file_format_such_as_mp4"];
    VodInfo *vodInfo = [[VodInfo alloc] init];
    vodInfo.title = @"video_name_after_upload";
    vodInfo.desc = @"video_description_after_upload";
    vodInfo.cateId = @(video_category_id);
    vodInfo.tags = @"video_tags_such_as_sports";
    [self.uploader addFile:filePath vodInfo:vodInfo];

    VodInfo の説明

    コードの表示

    // タイトル
    @property (nonatomic, copy) NSString* title;
    // タグ
    @property (nonatomic, copy) NSString* tags;
    // 説明
    @property (nonatomic, copy) NSString* desc;
    // カテゴリ ID
    @property (nonatomic, strong) NSNumber* cateId;
    // サムネイル URL (https:// で始まる完全な URL)
    @property (nonatomic, copy) NSString* coverUrl;

    ファイルを追加すると、SDK はそのファイルを UploadFileInfo オブジェクトにカプセル化します。構造は次のとおりです:

    コードの表示

    // ファイルのローカルパス
    @property (nonatomic, copy) NSString* filePath;
    // エンドポイント
    @property (nonatomic, copy) NSString* endpoint;
    // バケット
    @property (nonatomic, copy) NSString* bucket;
    // オブジェクト
    @property (nonatomic, copy) NSString* object;
    // VodInfo
    @property (nonatomic, strong) VodInfo* vodInfo;
    説明

    フォトアルバムから動画をアップロードするには、選択した動画の絶対パスをアップロードのファイルパスとして使用します。

    画像ファイルのパラメーター

    コードの表示

    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"image_source_file_name" ofType:@"image_source_file_format_such_as_jpg"];
    VodInfo *imageInfo = [[VodInfo alloc] init];
    imageInfo.title = @"image_name_after_upload";
    imageInfo.desc = @"image_description_after_upload";
    imageInfo.cateId = @(image_category_id);
    imageInfo.tags = @"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 コールバックがアップロードの進捗の同期を開始します。

      コールバックパラメーターには、アップロード済みのサイズ (uploadedSize) とファイルの合計サイズ (totalSize) が含まれます。

    3. ファイルが正常にアップロードされると、OnUploadFinishedListener コールバックは、アップロードされたファイル情報 (UploadFileInfo) とアップロード結果 (VodUploadResult) を返します。

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

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

      videoId プロパティは、STS トークンを使用して動画が正常にアップロードされた後にのみ返されます。imageUrl プロパティは、STS トークンを使用して画像が正常にアップロードされた後にのみ返されます。アップロード URL と認証情報を使用する場合、videoIdimageUrl は返されません。これらの値は、アップロード URL と認証情報をリクエストするときに取得できます。

実行結果

  • 動画がアップロードされると、videoId が返されます。この videoId を使用して再生 URL を取得します。詳細については、「再生 URL の取得」をご参照ください。

  • 画像がアップロードされると、imageUrl が返されます。URL 署名を有効にすると、imageUrl には有効期間 (TTL) が設定されます。詳細については、「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 パラメーターから失敗の原因を確認し、ページに通知を表示できます。エラーコードの詳細については、「エラーコード」および「OSS エラーコード」をご参照ください。

  • 認証情報の期限切れ処理

    アップロード認証情報または STS トークンが期限切れになると、OnUploadTokenExpiredListener コールバックがトリガーされます。このコールバックメソッドで、アプリサーバーから新しいアップロード認証情報または STS トークンをリクエストし、次のいずれかのメソッドを呼び出してアップロードを再開します。

    • アップロード認証情報をリセットする

      - (BOOL)resumeWithAuth:(NSString *)uploadAuth;
    • STS トークンをリセットする

      - (BOOL)resumeWithToken:(NSString *)accessKeyId
              accessKeySecret:(NSString *)accessKeySecret
                  secretToken:(NSString *)secretToken
                   expireTime:(NSString *)expireTime;
  • タイムアウト処理

    アップロードがタイムアウトすると、OnUploadRertyListener コールバックがトリガーされ、アップロードが自動的にリトライされます。このコールバックメソッドでは、ページに通知を表示するか、stop メソッドを呼び出してアップロードを停止できます。また、maxRetryCount プロパティを設定して、最大リトライ回数を指定することもできます。タイムアウトリトライ後にアップロードが再開できる場合、OnUploadRertyResumeListener コールバックがトリガーされ、アップロードが再開されます。

詳細設定

VODUploadClient は、アップロードアクセラレーション、アップロードトランスコーディング、タイムアウトリトライ、キャッシュフォルダーの場所の設定、再開可能なアップロード、マルチパートアップロード、VOD サービスリージョンの設定などの詳細設定をサポートしています。以下のセクションに例を示します。

アップロードアクセラレーション

ギガバイトやテラバイト単位の大きなファイルをアップロードする必要がある場合や、中国本土からシンガポールストレージリージョンのストレージの場所に動画をアップロードするなどのリージョン間アップロードを実行する必要がある場合は、アップロードアクセラレーション機能を有効にできます。詳細については、「機能の有効化方法」をご参照ください。この機能を有効にした後、アップロードインスタンスの vodInfo 設定の UserData 文字列に必要なキーと値のペアを追加する必要があります。この文字列は JSON 形式である必要があります。次の例に設定を示します:

/** 
 VodInfo にカスタムデータを設定します。
*/
@property (nonatomic, copy) NSString *UserData;
vodInfo.UserData = "{\"Type\":\"oss\",\"Domain\":\"oss-accelerate.aliyuncs.com\"}";

パラメーターの説明

名前

タイプ

説明

Type

string

有効にするアップロードアクセラレーションのタイプ。`oss` のみがサポートされています。

Domain

string

ユーザーのバケットの高速化ドメイン名。デフォルトのプロトコルは HTTPS です。

説明

この機能を有効にした後に割り当てられる高速化ドメイン名 (例:vod-*******.oss-accelerate.aliyuncs.com) を使用してください。

アップロードトランスコーディング

/**
 アップロード後にサーバーでファイルをトランスコーディングするかどうかを指定します。デフォルト値は YES です。ビデオトランスコーディングの出力フォーマットを指定するには、「ビデオトランスコーディング」をご参照ください。
 */
@property (nonatomic, assign) BOOL transcode;

タイムアウトとリトライ

/**
 最大リトライ回数。デフォルト値は INT_MAX です。
 */
@property (nonatomic, assign) uint32_t maxRetryCount;
/**
 タイムアウト期間。
 */
@property (nonatomic, assign) NSTimeInterval timeoutIntervalForRequest;

キャッシュフォルダーの場所の設定

/**
 キャッシュフォルダーの場所。
 */
@property (nonatomic, copy) NSString * recordDirectoryPath;

再開可能なアップロード

/**
 再開可能なアップロードのためにアップロードの進捗を記録するかどうかを指定します。デフォルト値は YES です。
 */
@property (nonatomic, assign) BOOL recordUploadProgress;

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

/**
 パートサイズ。デフォルト値は 1024 * 1024 です。
*/
@property (nonatomic, assign) NSInteger uploadPartSize;

VOD サービスリージョンの設定

/**
 VOD リージョン。デフォルト値は "cn-shanghai" です。
 */
@property (nonatomic, copy) NSString *region;