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

ApsaraVideo VOD:iOS SDK を使用してファイルをアップロードする

最終更新日:Nov 09, 2025

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

前提条件

  • iOS のバージョンは iOS 8 以降です。

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

SDK の統合

統合方法

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

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

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

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

SDK の手動統合

  • バージョン: 1.6.5

  • 最終更新日: 2022-01-24

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

  • ダウンロード URL: 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. STS トークン方式を使用する場合、権限付与サービスでSTS トークンを取得します。

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

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

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

    アップロード URL と資格情報方式

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

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

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

    コードの表示

    // VODUploadClient オブジェクトを作成します
    self.uploader = [VODUploadClient new];
    // weakself
    __weak typeof(self) weakSelf = self;
    // コールバックを設定します
    OnUploadFinishedListener FinishCallbackFunc = ^(UploadFileInfo* fileInfo, VodUploadResult* result){
        NSLog(@"アップロード完了コールバック videoid:%@, imageurl:%@", result.videoId, result.imageUrl);
    };
    OnUploadFailedListener FailedCallbackFunc = ^(UploadFileInfo* fileInfo, NSString *code, NSString* message){
        NSLog(@"アップロード失敗コールバック code = %@, error message = %@", code, message);
    };
    OnUploadProgressListener ProgressCallbackFunc = ^(UploadFileInfo* fileInfo, long uploadedSize, long totalSize) {
        NSLog(@"アップロード進行状況コールバック uploadedSize : %li, totalSize : %li", uploadedSize, totalSize);
    };
    OnUploadTokenExpiredListener TokenExpiredCallbackFunc = ^{
        NSLog(@"アップロードトークン期限切れコールバック。");
        // トークンが期限切れになったら、新しいアップロード資格情報を設定してアップロードを続行します
        [weakSelf.uploader resumeWithAuth:`新しいアップロード資格情報`];
    };
    OnUploadRertyListener RetryCallbackFunc = ^{
        NSLog(@"アップロードリトライ開始コールバック。");
    };
    OnUploadRertyResumeListener RetryResumeCallbackFunc = ^{
        NSLog(@"アップロードリトライ終了コールバック。");
    };
    OnUploadStartedListener UploadStartedCallbackFunc = ^(UploadFileInfo* fileInfo) {
        NSLog(@"アップロード開始コールバック。");
        // アップロード URL とアップロード資格情報を設定します
        [weakSelf.uploader setUploadAuthAndAddress:fileInfo uploadAuth:`アップロード資格情報` uploadAddress:`アップロードアドレス`];
    };
    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 コールバックが発行されます。新しい STS トークンを使用してアップロードを再開するには、resumeWithToken: accessKeySecret: secretToken: expireTime メソッドを呼び出します。

    コードの表示

    // VODUploadClient オブジェクトを作成します
    self.uploader = [VODUploadClient new];
    // weakself
    __weak typeof(self) weakSelf = self;
    // コールバックを設定します
    OnUploadFinishedListener FinishCallbackFunc = ^(UploadFileInfo* fileInfo,  VodUploadResult* result){
        NSLog(@"アップロード完了コールバック videoid:%@, imageurl:%@", result.videoId, result.imageUrl);
    };
    OnUploadFailedListener FailedCallbackFunc = ^(UploadFileInfo* fileInfo, NSString *code, NSString* message){
        NSLog(@"アップロード失敗コールバック code = %@, error message = %@", code, message);
    };
    OnUploadProgressListener ProgressCallbackFunc = ^(UploadFileInfo* fileInfo, long uploadedSize, long totalSize) {
        NSLog(@"アップロード進行状況コールバック uploadedSize : %li, totalSize : %li", uploadedSize, totalSize);
    };
    OnUploadTokenExpiredListener TokenExpiredCallbackFunc = ^{
        NSLog(@"アップロードトークン期限切れコールバック。");
        // トークンが期限切れになったら、新しい STS を設定してアップロードを続行します
        [weakSelf.uploader resumeWithToken:`STS キー ID` accessKeySecret:`STS キーシークレット` secretToken:`STS シークレットトークン` expireTime:`STS 有効期限`];
    };
    OnUploadRertyListener RetryCallbackFunc = ^{
        NSLog(@"アップロードリトライ開始コールバック。");
    };
    OnUploadRertyResumeListener RetryResumeCallbackFunc = ^{
        NSLog(@"アップロードリトライ終了コールバック。");
    };
    OnUploadStartedListener UploadStartedCallbackFunc = ^(UploadFileInfo* fileInfo) {
        NSLog(@"アップロード開始コールバック。");
    };
    // 初期化
    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 キー ID` accessKeySecret:`STS キーシークレット` secretToken:STS シークレットトークン` expireTime:`STS 有効期限` 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:@"ビデオソースファイル名" ofType:@"ビデオソースファイルのフォーマット、例: mp4"];
    VodInfo *vodInfo = [[VodInfo alloc] init];
    vodInfo.title = @"アップロード後のビデオ名";
    vodInfo.desc =@"アップロード後のビデオの説明";
    vodInfo.cateId = @(ビデオカテゴリ ID);
    vodInfo.tags = @"ビデオタグ、例: スポーツ";
    [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;
    説明

    アルバムからビデオをアップロードする必要がある場合は、セレクターを介して取得した選択済みビデオの絶対パスをアップロード用の filepath として使用します。

    イメージファイルパラメーター

    コードの表示

    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"イメージソースファイル名" ofType:@"イメージソースファイルのフォーマット、例: jpg"];
    VodInfo *imageInfo = [[VodInfo alloc] init];
    imageInfo.title = @"アップロード後のイメージ名";
    imageInfo.desc =@"アップロード後のイメージの説明";
    imageInfo.cateId = @(イメージカテゴリ ID);
    imageInfo.tags = @"イメージタグ、例: スポーツ";
    [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 パラメーターの値はビデオ ID を示します。その後、ストリーミング URL を取得してビデオを再生できます。詳細については、「再生 URL を取得してビデオを再生する」をご参照ください。

  • イメージがアップロードされると、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 ページにプロンプトが表示されます。エラーコードの詳細については、「エラーコード」および「例外の処理」をご参照ください。

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

    OnUploadTokenExpiredListener コールバックは、アップロード資格情報または STS トークンが期限切れになった場合に呼び出されます。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 インスタンスは、トランスコーディング、タイムアウト時のリトライ、キャッシュパス、再開可能なアップロード、マルチパートアップロード、サービスリージョンなどの高度な設定をサポートしています。サンプルコード:

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

ギガバイトまたはテラバイト単位の大きなファイルをアップロードする場合や、中国本土からシンガポールリージョンのストレージの場所など、リージョンをまたいでビデオをアップロードする場合は、アップロードアクセラレーション機能を有効にできます。詳細については、「アップロードアクセラレーションの有効化」をご参照ください。アップロードアクセラレーションを有効にした後、アップロードされたインスタンスの vodInfo 設定の UserData 文字列割り当てに対応する key-value 値を追加する必要があります。サンプルコード:

/** 
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 リージョン。デフォルト値は "cn-shanghai" です
 */
@property (nonatomic, copy) NSString *region;