このトピックでは、iOS SDK を使用してローカルデバイスから ApsaraVideo VOD にメディアファイルをアップロードする方法について説明します。
前提条件
iOS のバージョンは iOS 8 以降です。
iOS アップロード SDK は Swift プログラミングをサポートしていません。
SDK の統合
統合方法
pod を使用した SDK の統合 (推奨)
pod 'VODUpload'コマンドを実行して、VOD アップロード SDK の依存関係を Podfile に追加します。pod repo updateコマンドを実行して、pod repo を更新します。pod installコマンドを実行して、VOD アップロード SDK をインストールします。
SDK の手動統合
バージョン: 1.6.5
最終更新日: 2022-01-24
パッケージの MD5 ハッシュ: f3551634b53cd1264013db4762f79a14
ダウンロード URL: V1.6.5 SDK
Xcode で、VODUpload.framework と AliyunOSSiOS.framework をプロジェクトターゲットにドラッグします。表示されるダイアログボックスで、[Copy Items If Needed] を選択します。
次のシステム依存ライブラリを追加します。
AVFoundation.framework
CoreMedia.framework
SystemConfiguration.framework
MobileCoreServices.framework
libresolv.9.tbd
プロジェクト設定
SDK を統合した後、プロジェクトを開き、次の手順で設定を変更します。
メニューバーで をクリックします。
-Objc を追加します。
基本設定
アップロードインスタンスの初期化
まず、クライアントアップロード プロセスを理解し、アップロード権限付与方法に基づいて対応する権限付与サービスをデプロイします。
アップロード URL と資格情報方式を使用する場合、権限付与サービスでアップロード URL と資格情報を取得します。
STS トークン方式を使用する場合、権限付与サービスでSTS トークンを取得します。
アップロードインスタンスを初期化する前に、初期化コールバックを設定する必要があります。
VODUploadClientプロパティを宣言します。これはローカル変数にできません。アップロードインスタンスを初期化します。
アップロード URL と資格情報方式
説明アップロード URL と資格情報方式を使用する場合、
initメソッドを呼び出してアップロードインスタンスを初期化します。取得したアップロード URL と資格情報を初期化時に指定する必要はありません。代わりに、アップロード開始時に発行される
OnUploadStartedListenerコールバックでsetUploadAuthAndAddress: uploadAuth:uploadAddress:メソッドを呼び出して SDK で指定します。トークンが期限切れになると、
OnUploadTokenExpiredListenerコールバックが発行されます。新しいアップロード資格情報を使用してアップロードを再開するには、resumeWithAuthメソッドを呼び出します。
STS トークン方式
説明STS 方式を使用する場合、
initメソッドを呼び出してアップロードインスタンスを初期化し、setKeyId:accessKeySecret:secretToken:expireTime:listener:インターフェイスを介して一時的な STS 資格情報を渡します。トークンが期限切れになると、
OnUploadTokenExpiredListenerコールバックが発行されます。新しい STS トークンを使用してアップロードを再開するには、resumeWithToken: accessKeySecret: secretToken: expireTimeメソッドを呼び出します。
アップロード中に主要なメッセージを受信するためのコールバックを設定します。
VODUploadListenerオブジェクトを設定します。これはアップロードステータスのコールバッククラスです。次のコールバックメソッドを設定する必要があります:ファイルの種類 (オーディオ/ビデオまたはイメージ) に基づいてアップロードパラメーターを作成します。
説明オーディオ/ビデオとイメージのアップロードパラメーターは若干異なります。現在、クライアントは補助メディアアセットのアップロードをサポートしていません。
オーディオ/ビデオファイルパラメーター
アップロードリクエスト関数を作成して、オーディオ/ビデオファイルをアップロードリストに追加します。
VodInfo の説明
ファイルを追加すると、SDK はアップロードするファイルを次の構造を持つ
UploadFileInfoオブジェクトとしてカプセル化します:説明アルバムからビデオをアップロードする必要がある場合は、セレクターを介して取得した選択済みビデオの絶対パスをアップロード用の filepath として使用します。
イメージファイルパラメーター
アップロードを開始します。
startを呼び出してアップロードを開始します。[self.uploader start];このメソッドが呼び出されると、
OnUploadStartedListenerコールバックがトリガーされます。アップロード URL と資格情報方式を使用している場合は、このコールバックメソッドでアップロード URL と資格情報を設定する必要があります。コードは次のとおりです:[weakSelf.uploader setUploadAuthAndAddress:fileInfo uploadAuth:weakSelf.uploadAuth uploadAddress:weakSelf.uploadAddress];ファイルのアップロードが開始されると、
OnUploadProgressListenerコールバックがアップロードの進行状況の同期を開始します。コールバックパラメーターには、アップロードされたファイルサイズ
uploadedSizeと合計ファイルサイズtotalSizeが含まれます。ファイルが正常にアップロードされると、
OnUploadFinishedListenerコールバックはアップロードファイル情報UploadFileInfoとアップロード結果VodUploadResultを返します。VodUploadResultには次のプロパティが含まれています:@property (nonatomic, copy) NSString* videoId; @property (nonatomic, copy) NSString* imageUrl;説明videoIdは STS 方式を使用したビデオのアップロードが成功した場合にのみ返され、imageUrlは STS 方式を使用したイメージのアップロードが成功した場合にのみ返されます。アップロード URL と資格情報方式を使用する場合、videoIdとimageUrlは返されません。対応する値は、アップロード 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;