このトピックでは、Android SDK を使用してローカルのメディアファイルを ApsaraVideo VOD ストレージにアップロードする方法について説明します。
SDK の統合
1. Android SDK のインストール
Android SDK の依存関係をプロジェクトの app/build.gradle ファイルに追加します。
dependencies {
implementation 'com.aliyun.video.android:upload:1.7.3'
}
Alibaba Cloud Maven リポジトリの URL をルートディレクトリの build.gradle ファイルに追加します。
allprojects {
repositories {
maven { url "https://maven.aliyun.com/nexus/content/repositories/releases" }
}
}
2. OSS Android SDK のインストール
Android 用 VOD アップロード SDK は OSS SDK に依存しています。OSS Android SDK もインストールする必要があります。詳細については、「OSS Android SDK のインストール」をご参照ください。依存関係を Gradle プロジェクトに追加します。
基本設定
2. アップロードインスタンスの初期化
アップロード URL と認証情報または STS トークンのいずれかを使用して、アップロードインスタンスを初期化します。
アップロード URL と認証情報を使用する方法 (推奨)
アップロードインスタンス (VODUploadClient) の初期化コールバックを宣言します。
uploader = new VODUploadClientImpl(getApplicationContext());
アップロードインスタンス (VODUploadClient) を初期化します。
説明 アップロード URL と認証情報を使用する方法では、init メソッドを呼び出して初期化を実行します。
アップロードの開始後にトリガーされる onUploadStarted コールバックで、setUploadAuthAndAddress(uploadFileInfo, uploadAuth, uploadAddress) メソッドを呼び出してアップロード URL と認証情報を設定します。
オーディオまたはビデオファイルをアップロードする際に、アップロード URL と認証情報の有効期限が切れると、onUploadTokenExpired コールバックがトリガーされます。 新しいアップロード認証情報をセットしてアップロードを再開するには、resumeWithAuth(uploadAuth) メソッドを呼び出す必要があります。
コードを展開して表示
// VODUploadClient の作成
final VODUploadClient uploader = new VODUploadClientImpl(getApplicationContext());
// コールバックの設定
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 ------------- ");
// RefreshUploadVideo 操作を呼び出して、アップロード認証情報を更新します。
uploadAuth = "Set this to the value of the refreshed 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 ------------- ");
// uploadAuth と uploadAddress は、アップロード認証情報と URL です。
uploader.setUploadAuthAndAddress(uploadFileInfo, uploadAuth, uploadAddress);
}
};
// アップロードの初期化
uploader.init(callback);
STS トークンを使用する方法
アップロードインスタンス (VODUploadClient) の初期化コールバックを宣言します。
uploader = new VODUploadClientImpl(getApplicationContext());
アップロードインスタンス (VODUploadClient) を初期化します。
説明 STS トークンを使用する方法では、init(accessKeyId, accessKeySecret, secretToken, expireTime, callback) メソッドを呼び出して初期化を実行します。
secretToken 初期化パラメーターは、リクエストした一時的な STS 認証情報です。
一時的な STS 認証情報の有効期限が切れると、OnUploadTokenExpired コールバックがトリガーされます。resumeWithToken(accessKeyId, accessKeySecret, secretToken, expireTime) メソッドを呼び出して新しい STS 認証情報を設定し、アップロードを再開する必要があります。
コードを展開して表示
// VODUploadClient オブジェクトの作成
uploader = new VODUploadClientImpl(getApplicationContext());
// コールバックの設定
// コールバックの設定
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 ------------- ");
// 新しい STS トークンを取得した後、resumeWithToken を呼び出します
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 ------------- ");
}
};
// 初期化します。一時的な認証情報が有効期限切れになった場合は、onUploadTokenExpired イベントで resumeWithToken を使用して更新します。デフォルトでは、再開可能なアップロードがサポートされています。
uploader.init(accessKeyId, accessKeySecret, secretToken, expireTime, callback);
3. アップロードステータスコールバッククラスの設定
VODUploadCallback オブジェクトを設定します。このオブジェクトは、アップロードステータスのコールバッククラスです。以下のコールバックメソッドを設定できます。
コードを展開して表示
/**
アップロード成功のコールバック。
@param info アップロードされたファイルの情報。
*/
void onUploadSucceed(UploadFileInfo info);
/**
アップロード失敗のコールバック。
@param info アップロードされたファイルの情報。
@param code エラーコード。
@param message エラーメッセージ。
*/
void onUploadFailed(UploadFileInfo info, String code, String message);
/**
アップロード進捗のコールバック。
@param fileInfo アップロードされたファイルの情報。
@param uploadedSize アップロードされた部分のサイズ。
@param totalSize ファイルの合計サイズ。
*/
void onUploadProgress(UploadFileInfo fileInfo, long uploadedSize, long totalSize);
/**
アップロード URL と認証情報が期限切れになった場合のコールバック。
アップロード URL と認証情報を使用する場合、resumeWithAuth メソッドを呼び出してアップロードを続行する必要があります。
STS トークンを使用する場合、resumeWithToken メソッドを呼び出してアップロードを続行する必要があります。
*/
void onUploadTokenExpired();
/**
アップロードリトライのコールバック。
*/
void onUploadRetry(String code, String message);
/**
リトライ後にアップロードを再開する際のコールバック。
*/
void onUploadRetryResume ();
/**
アップロード開始のコールバック。
アップロード URL と認証情報を使用する場合、setUploadAuthAndAddress:uploadAuth:uploadAddress: メソッドを呼び出してアップロード URL と認証情報を設定する必要があります。
@param fileInfo アップロードされたファイルの情報。
*/
void onUploadStarted(UploadFileInfo fileInfo);
4. アップロードリクエスト関数の作成
オーディオおよびビデオファイルのパラメーター
アップロードリクエスト関数を作成して、音声ファイルまたは動画ファイルをアップロードリストに追加します。
String filePath = "ファイルパス";
VodInfo vodInfo = new VodInfo();
vodInfo.setTitle("タイトル" + index);
vodInfo.setDesc("説明。" + index);
vodInfo.cateId (19);
vodInfo.tags("スポーツ");
uploader.addFile(filePath,vodInfo);
イメージファイルのパラメーター
アップロードリクエスト関数を作成して、イメージファイルをアップロードリストに追加します。
String filePath = "イメージファイルのパス";
VodInfo vodInfo = new VodInfo();
vodInfo.setTitle("タイトル" + index);
vodInfo.setDesc("説明。" + index);
vodInfo.cateId (19);
vodInfo.tags("スポーツ");
uploader.addFile(filePath,vodInfo);
vodInfo の説明
// タイトル。
String title;
// タグ。
List tags;
// 説明。
String desc;
// カテゴリ。
idInteger cateId;
// サムネイル URL。https:// で始まる完全な URL である必要があります。
String coverUrl;
説明 ファイルを追加すると、SDK はファイルを UploadFileInfo オブジェクトにカプセル化します。構造は次のとおりです。
// ファイルのローカルパス。
String filePath;
// エンドポイント。
String endpoint;
// バケット。
String bucket;
// オブジェクト。
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` を取得した後、動画を再生するには再生 URL を取得する必要があります。詳細については、「再生認証情報の取得」をご参照ください。
イメージがアップロードされると、`imageUrl` が返されます。URL 署名を有効にすると、`imageUrl` には生存時間 (TTL) が設定されます。詳細については、「URL 署名」をご参照ください。
6. インスタンスの破棄
release() メソッドを呼び出してアップロードインスタンスを破棄します。これにより、メモリとスレッドのリークを防ぎます。
void release();
高度な機能
アップロードアクセラレーション
アップロードインスタンス (VODUploadClient) を使用して、アップロードアクセラレーションを設定できます。
GB または TB 単位の大きなファイルをアップロードする必要がある場合や、中国本土からシンガポールストレージリージョンのストレージの場所に動画をアップロードするなどのリージョン間アップロードを実行する場合は、アップロードアクセラレーション機能を有効にできます。この機能を有効にする方法の詳細については、「この機能を有効にする方法」をご参照ください。機能を有効にした後、アップロードインスタンスの `vodInfo` 構成の UserData 文字列に、対応する key-value ペアを追加する必要があります。このペアは JSON 文字列として渡す必要があります。次のサンプルコードに例を示します。
vodInfo.setUserData("{\"Type\":\"oss\",\"Domain\":\"oss-accelerate.aliyuncs.com\"}");
パラメーターの説明
名前 | タイプ | 説明 |
Type | string | 有効にするアップロードアクセラレーションのタイプ。oss のみがサポートされています。 |
Domain | string | ユーザーのバケットのアクセラレーションエンドポイント。 デフォルトのプロトコルは HTTPS です。
説明 機能を有効にした後に割り当てられるアクセラレーションエンドポイント (vod-*******.oss-accelerate.aliyuncs.com など) を使用します。 |
キュー管理
アップロードインスタンス (VODUploadClient) を使用すると、複数のファイルを追加して順次アップロードし、次のメソッドでアップロードキューを管理できます。
説明 VODUploadClient は複数のファイルのアップロードをサポートしていますが、アップロード認証情報と URL を使用する場合は、各ファイルを個別に設定する必要があります。複数ファイルのアップロードのコードの複雑さを軽減するために、アップロードごとに 1 つのファイルのみを追加することを推奨します。
キューからアップロードファイルを削除します。指定されたファイルがアップロード中の場合、アップロードはキャンセルされ、キュー内の次のファイルが自動的にアップロードされます。
void deleteFile(int index)
アップロードキューをクリアします。ファイルがアップロード中の場合、そのアップロードはキャンセルされます。
void clearFiles()
アップロードファイルキューを取得します。
List<UploadFileInfo> listFiles()
ファイルをキャンセル済みとしてマークします。ファイルはアップロードリストに残ります。指定されたファイルがアップロード中の場合、アップロードはキャンセルされ、キュー内の次のファイルが自動的にアップロードされます。
cancelFile(int index)
キャンセルされたファイルのアップロードを再開します。アップロードは自動的に開始されます。
resumeFile(int index)
アップロードコントロール
VODUploadClient アップロードインスタンスは、アップロードをコントロールするための次のメソッドを提供します。
コールバック処理
VODUploadClient アップロードインスタンスは、次のコールバックをサポートしています。
アップロードの失敗
アップロードが失敗した場合、onUploadFailed コールバックがトリガーされます。このコールバックメソッドでは、code および message パラメーターから失敗の原因を確認し、ページにプロンプトを表示できます。エラーコードの詳細については、「エラーコード」および「OSS エラーコード」をご参照ください。
アップロード URL と認証情報の期限切れ
アップロード認証情報が有効期限切れになった場合、onUploadTokenExpired コールバックがトリガーされます。このコールバックメソッドでは、ご利用のアプリサーバーから新しいアップロード認証情報をリクエストし、`resumeWithAuth(uploadAuth)` メソッドを呼び出してアップロードを再開できます。
説明 コールバックで新しいアップロード認証情報を設定する必要があります。
アップロードのタイムアウト
アップロードがタイムアウトした場合、uploadRetry コールバックがトリガーされ、アップロードが自動的にリトライされます。このコールバックメソッドでは、ページにプロンプトを表示するか、cancel メソッドを呼び出してアップロードを停止できます。maxRetryCount プロパティを設定して、リトライの最大回数を指定することもできます。タイムアウトのリトライ後にアップロードを再開できる場合、uploadRetryResume コールバックがトリガーされ、アップロードが続行されます。
タイムアウト処理
アップロードインスタンス (VODUploadClient) を使用して、リトライの最大回数を設定できます。
/**
タイムアウト時の最大リトライ回数を設定します。デフォルト値は INT_MAX です。
*/
void setVodHttpClientConfig(VodHttpClientConfig var);
マルチパートアップロード設定
アップロードインスタンス (VODUploadClient) を使用すると、ファイルサイズのしきい値を設定してマルチパートアップロードを有効にできます。ファイルが partSize に指定されたサイズより大きい場合、ファイルはパート単位でアップロードされます。
/**
パートサイズ。デフォルト値は 1,024 × 1,024 バイトです。ファイルが partSize で指定されたサイズより大きい場合、マルチパートアップロードが使用されます。
*/
void setPartSize(long partSize);
ストレージの場所の指定
アップロードインスタンス (VODUploadClient) を使用して、ファイルのストレージの場所を指定できます。ストレージの場所を指定しない場合、ファイルはデフォルトのストレージの場所にアップロードされます。事前にストレージの場所を有効化または設定する必要があります。詳細については、「ストレージ」をご参照ください。
/**
* ファイルのストレージの場所を指定します。ApsaraVideo VOD コンソールにログインし、[設定管理] > [メディアアセット管理] > [ストレージ] を選択して、ストレージの場所を表示します。
*/
void setStorageLocation(String storageLocation);
トランスコーディングの設定
アップロードインスタンス (VODUploadClient) でトランスコーディングテンプレートグループ ID を指定することで、トランスコーディングを設定できます。
/**
* トランスコーディングテンプレートグループ ID を設定します。ApsaraVideo VOD コンソールにログインし、[設定管理] > [メディア処理] > [トランスコーディングテンプレートグループ] を選択して、トランスコーディングテンプレートグループ ID を表示します。
*/
void setTemplateGroupId(String templateGroupId);
アップロードインスタンス (VODUploadClient) を使用して、ワークフロー ID を指定することでワークフローを設定できます。
/**
* ワークフロー ID を設定します。ApsaraVideo VOD コンソールにログインし、[設定管理] > [メディア処理] > [ワークフロー] を選択して、ワークフロー ID を表示します。
*/
void setWorkflowId(String workflowId);
重要 トランスコーディングテンプレートグループ ID とワークフロー ID の両方を指定した場合、ワークフロー設定が優先されます。
再開可能なアップロード
クライアントサイドアップロード SDK は、再開可能なアップロードをサポートしています。この機能を有効にするには、次のメソッドの値が `YES` であることを確認してください。
/**
* 再開可能なアップロードのためにアップロードの進捗を記録するかどうかを指定します。デフォルト値は YES です。このパラメーターが YES に設定されている場合にのみ、アップロード SDK は再開可能なアップロードを自動的に実装します。このパラメーターを NO に設定すると、再開可能なアップロード機能は無効になります。
*/
void setRecordUploadProgressEnabled(boolean var1);
VOD サービスリージョンの設定
アップロードインスタンス (VODUploadClient) を使用して、ストレージリージョンを設定できます。
/**
VOD リージョン。 デフォルト値は "cn-shanghai" です。
*/
void setRegion(String var);