このトピックでは、iOS ソフトウェア開発キット (SDK) を使用して、ローカルのメディアファイルを VOD ストレージにアップロードする方法について説明します。
前提条件
iOS 8.0 以降を使用していること。
iOS アップロード SDK は Swift をサポートしていません。
SDK の統合
統合方法
CocoaPods を使用した SDK の統合 (推奨)
pod 'VODUpload'コマンドを実行して、VOD アップロード SDK を Podfile の依存関係として追加します。pod repo updateコマンドを実行して、Pod リポジトリを更新します。pod installコマンドを実行して、VOD アップロード SDK をインストールします。
SDK の手動統合
SDK バージョン:1.6.5
更新日時:2022-01-24
パッケージの MD5 ハッシュ:f3551634b53cd1264013db4762f79a14
ダウンロードアドレス: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 を統合した後、プロジェクトを開き、次のように設定を変更します。
メニューバーで、[Build Setting] > [Linking] > [Other Linker Flags] をクリックします。
-Objc を追加します。
基本設定
アップロードインスタンスの初期化
まず、クライアントサイドアップロードの全体的なプロセスを理解します。次に、選択した認証方法に基づいて認証サービスをデプロイします:
アップロード URL と認証情報を使用する場合は、認証サービスからアップロード URL と認証情報を取得します。
Security Token Service (STS) トークンを使用する場合は、認証サービスからSTS トークンを取得します。
アップロードインスタンスの初期化には、初期化コールバックの宣言とインスタンスの初期化の 2 つのステップが含まれます。
VODUploadClientプロパティを宣言します。ローカル変数にすることはできません。アップロードインスタンスを初期化します。
アップロード URL と認証情報を使用する方法
説明アップロード URL と認証情報を使用するには、
initメソッドを呼び出して初期化します。初期化時にアップロード URL と認証情報を設定しないでください。アップロードが開始されると、
OnUploadStartedListenerコールバックがトリガーされます。このコールバックでsetUploadAuthAndAddress:uploadAuth:uploadAddress:メソッドを呼び出して、URL と認証情報を設定します。認証情報が期限切れになると、
OnUploadTokenExpiredListenerコールバックがトリガーされます。resumeWithAuthメソッドを呼び出し、新しいアップロード認証情報を提供してアップロードを再開します。
STS トークンを使用する方法
説明STS トークンを使用して初期化するには、
initメソッドを呼び出し、setKeyId:accessKeySecret:secretToken:expireTime:listener:メソッドを使用して一時的な STS 認証情報を渡します。トークンが期限切れになると、
OnUploadTokenExpiredListenerコールバックがトリガーされます。resumeWithToken:accessKeySecret:secretToken:expireTime:メソッドを呼び出し、新しい STS トークンを提供してアップロードを再開します。
アップロードプロセス中の主要なイベントに関するメッセージを受信するために、コールバックを設定します。
VODUploadListenerオブジェクトを設定します。このオブジェクトは、アップロードステータスのコールバッククラスです。次のコールバックメソッドを設定する必要があります:音声、動画、画像などのファイルタイプに基づいてアップロードパラメーターを構築します。
説明音声/動画ファイルと画像ファイルのアップロードパラメーターは若干異なります。クライアントは補助メディアアセットのアップロードをサポートしていません。
音声/動画ファイルのパラメーター
アップロードリクエスト関数を構築して、音声または動画ファイルをアップロードリストに追加します。
VodInfo の説明
ファイルを追加すると、SDK はそのファイルを
UploadFileInfoオブジェクトにカプセル化します。構造は次のとおりです:説明フォトアルバムから動画をアップロードするには、選択した動画の絶対パスをアップロードのファイルパスとして使用します。
画像ファイルのパラメーター
アップロードを開始します。
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 を使用して再生 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;