メディアファイルを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と認証情報を取得します。
ユーザーは、ApsaraVideo VOD SDKなどのアプリケーションサーバーに認証サービスをデプロイして、アップロードURLと資格情報を取得します。
クライアントは、アップロードURLとアップロード資格情報を要求する要求をアプリケーションサーバーに送信します。
アプリケーションサーバーがApsaraVideo VODにリクエストを送信し、アップロードURLと資格情報をリクエストします。
ApsaraVideo VODはアップロードURLと資格情報を返します。
説明ApsaraVideo VODはメディアIDも生成し、メディアのライフサイクル管理とメディア処理で使用できます。
ビデオの場合、メディアIDは
VideoId
パラメーターで返されます。画像の場合、メディアIDは
ImageId
パラメーターで返されます。補助メディアアセットの場合、メディアIDは
MediaId
パラメーターで返されます。返されたメディアIDは、メディアアセット管理、オーディオおよびビデオの再生、メディア処理などの後続のタスクで必要となるものを適切に保持します。
アプリケーションサーバーは、アップロードURLと資格情報をクライアントに返します。
説明アプリケーションサーバーは、アップロードURLまたは資格情報に対してBase64デコードを実行する必要はありません。
クライアントは、アップロードURLと資格情報を使用して、アップロードインスタンスを初期化します。
クライアントはアップロードパラメータを構築してアップロード要求を送信する。
OSSはアップロード結果を返します。
説明事前にコールバックを設定して、アップロードイベントに関する通知を受け取ることもできます。
STSトークンを使用してメディアファイルをアップロードするプロセス
STSトークンに基づく権限付与を使用する場合は、RAMロールを作成し、ApsaraVideo VODにアクセスするための権限をRAMロールに付与する必要があります。 詳細については、「STSを使用した動画のアップロード」をご参照ください。
次の図は、STSトークンを使用してメディアファイルをアップロードする完全なプロセスを示しています。
ユーザーは、ApsaraVideo VOD SDKなどのアプリケーションサーバーに認証サービスをデプロイして、一時的なSTSトークンを取得します。
クライアントは、STSトークンを要求する要求をアプリケーションサーバーに送信します。
アプリケーションサーバーは、STSトークンを要求する要求をSTSに送信します。
STSはトークンを返します。
アプリケーションサーバーはSTSトークンをクライアントに返します。
クライアントはSTSトークンを使用してアップロードインスタンスを初期化します。
クライアントはアップロードパラメータを構築してアップロード要求を送信します。
OSSはアップロード結果を返します。
説明事前にコールバックを設定して、アップロードイベントに関する通知を受け取ることもできます。
ファイルのアップロード
iOSでファイルをアップロードするには、次の手順を実行します。
アップロードURLとアップロード資格情報、またはアップロード認証用のSecurity Token Service (STS) トークンを取得します。
iOS用アップロードSDKには2つの権限付与方法が用意されています。 承認にはアップロード資格情報を使用することを推奨します。
アップロードURLと資格情報を取得する方法の詳細については、「アップロードURLと資格情報の取得」をご参照ください。
STSトークンの取得方法の詳細については、「STSトークンの取得」をご参照ください。
結果
取得したアップロードURLと資格情報、または取得したSTSトークンを使用して、アップロードインスタンスを初期化します。
アップロードURLと資格情報またはSTSトークンを使用して、アップロードインスタンスを初期化します。
アップロードインスタンスを初期化する前に、初期化コールバックを設定する必要があります。
VODUploadClient
インスタンスを宣言します。ローカル変数にすることはできません。アップロードインスタンスを初期化します。 アップロードURLと資格情報、またはSTSトークンを使用して、ビジネス要件に基づいてアップロードインスタンスを初期化します。
(推奨) アップロードURLと資格情報を使用してアップロードインスタンスを初期化する
説明アップロードURLと資格情報を使用する場合は、
init
メソッドを呼び出してアップロードインスタンスを初期化します。初期化時に取得したアップロードURLと資格情報を指定する必要はありません。 代わりに、アップロードの開始時に起動される
OnUploadStartedListener
コールバックでsetUploadAuthAndAddress: uploadAuth:uploadAddress:
メソッドを呼び出してSDKで指定します。アップロード資格情報の有効期限が切れると、
OnUploadTokenExpiredListener
コールバックが発生します。 新しいアップロード資格情報を使用してアップロードを再開するには、resumeWithAuth
メソッドを呼び出します。
STSトークンを使用してアップロードインスタンスを初期化する
説明STSトークンを使用する場合は、
init
メソッドを呼び出してアップロードインスタンスを初期化し、setKeyId:accessKeySecret:secretToken:expireTime:listener:
メソッドを呼び出してSTSトークンを指定します。STSトークンの有効期限が切れると、
OnUploadTokenExpiredListener
コールバックが発生します。 新しいSTSトークンを使用してアップロードを再開するには、resumeWithToken: accessKeySecret: secretToken: expireTime
メソッドを呼び出します。
アップロード中にキーメッセージを受信するようにコールバックを設定します。
アップロードステータスのコールバックのクラスに属する
VODUploadListener
オブジェクトを設定します。 次のコールバックを設定する必要があります。アップロードするファイルの種類に基づいてアップロードパラメーターを作成します。 オーディオ、ビデオ、または画像ファイルをアップロードできます。
説明画像のアップロードパラメータは、オーディオおよびビデオファイルのアップロードパラメータとは少し異なります。 クライアントアップロードSDKを使用して補助メディアアセットをアップロードすることはできません。
オーディオおよびビデオファイルのアップロードパラメーター
アップロードリストにオーディオまたはビデオファイルを追加するアップロード要求関数を作成します。
VodInfoオブジェクトの構造
アップロードするファイルを追加すると、SDKは次の構造を持つ
UploadFileInfo
オブジェクトにファイルをカプセル化します。説明アルバムからビデオをアップロードする場合は、filePathパラメーターを、セレクターを使用して選択したビデオの絶対パスに設定します。
画像ファイルのアップロードパラメーター
アップロードを開始します。
start
メソッドは、アップロードを開始するために呼び出されます。[self.uploader start];
このメソッドが呼び出されると、
OnUploadStartedListener
コールバックが発生します。 アップロードURLとアップロード資格情報を使用してファイルをアップロードする場合は、次のコードに示すように、このコールバックでアップロードURLと資格情報を指定します。[weakSelf.uploader setUploadAuthAndAddress:fileInfo uploadAuth:weakSelf.uploadAuth uploadAddress:weakSelf.uploadAddress];
アップロードが開始されると、
OnUploadProgressListener
コールバックが起動され、アップロードの進行状況が同期されます。コールバックパラメーターには、
uploadedSize
とtotalSize
が含まれます。 uploadedSizeパラメーターはアップロードされたパーツのサイズを示し、totalSizeパラメーターはアップロードされたファイルの合計サイズを示します。ファイルがアップロードされると、
OnUploadFinishedListener
コールバックが返されます。 コールバックメッセージで、UploadFileInfo
パラメーターはファイル情報を示し、VodUploadResult
パラメーターはアップロード結果を示します。VodUploadResult
オブジェクトには、次のプロパティが含まれます。@property (nonatomic, copy) NSString* videoId; @property (nonatomic, copy) NSString* imageUrl;
説明STSトークンを使用してビデオがアップロードされた場合にのみ、
videoId
パラメーターの値が返されます。 STSトークンを使用してイメージがアップロードされた場合にのみ、imageUrl
パラメーターの値が返されます。 アップロードURLと資格情報を使用してファイルをアップロードすると、videoId
とimageUrl
パラメーターは返されません。 アップロード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;