メディアファイルをApsaraVideo VODにアップロードできます。 メディアファイルは、ローカルファイルまたはオンラインファイルとすることができます。 VODUploadClientは、Androidデバイスからメディアファイルをアップロードするために使用されるアップロードインスタンスです。 ビデオがアップロードされると、videoIdパラメーターが返されます。 videoIdパラメーターの値は、ビデオIDを示します。 次に、ビデオを再生するには、ビデオIDに基づいてストリーミングURLを取得する必要があります。 このトピックでは、Android用アップロード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はアップロード結果を返します。
説明 事前にコールバックを設定して、アップロードイベントに関する通知を受け取ることもできます。
ファイルのアップロード
Androidデバイスからファイルをアップロードするには、次の手順を実行します。
アップロードURLとアップロード資格情報またはSecurity Token Service (STS) トークンを取得します。
取得したアップロード資格情報またはSTSトークンを使用して、アップロードインスタンスを初期化します。
アップロード中にキーメッセージを受信するようにコールバックを設定します。
アップロードするファイルのタイプに基づいて、アップロードパラメーターを作成します。 オーディオ、ビデオ、または画像ファイルをアップロードできます。
アップロードを開始します。
説明 画像のアップロードパラメータは、オーディオおよびビデオファイルのアップロードパラメータとは少し異なります。 補助メディア資産はクライアントからアップロードできません。
ステップ1: アップロードの承認を取得する
ApsaraVideo VODのクライアントアップロードSDKには、アップロードURLとアップロード資格情報を使用する認証方法と、STSトークンを使用する認証方法の2つが用意されています。 詳細については、「資格情報とSTSの比較」をご参照ください。
実行結果
取得したアップロードURLと資格情報またはSTSトークンは、アップロードインスタンスを初期化するための入力として使用されます。
手順2: アップロードインスタンスの初期化
アップロードURLと資格情報またはSTSトークンを使用して、ビジネスニーズに基づいてアップロードインスタンスを初期化します。
(推奨) 方法1: アップロードURLと資格情報を使用してアップロードインスタンスを初期化する
1. アップロードインスタンスVODUploadClient
の初期化コールバックを宣言します。
uploader = new VODUploadClientImpl(getApplicationContext());
2. アップロードインスタンスVODUploadClient
を初期化します。
説明 アップロードURLと資格情報を使用する場合は、init
メソッドを呼び出してアップロードインスタンスを初期化します。
setUploadAuthAndAddress(uploadFileInfo, uploadAuth, uploadAddress)
メソッドでアップロードURLと認証情報を指定し、アップロードの開始時に発生するonUploadStarted
コールバックでメソッドを呼び出します。
アップロードURLと資格情報を使用してオーディオまたはビデオファイルをアップロードするときに有効期限が切れると、onUploadTokenExpired
コールバックが発生します。 resumeWithAuth(uploadAuth)
メソッドを呼び出して、新しいアップロード資格情報を使用してアップロードを再開します。
表示コード
// create VODUploadClient
final VODUploadClient uploader = new VODUploadClientImpl(getApplicationContext());
// setup callback
VODUploadCallback callback = new VODUploadCallback(){
@Override
public void onUploadSucceed(UploadFileInfo info) {
OSSLog.logDebug("onsucceed ------------------" + info.getFilePath());
}
@Override
public void onUploadFailed(UploadFileInfo info, String code, String message) {
OSSLog.logError("onfailed ------------------ " + info.getFilePath() + " " + code + " " + message);
}
@Override
public void onUploadProgress(UploadFileInfo info, long uploadedSize, long totalSize) {
OSSLog.logDebug("onProgress ------------------ " + info.getFilePath() + " " + uploadedSize + " " + totalSize);
}
@Override
public void onUploadTokenExpired() {
OSSLog.logError("onExpired ------------- ");
// Call the RefreshUploadVideo operation to update the upload credential.
uploadAuth = "The new upload credential";
uploader.resumeWithAuth(uploadAuth);
}
@Override
public void onUploadRetry(String code, String message) {
OSSLog.logError("onUploadRetry ------------- ");
}
@Override
public void onUploadRetryResume() {
OSSLog.logError("onUploadRetryResume ------------- ");
}
@Override
public void onUploadStarted(UploadFileInfo uploadFileInfo) {
OSSLog.logError("onUploadStarted ------------- ");
// The value of the uploadAuth parameter is the upload credential and the value of the uploadAddress parameter is the upload URL.
uploader.setUploadAuthAndAddress(uploadFileInfo, uploadAuth, uploadAddress);
}
};
// Initialize the upload instance.
uploader.init(callback);
方法2: STSトークンを使用してアップロードインスタンスを初期化する
1. アップロードインスタンスVODUploadClient
の初期化コールバックを宣言します。
uploader = new VODUploadClientImpl(getApplicationContext());
2. アップロードインスタンスVODUploadClient
を初期化します。
説明 STSトークンを使用する場合は、init(accessKeyId, accessKeySecret, secretToken, expireTime, callback)
メソッドを呼び出して、アップロードインスタンスを初期化します。
取得したSTSトークンに初期化パラメーターsecretTokenを設定します。
STSトークンの有効期限が切れると、OnUploadTokenExpired
コールバックが発生します。 resumeWithToken(accessKeyId, accessKeySecret, secretToken, expireTime)
メソッドを呼び出して、新しいSTSトークンを使用してアップロードを再開します。
コードを表示
// create VODUploadClient object
uploader = new VODUploadClientImpl(getApplicationContext());
// setup callback
// setup callback
VODUploadCallback callback = new VODUploadCallback() {
public void onUploadSucceed(UploadFileInfo info) {
OSSLog.logDebug("onsucceed ------------------" + info.getFilePath());
}
public void onUploadFailed(UploadFileInfo info, String code, String message) {
OSSLog.logError("onfailed ------------------ " + info.getFilePath() + " " + code + " " + message);
}
public void onUploadProgress(UploadFileInfo info, long uploadedSize, long totalSize) {
OSSLog.logDebug("onProgress ------------------ " + info.getFilePath() + " " + uploadedSize + " " + totalSize);
}
}
}
public void onUploadTokenExpired() {
OSSLog.logError("onExpired ------------- ");
// Call the resumeWithToken method after a new STS token is obtained.
uploader.resumeWithToken(accessKeyId, accessKeySecret, secretToken, expireTime);
}
public void onUploadRetry(String code, String message) {
OSSLog.logError("onUploadRetry ------------- ");
}
public void onUploadRetryResume() {
OSSLog.logError("onUploadRetryResume ------------- ");
}
public void onUploadStarted(UploadFileInfo uploadFileInfo) {
OSSLog.logError("onUploadStarted ------------- ");
}
};
// Initialize the upload instance. If the STS token expires, the onUploadTokenExpired callback is fired. Call the resumeWithToken method to resume the upload by using a new STS token. By default, resumable upload is supported.
uploader.init(accessKeyId, accessKeySecret, secretToken, expireTime, callback);
手順3: アップロード状態コールバックのクラスを設定する
VODUploadCallbackオブジェクトを設定します。 オブジェクトは、アップロード状態コールバックのクラスに属します。 次のコールバックメソッドを設定する必要があります。
コードを表示
/**
This callback is fired when the upload succeeds.
@param info The information about the file that you upload.
*/
void onUploadSucceed(UploadFileInfo info);
/**
This callback is fired when the upload fails.
@param info The information about the file that you upload.
@param code The error code.
@param message The error message.
*/
void onUploadFailed(UploadFileInfo info, String code, String message);
/**
This callback is fired when the default or custom upload progress is reached.
@param fileInfo The information about the file that you upload.
@param uploadedSize The size of uploaded parts.
@param totalSize The total size of the file that you upload.
*/
void onUploadProgress(UploadFileInfo fileInfo, long uploadedSize, long totalSize);
/**
This callback is fired when the upload URL and credential expire.
If you use the upload URL and credential to upload a file, call the resumeWithAuth method to resume the upload.
If you use STS tokens to upload media files, call the resumeWithToken method to resume the upload.
*/
void onUploadTokenExpired();
/**
This callback is fired when the system retries the upload.
*/
void onUploadRetry(String code, String message);
/**
This callback is fired when the system resumes the upload after the upload retry is complete.
*/
void onUploadRetryResume ();
/**
This callback is fired when the upload starts.
If you use the upload URL and credential to upload a file, call the setUploadAuthAndAddress:uploadAuth:uploadAddress: method to specify the upload URL and credential.
@param fileInfo The information about the file that you upload.
*/
void onUploadStarted(UploadFileInfo fileInfo);
ステップ4: アップロード要求関数を作成する
オーディオまたはビデオファイルのパラメータ
アップロードリストにオーディオまたはビデオファイルを追加するアップロード要求関数を作成します。
String filePath = "Path of the file";
VodInfo vodInfo = new VodInfo();
vodInfo.setTitle("Title" + index);
vodInfo.setDesc("Description" + index);
vodInfo.cateId (19);
vodInfo.tags("sports");
uploader.addFile(filePath,vodInfo);
画像ファイルのパラメータ
画像ファイルをアップロードリストに追加するアップロード要求関数を作成します。
String filePath = "Path of the image";
VodInfo vodInfo = new VodInfo();
vodInfo.setTitle("Title" + index);
vodInfo.setDesc("Description" + index);
vodInfo.cateId (19);
vodInfo.tags("sports");
uploader.addFile(filePath,vodInfo);
vodInfoの説明
// The title.
String title;
// The tags.
List tags;
// The description.
String desc;
// The category ID.
idInteger cateId;
// The URL of the thumbnail. The value must be a complete URL that starts with https://.
String coverUrl;
説明 アップロードするファイルを追加すると、SDKは次の構造を持つUploadFileInfo
オブジェクトにファイルをカプセル化します。
// The local path of the file.
String filePath;
//endpoint
String endpoint;
//bucket
String bucket;
//object
String object;
//VodInfo
VodInfo vodInfo;
ステップ5: アップロードを開始する
start()
メソッドを呼び出して、アップロードを開始します。
void start();
このメソッドが呼び出されると、onUploadStarted
コールバックが発生します。 アップロードURLと資格情報を使用してファイルをアップロードする場合は、このコールバックでアップロードURLと資格情報を指定します。 サンプルコード:
void setUploadAuthAndAddress(UploadFileInfo uploadFileInfo, String uploadAuth, String uploadAddress)
onUploadProgress
コールバックを起動して、アップロード開始後にアップロードの進行状況を同期します。
ファイルがアップロードされた場合、onUploadSucceed
コールバックを起動してアップロード結果を返します。 コールバックパラメーターには、videoId
とimageUrl
が含まれます。
実行結果
ビデオがアップロードされると、videoIdパラメーターが返されます。 videoIdパラメーターの値は、ビデオIDを示します。 次に、ビデオを再生するためのストリーミングURLを取得する必要があります。 詳細については、「再生資格情報を使用したビデオの再生」をご参照ください。
イメージがアップロードされると、imageUrlパラメーターが返されます。 imageUrlパラメーターの値は、イメージURLを示します。 URL署名が有効になっている場合、イメージURLは特定の期間後に期限切れになります。 詳細については、「URL署名の設定」をご参照ください。
高度な機能
キュー管理
アップロードインスタンスVODUploadClient
を使用すると、アップロードする複数のファイルを順番に追加できます。 次の方法を使用して、アップロードリストを管理できます。
説明 VODUploadClientオブジェクトを使用すると、一度に複数のファイルをアップロードできます。 ただし、アップロードURLと資格情報を使用してメディアファイルをアップロードする場合は、各ファイルの構成を個別に設定する必要があります。 一度に複数のファイルをアップロードするためのコードは複雑です。 そのため、一度に1つのファイルをアップロードリストに追加することをお勧めします。
アップロードリストからファイルを削除します。 削除するファイルがアップロード中の場合、システムはアップロードをキャンセルし、リスト内の次のファイルのアップロードを自動的に開始します。
void deleteFile(int index)
アップロードリストをクリアします。 リスト内のファイルがアップロードされている場合、システムはアップロードをキャンセルします。
void clearFiles()
アップロードリストを照会します。
List<UploadFileInfo> listFiles()
アップロードリストから削除せずに、アップロードリスト内のファイルをキャンセル済みとしてマークします。 キャンセルするファイルがアップロード中の場合、システムはアップロードをキャンセルし、リスト内の次のファイルのアップロードを自動的に開始します。
cancelFile(int index)
キャンセルされたファイルを再開し、自動的にファイルのアップロードを開始します。
resumeFile(int index)
アップロード管理
次の方法を使用して、アップロードインスタンスVODUploadClient
のアップロードを制御できます。
コールバック管理
アップロードインスタンスVODUploadClient
に対して、次のコールバックが発生する可能性があります。
onUploadFailed
アップロードが失敗すると、onUploadFailed
コールバックが発生します。 code
およびmessage
コールバックパラメーターに基づいて、障害の原因を確認できます。 さらに、プロンプトがwebページに表示されます。 エラーコードの詳細については、「エラーコード」および「例外処理」をご参照ください。
onUploadTokenExpired
onUploadTokenExpired
コールバックは、アップロード資格情報の有効期限が切れると発生します。 AppServerにリクエストを送信して、新しいアップロード資格情報を取得し、新しいアップロード資格情報を使用してアップロードを再開するメソッドを呼び出します。
説明 コールバックで新しいアップロード資格情報を指定する必要があります。
uploadRetry
アップロードがタイムアウトすると、uploadRetry
コールバックが発生し、システムは自動的にファイルのアップロードを再試行します。 webページでプロンプトを受け取るか、cancel
メソッドを呼び出してアップロードをキャンセルできます。 さらに、maxRetryCount
パラメーターを設定して、再試行の最大数を指定できます。 再試行の結果、アップロードを再開できることが示された場合、uploadRetryResume
コールバックが起動され、アップロードが再開されます。
アップロードタイムアウト
アップロードインスタンスVODUploadClient
を使用すると、アップロードがタイムアウトしたときの最大再試行回数を設定できます。
/**
Set the timeout period and the maximum number of retries when an upload times out. The default value of the maximum number of retries is INT_MAX.
*/
void setVodHttpClientConfig(VodHttpClientConfig var);
マルチパートアップロード
アップロードインスタンスVODUploadClient
では、マルチパートアップロードのしきい値としてファイルサイズを指定できます。 アップロードするファイルのサイズがpartSizeパラメーターに指定された値を超える場合、マルチパートアップロードが有効になります。
/**
Specify the size of each part in multipart upload. Default value: 1024 × 1024. Unit: bytes. If the size of a file to be uploaded exceeds the value specified for the partSize parameter, multipart upload is enabled.
*/
void setPartSize(long partSize);
ストレージアドレス構成
アップロードインスタンスVODUploadClient
を使用して、特定の保存場所にファイルをアップロードできます。 保存場所が指定されていない場合、ファイルはデフォルトの保存場所にアップロードされます。 特定の保存場所にファイルをアップロードする必要がある場合は、事前に保存場所を有効にして設定する必要があります。 詳細については、「概要」をご参照ください。
/**
* Specify a storage location for the file. Log on to the ApsaraVideo VOD console. In the left-side navigation pane, choose Configuration Management > Media Management > Storage. On the Storage page, you can view the storage location.
*/
void setStorageLocation(String storageLocation);
トランスコード
アップロードインスタンスVODUploadClient
では、コード変換テンプレートグループのIDを指定してコード変換を設定できます。
/**
* Set the ID of the transcoding template group. Log on to the ApsaraVideo VOD console. In the left-side navigation pane, choose Configuration Management > Media Processing > Transcoding Template Groups. On the Transcoding Template Groups page, you can view the ID of the transcoding template group.
*/
void setTemplateGroupId(String templateGroupId);
重要 クライアントアップロードSDKを使用してファイルをアップロードする場合、ワークフローを使用してトランスコードを設定することはできません。
再開可能なアップロード
クライアントのアップロードSDKは再開可能なアップロードをサポートします。 次のメソッドの値がYESであることを確認するだけです。
/**
* Specify whether to record the upload progress for a resumable upload. Default value: YES. The upload SDK automatically resumes an interrupted upload only when the parameter is set to YES. If you set the parameter to NO, the resumable upload feature is disabled.
*/
void setRecordUploadProgressEnabled(boolean var1);
リージョン設定
アップロードインスタンスVODUploadClient
では、ApsaraVideo VODサービスのリージョンを設定できます。
/**
Specify the region of the ApsaraVideo VOD service. Default value: cn-shanghai.
*/
void setRegion(String var);