全部產品
Search
文件中心

ApsaraVideo VOD:使用Android SDK上傳檔案

更新時間:Feb 10, 2026

本文介紹如何使用Android SDK將媒體檔案從本地上傳至點播儲存。

前提條件

  • 您的Android終端系統版本為4.0及以上版本。

  • 支援範圍:Android 4.0(API 14)及以上版本。

使用限制

  • 目前Android SDK 只支援上傳音、視頻,不支援上傳輔助媒資。

整合SDK

1、安裝Android SDK

在專案的app/build.gradle檔案中加入Android SDK的依賴項。

dependencies {
    implementation 'com.aliyun.video.android:upload:1.7.4'
}

在根目錄下的build.gradle檔案增加阿里雲Maven倉庫地址。

allprojects {
    repositories {
        maven { url "https://maven.aliyun.com/nexus/content/repositories/releases" }
    }
}

2、安裝OSS Android SDK

點播上傳Android SDK依賴OSS SDK,您需要額外安裝OSS Android SDK詳細資料,請參見安裝OSS Android SDK,同樣在Gradle專案中添加依賴項。

基礎設定

1、擷取憑證

請先瞭解用戶端上傳的整體上傳流程,並根據上傳的授權方式部署對應的授權服務:

  1. 選擇使用上傳地址和憑證方式, 請在授權服務中擷取上傳地址和憑證

  2. 選擇使用STS Token方式,請在授權服務中擷取STS Token

2、初始化上傳執行個體

請根據業務需求選擇用上傳地址和憑證方式STS Token方式初始化上傳執行個體。

上傳地址和憑證方式(推薦)

  1. 聲明上傳執行個體(VODUploadClient)初始化回調。

    uploader = new VODUploadClientImpl(getApplicationContext());
  2. 初始化上傳執行個體(VODUploadClient)。

    說明
    • 上傳地址和憑證方式調用init方法初始化。

    • 在上傳開始後觸發的onUploadStarted回調中調用setUploadAuthAndAddress(uploadFileInfo, uploadAuth, uploadAddress)方法設定上傳地址和憑證。

    • 音視頻上傳情境下,如果上傳地址和憑證到期,會觸發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 ------------- ");
            //重新重新整理上傳憑證:RefreshUploadVideo。
            uploadAuth = "此處需要設定重新重新整理憑證之後的值";
            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即為上傳憑證和地址。
            uploader.setUploadAuthAndAddress(uploadFileInfo, uploadAuth, uploadAddress);
        }
    };
    //上傳初始化
    uploader.init(callback);

STS Token方式

  1. 聲明上傳執行個體(VODUploadClient)初始化回調。

    uploader = new VODUploadClientImpl(getApplicationContext());
  2. 初始化上傳執行個體(VODUploadClient)。

    說明
    • STS方式調用init(accessKeyId, accessKeySecret, secretToken, expireTime, callback)方法初始化,

    • 初始化參數secretToken是請求擷取的臨時STS憑證。

    • 當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 ------------- ");
                        //重新擷取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);
/**
 上傳地址和憑證到期回調
 上傳地址和憑證方式上傳需要調用resumeWithAuth方法繼續上傳
 STS方式上傳需要調用resumeWithToken方法繼續上傳
 */
 void onUploadTokenExpired();
/**
 上傳開始重試回調
 */
 void onUploadRetry(String code, String message);
/**
 上傳結束重試,繼續上傳回調
 */
 void onUploadRetryResume ();
/**
 開始上傳回調
 上傳地址和憑證方式上傳需要調用setUploadAuthAndAddress:uploadAuth:uploadAddress:方法設定上傳地址和憑證
 @param fileInfo 上傳檔案資訊
 */
  void onUploadStarted(UploadFileInfo fileInfo);

4、構造上傳請求函數

音視頻檔案參數

構造添加音視頻檔案到上傳列表的上傳請求函數。

