用戶端上傳是指將用戶端媒體檔案直接上傳到點播儲存。相對於服務端代理上傳,用戶端上傳避免了商務服務器中轉檔案,節省了伺服器資源。
用戶端上傳原理
核心概念
用戶端(App/瀏覽器/小程式)先從 應用伺服器(AppServer)擷取一次性上傳憑證,隨後直接將檔案上傳至阿里雲ApsaraVideo for VOD(基於OSS儲存),全程無需經過伺服器中轉。
上傳核心鏈路包含以下角色:
角色 | 說明 |
用戶端 | 終端使用者的 App 或瀏覽器,整合上傳 SDK。 |
應用伺服器(AppServer) | 後端服務,負責調用VOD API擷取憑證並下發。 |
ApsaraVideo for VOD服務 | 阿里雲ApsaraVideo for VOD服務,簽發上傳憑證並建立媒資ID。 |
OSS儲存 | 實際隱藏檔的Object Storage Service,用戶端直傳目標。 |
為什麼需要應用伺服器(AppServer):AccessKey不可儲存在用戶端。阿里雲AccessKey(AK/SK)擁有帳號級資源操控許可權,內建於App或網頁代碼中易被非法擷取引發雲資源安全風險。
上傳流程
用戶端上傳 SDK封裝了OSS直傳邏輯,檔案無需服務端中轉,因此需通過應用伺服器(AppServer)擷取授權。目前用戶端上傳SDK支援兩種授權方式:上傳地址和憑證方式、STS Token方式。
推薦使用上傳地址和憑證方式,相比 STS Token,其授權更簡單、安全性更高(支援單視頻許可權控制)、參數配置更靈活且冗餘度更高。
上傳地址和憑證方式
方式簡介:用戶端向服務端擷取上傳地址和憑證後直接上傳媒體資源到OSS。
階段一:擷取上傳地址和憑證
用戶端嚮應用服務端(AppServer)發起HTTP請求,攜帶本次上傳的業務參數(如 Title、FileName、CateId、Tags 等媒資中繼資料)。AppServer收到後,使用持有的AK/SK調用VOD的CreateUploadVideo介面。VOD服務返回三個關鍵結果:
UploadAuth:臨時上傳令牌。UploadAddress:目標OSS 路徑(Base 64 編碼)。VideoId:媒資唯一標識。
AppServer將這三者透傳給用戶端。
點播服務在下發上傳地址和憑證時還會自動建立媒資資訊(媒體 ID),用於媒資生命週期管理或ApsaraVideo for Media Processing。請妥善儲存媒體ID,作為媒資管理、音視頻播放、ApsaraVideo for Media Processing等的輸入。
階段二:直傳檔案
用戶端拿到憑證後,調用上傳 SDK 的初始化方法,傳入UploadAuth、UploadAddress、VideoId和本地檔案路徑。SDK內部自動完成:
解析 UploadAddress,得到 OSS Endpoint 和 Object Key。
將檔案按分區上傳至 OSS 儲存,過程支援斷點續傳和進度回調。
整個過程中,檔案直接從用戶端傳到 OSS,不經過AppServer。
階段三:返回上傳結果
OSS 完成檔案上傳後,向用戶端 SDK 返回成功狀態,SDK 觸發 onUploadSucceed 回調,攜帶 VideoId。與此同時,VOD 服務側會自動感知上傳完成,並根據預設的 TemplateGroupId 或 WorkflowId 觸發轉碼和處理流水線。也可配置事件回調以主動接收FileUploadComplete事件通知。
憑證到期處理:UploadAuth有效期間約 3000 秒。大檔案上傳期間若憑證到期,SDK 將觸發onUploadTokenExpired回調。此時用戶端需要重新請求AppServer調用重新整理視頻上傳憑證擷取新憑證後,用戶端再調用resumeWithAuth(newAuth) 介面即可斷點續傳,無需重傳已完成分區。
STS Token方式
方式簡介:使用者應用伺服器向用戶端下發STS Token,用戶端向點播服務擷取上傳地址和憑證,再上傳媒資到OSS。
階段一:擷取STS臨時憑證
用戶端向 AppServer 請求臨時訪問憑證。AppServer 使用 AK/SK 調用阿里雲 STS 的AssumeRole介面,擷取一組有時效限制的 AccessKeyId、AccessKeySecret、SecurityToken(有效期間可設 900~3600 秒),然後返回給用戶端。完整 STS 授權流程請參見上傳授權。
階段二:擷取上傳憑證 + 直傳檔案
用戶端用STS Token 初始化上傳 SDK。SDK 內部會自動攜帶 STS Token 調用 VOD 的 CreateUploadVideo(傳入 Title、FileName 等參數),擷取 UploadAuth + UploadAddress + VideoId,然後自動執行分區上傳。整個過程對開發人員透明,無需手動調用 VOD 介面。
階段三:返回上傳結果
與上傳地址和憑證方式相同。OSS 完成檔案上傳後,SDK 觸發onUploadSucceed 回調,攜帶VideoId。VOD 服務側自動觸發轉碼和處理流水線。也可配置事件回調以接收FileUploadComplete事件通知。
方式對比
用戶端上傳支援兩種授權方式,對應不同的流程:
對比項 | 上傳地址和憑證方式(推薦) | STS Token 方式 |
憑證擷取方 | AppServer調用VOD介面直接擷取。 | AppServer調用STS 介面擷取臨時AK/SK/Token,用戶端再向VOD擷取 |
用戶端職責 | 用憑證初始化 SDK,直接上傳 | 用STS Token初始化 SDK,SDK自動向 VOD 換取憑證後上傳 |
用戶端與雲端互動次數 | 1次(拿憑證後直傳) | 2次(先拿 Token,SDK 再拿憑證) |
許可權粒度 | 單個視頻層級(每個 VideoId 獨立憑證) | Bucket/Object 層級(Token 有效期間內可操作多個檔案) |
適用情境 | 大多數情境,推薦使用 | 已有STS體系的存量專案 |
功能說明
分區上傳
用戶端上傳 SDK 預設採用分區上傳方式(預設分區大小1MB)。SDK 將待上傳的檔案分成多個片段(Part)分別上傳,上傳完成之後將這些 Part 組合成一個完整的 Object。
分區上傳的優勢:
提升大檔案上傳成功率:單個分區失敗只需重傳該分區,不需要從頭開始。
支援斷點續傳:上傳失敗後,可以從最後一個成功上傳的分區繼續。
提升上傳速度:多個分區可並發上傳(Web可通過parallel參數設定,預設為5,移動端自動管理)。
即時進度回調:分區粒度的上傳進度回調,返回已上傳位元組數與檔案總大小。
使用分區上傳時,若上傳失敗可能會產生片段檔案,一般 7 天后會自動清除。還可以調用DeleteMultipartUpload介面手動清除片段檔案。
斷點續傳
如果上傳過程中出現網路錯誤導致上傳失敗,用戶端上傳 SDK 支援從最後一個成功上傳的分區開始繼續上傳,實現斷點續傳效果。
SDK 自動處理斷點續傳。上傳失敗後重新上傳時,會自動從最後一個成功上傳的分區處繼續,無需手動幹預(圖片體積較小,Android SDK對圖片不啟用斷點續傳機制)。
更多功能
功能點 | 說明 |
支援的媒體格式 | 支援的媒體格式請參見支援的媒體格式。支援本地檔案上傳和網路檔案上傳(URL 拉取方式)。 |
檔案大小限制 | 本地檔案:最大支援 48.8 TB 的單個檔案。網路檔案:最大支援 5 GB 的單個檔案。設定 URL 上傳時需要將 URL 編碼後再傳入使用,避免存在特殊字元導致無法上傳。 |
媒資管理 | 支援設定中繼資料,如媒體標題( |
音視頻轉碼 | 支援通過指定轉碼模板組或工作流程設定轉碼,也支援不轉碼。可通過擷取上傳地址和憑證相關介面的參數(如 |
上傳控制 | 包括開始、停止、暫停、恢複。SDK 內部自動完成斷點續傳,無需手動處理。 |
上傳加速 | 需聯絡商務申請開通上傳加速功能。申請開通後,可通過 SDKUserData 參數中的 AccelerateConfig 參數設定。僅支援 SDK 上傳方式,控制台上傳不支援加速。 |
網路切換 | 支援移動網路 3G/4G 與 Wi-Fi 之間切換。為了避免浪費 3G/4G 網路下的流量,切換到 3G/4G 網路時,可以調用 |
事件通知 |
支援的平台與版本
用戶端上傳 SDK 支援以下平台:
平台 | 語言 | 最低系統要求 | 相關文檔 |
Web | JavaScript | 支援PC 瀏覽器與移動端H5 | |
Android | Java/kotlin | Android 4.0 及以上 | |
iOS | Objective-C | iOS 8.0 及以上 | |
微信小程式 | JavaScript | 基於微信小程式架構 |
各端 SDK 的詳細版本變更記錄請參見上傳 SDK 發布歷史。
計費說明
媒資上傳到ApsaraVideo for VOD不產生額外費用。相關費用來源於使用的阿里雲ApsaraVideo for VOD服務資源。
計費項目 | 說明 |
儲存費用 | 上傳完成後的媒體檔案儲存費用,按儲存量和時間長度計費。 |
流量費用 | 上傳流量免費(從用戶端到ApsaraVideo for VOD的入方向流量不計費)。下行播放流量另計。 |
轉碼費用 | 如上傳後觸發轉碼,按輸出檔案時間長度和轉碼規格計費。不轉碼則不產生。 |
上傳加速費用 | 開通並使用上傳加速功能時,按加速流量額外計費。具體聯絡商務諮詢。 |