String filePath = "檔案地址";
VodInfo vodInfo = new VodInfo();
vodInfo.setTitle("標題" + index);
vodInfo.setDesc("描述." + index);
vodInfo.cateId (19);
vodInfo.tags("sports");
uploader.addFile(filePath,vodInfo);

圖片檔案參數

構造添加圖片檔案到上傳列表的上傳請求函數。

String filePath = “圖片檔案地址”;
VodInfo vodInfo = new VodInfo();
vodInfo.setTitle(“標題” + index);
vodInfo.setDesc(“描述.” + index);
vodInfo.cateId (19);
vodInfo.tags(“sports”);
uploader.addFile(filePath,vodInfo);

vodInfo說明

//標題
String title;
//標籤
List tags;
//描述
String desc;
//分類
idInteger cateId;
//封面url(完整的URL https://)
String coverUrl;
說明

添加檔案後,SDK會將待上傳檔案封裝為UploadFileInfo對象,具體結構如下:

//檔案本地路徑
String filePath;
//endpoint
String endpoint;
//bucket
String bucket;
//object
String object;
//VodInfo
VodInfo vodInfo;

5、開始上傳

  1. 調用start()方法開始上傳。

    void start();

    該方法調用後,會觸發onUploadStarted回調。如果通過上傳地址和憑證方式上傳,需要在該回調方法中設定上傳地址和憑證。範例程式碼如下:

    void setUploadAuthAndAddress(UploadFileInfo uploadFileInfo, String uploadAuth, String uploadAddress)

  2. 檔案開始上傳後,onUploadProgress回調開始同步上傳進度。

  3. 檔案上傳成功後,onUploadSucceed回調會返回上傳結果。回調包含上傳結果的videoIdimageUrl屬性。

執行結果

  • 視頻上傳成功後會返回videoId作為視頻ID,拿到videoId之後需要擷取播放地址進行播放。更多資訊,請參見擷取播放憑證

  • 圖片上傳完成後會返回imageUrl,開啟URL鑒權後imageUrl會有到期時間。更多資訊,請參見URL鑒權

6、銷毀

調用release()銷毀上傳執行個體,避免記憶體及線程泄漏。

void release();

進階功能

上傳加速

上傳執行個體(VODUploadClient)支援設定加速上傳。

當您需要上傳較大檔案(GB、TB層級)或進行跨地區上傳(比如在中國內地將視頻上傳到新加坡儲存地區的儲存地址)時,您可以啟用上傳加速功能。詳情請參見開通方式。開通後需要您在上傳執行個體的vodInfo配置中的UserData字串賦值增加相應的key-value值(以Jsontring的方式傳遞)。樣本如下:

vodInfo.setUserData("{\"Type\":\"oss\",\"Domain\":\"oss-accelerate.aliyuncs.com\"}");

參數描述

名稱

類型

說明

Type

string

開啟上傳加速的類型(僅支援oss)。

Domain

string

使用者bucket的加速地址(預設為https)。

說明

使用開通後分配的一個加速地址,例如:vod-*******.oss-accelerate.aliyuncs.com。

隊列管理

上傳執行個體(VODUploadClient)支援添加多個檔案順序上傳,並提供了以下方法管理上傳隊列:

說明

儘管VODUploadClient支援多檔案上傳,如果使用上傳憑證和上傳地址方式上傳,每個檔案還是需要單獨設定。基於多檔案上傳代碼複雜度的考慮,建議只添加單檔案上傳。

  • 從隊列中刪除上傳檔案。如果待刪除的檔案正在上傳中,則取消上傳並自動上傳下一個檔案。

    void deleteFile(int index)
  • 清空上傳隊列。如果有檔案在上傳,則取消上傳。

    void clearFiles()
  • 擷取上傳檔案隊列。

    List<UploadFileInfo> listFiles()
  • 將檔案標記為取消,檔案仍保留在上傳列表中。如果待取消的檔案正在上傳中,則取消上傳並自動上傳下一個檔案。

    cancelFile(int index)
  • 恢複已取消上傳的檔案,並自動開始上傳。

    resumeFile(int index)

上傳控制

上傳執行個體(VODUploadClient)支援以下上傳控制方法:

  • 停止上傳。如果有檔案正在上傳中,則取消上傳。

    void stop();
    說明

    停止上傳後如需恢複上傳,請調用resumeFile恢複待上傳檔案,或者清空隊列後重新添加檔案上傳。

  • 暫停上傳。

    void pause();
  • 恢複上傳。

    void resume();

回調處理

上傳執行個體(VODUploadClient)支援以下回調:

  • 上傳失敗

    上傳失敗時,會觸發onUploadFailed回調。在該回調方法中,可以通過codemessage查看具體原因,並在頁面上提示。更多錯誤碼資訊,請參見錯誤碼錶OSS錯誤碼

  • 上傳地址和憑證到期

    上傳憑證到期,會觸發onUploadTokenExpired回調。在該回調方法中,可以向AppServer重新請求新的上傳憑證,並調用以下方法繼續上傳。

    說明

    需要在回調中設定重新整理後的上傳憑證。

  • 上傳逾時

    上傳逾時,會觸發uploadRetry回調並自動重試。在該回調方法中,可以在頁面上給予提示或者調用cancel方法停止上傳。此外,可以設定maxRetryCount屬性,指定最大重試次數。逾時重試可以繼續上傳時,會觸發uploadRetryResume回調並恢複上傳。

逾時處理

上傳執行個體(VODUploadClient)支援設定最大逾時次數:

/**
配置最大逾時重試次數,預設值INT_MAX,逾時時間
 */
void setVodHttpClientConfig(VodHttpClientConfig var);

分區上傳設定

上傳執行個體(VODUploadClient)支援設定檔案大小來控制是否需要啟用分區上傳。如果檔案超過partSize設定的大小就會採用分區上傳。

/**
 分區大小,預設值1024 * 1024。單位位元組。如果檔案超過partSize設定的大小就會採用分區上傳。
*/
void setPartSize(long partSize);

指定儲存地址

上傳執行個體(VODUploadClient)支援指定上傳檔案的儲存地址。不指定時檔案上傳到預設儲存地址。儲存地址需要提前啟用或配置。更多資訊請參見儲存說明

/**
* 指定檔案的儲存地址。登入點播控制台,選擇組態管理 > 媒資管理配置 > 儲存管理查看儲存地址。
*/
void setStorageLocation(String storageLocation);

設定轉碼

上傳執行個體(VODUploadClient)支援通過指定轉碼模板組ID設定轉碼。

/**
* 設定轉碼模板組Id。登入點播控制台,選擇組態管理 > ApsaraVideo for Media Processing配置 > 轉碼模板組,查看轉碼模板組ID。
*/
void setTemplateGroupId(String templateGroupId);

上傳執行個體(VODUploadClient)支援通過指定工作流程ID設定工作流程。

/**
* 設定工作流程Id。登入點播控制台,選擇組態管理 > ApsaraVideo for Media Processing配置 > 工作流程管理,查看工作流程ID。
*/
void setWorkflowId(String workflowId);
重要

同時設定轉碼模板組ID和工作流程ID時,以工作流程配置為準。

斷點續傳

用戶端上傳SDK支援斷點續傳。使用者僅需保證以下方法的值為YES。

/**
 * 是否記錄上傳進度(斷點續傳),預設值YES。僅當參數值設為YES時上傳SDK內部自動實現斷點續傳。如果設定為NO,斷點續傳功能為關閉狀態。
 */
void setRecordUploadProgressEnabled(boolean var1);

設定點播服務地區

上傳執行個體(VODUploadClient)支援設定儲存地區。

/**
 vod region,預設值"cn-shanghai"。
 */
void setRegion(String var);