全部產品
Search
文件中心

ApsaraVideo VOD:多視頻源支援

更新時間:Sep 10, 2026

本文介紹AliPlayerKit支援的多種視頻源類型及其使用方法。

概念介紹

什麼是視頻源?

視頻源 (Video Source) 是播放器播放視頻的資料來源,定義了視頻資源的擷取方式和授權機制。

AliPlayerKit 支援 3 種視頻源類型:

視頻源類型

授權方式

適用情境

VidAuth

VID + 播放憑證

推薦,大多數生產環境。

VidSts

VID + STS 臨時憑證

高安全性情境。

URL

直接 URL 地址

公開資源、測試示範。

如何選擇視頻源類型?

根據業務情境和安全需求選擇合適的視頻源類型:

需求

推薦類型

說明

需要授權驗證

VidAuth(推薦)

授權機制簡單,易於整合。

高安全性要求

VidSts

臨時憑證,支援精細許可權控制。

公開視頻資源

URL

無需授權,使用簡單。

功能特性

解決問題

  • 不同視頻源類型配置方式不統一。

  • 授權憑證管理複雜。

  • 缺乏統一的視頻源驗證機制。

  • 難以區分不同類型的視頻資源。

核心價值

特性

說明

統一抽象

所有視頻源類型繼承自 VideoSource 基類,介面統一。

工廠建立

通過 VideoSourceFactory 簡化建立過程,自動驗證參數。

型別安全

使用 @SourceType 註解確保型別安全。

配置驗證

isValid() 方法驗證配置有效性。

核心能力

能力

說明

VidAuth 播放

通過 VID 和播放憑證進行授權播放。

VidSts 播放

通過 VID 和 STS 臨時憑證進行授權播放。

URL 播放

通過直接 URL 地址播放視頻。

參數驗證

建立時自動驗證必需參數。

唯一標識

每個視頻源有唯一的 MediaId,用於播放器池複用。

視頻源類型詳解

VidAuth 模式(推薦)

通過視頻 ID (VID) 和播放憑證 (PlayAuth) 進行授權播放。

適用情境:

  • 需要授權驗證的視頻資源。

  • 大多數生產環境的視頻播放。

  • 需要簡單且安全的授權方式。

特點:

  • 授權機制簡單,易於整合。

  • 提供基本的安全保障。

  • 推薦用於大多數業務情境。

參數說明:

參數

類型

必需

說明

vid

String

是

視頻唯一識別碼。

playAuth

String

是

播放授權碼。

使用樣本:

// 建立 VidAuth 類型的視頻源
VideoSource.VidAuthSource videoSource = VideoSourceFactory.createVidAuthSource(
    "your_video_id",      // 視頻 ID
    "your_play_auth"      // 播放憑證
);

// 建立播放資料
AliPlayerModel model = new AliPlayerModel.Builder()
    .videoSource(videoSource)
    .build(); 

VidSts 模式

通過視頻 ID (VID) 和阿里雲 STS (Security Token Service) 令牌進行播放,提供更高的安全性和存取控制。

適用情境:

  • 需要臨時訪問憑證的情境。

  • 高安全性要求的視頻資源。

  • 需要精細存取控制的情境。

特點:

  • 使用臨時訪問憑證,安全性高。

  • 支援存取權限的精細控制。

  • 適合高安全性要求的情境。

參數說明:

參數

類型

必需

說明

vid

String

是

視頻唯一識別碼。

accessKeyId

String

是

存取金鑰 ID。

accessKeySecret

String

是

存取金鑰密文。

securityToken

String

是

安全性權杖。

region

String

否

地區資訊。

使用樣本:

// 建立 VidSts 類型的視頻源
VideoSource.VidStsSource videoSource = VideoSourceFactory.createVidStsSource(
    "your_video_id",              // 視頻 ID
    "your_access_key_id",         // 存取金鑰 ID
    "your_access_key_secret",     // 存取金鑰密文
    "your_security_token",        // 安全性權杖
    "cn-shanghai"                 // 地區資訊(可選)
);

// 建立播放資料
AliPlayerModel model = new AliPlayerModel.Builder()
    .videoSource(videoSource)
    .build();   

URL 模式

通過直接提供視頻 URL 進行播放,適用於公開訪問的視頻資源。

適用情境:

  • 公開的視頻資源,無需授權驗證。

  • 測試和示範情境。

  • 簡單的視頻播放需求。

特點:

  • 使用簡單,只需提供視頻 URL。

  • 無需額外的授權配置。

  • 安全性較低,不適合敏感內容。

參數說明:

參數

類型

必需

說明

url

String

是

視頻 URL 地址。

使用樣本:

// 建立 URL 類型的視頻源
VideoSource.UrlSource videoSource = VideoSourceFactory.createUrlSource(
    "https://example.com/video.mp4"
);

// 建立播放資料
AliPlayerModel model = new AliPlayerModel.Builder()
    .videoSource(videoSource)
    .build();

基礎使用

基本播放流程

// 1. 建立視頻源(推薦使用 VidAuth 模式)
VideoSource.VidAuthSource videoSource = VideoSourceFactory.createVidAuthSource(
    "your_video_id",
    "your_play_auth"
);

// 2. 建立播放資料
AliPlayerModel model = new AliPlayerModel.Builder()
    .videoSource(videoSource)
    .coverUrl("https://example.com/cover.jpg")
    .videoTitle("Sample Video")
    .sceneType(SceneType.VOD)
    .autoPlay(true)
    .build();

// 3. 建立控制器
AliPlayerController controller = new AliPlayerController(this);

// 4. 綁定到播放器視圖
controller.configure(model);
playerView.attach(controller);   

切換視訊源

// 切換視訊時,先解除綁定並釋放舊控制器
playerView.detach();
controller.destroy();

// 建立新的視頻源
VideoSource.VidAuthSource newSource = VideoSourceFactory.createVidAuthSource(
    "new_video_id",
    "new_play_auth"
);

// 建立新的播放資料
AliPlayerModel newModel = new AliPlayerModel.Builder()
    .videoSource(newSource)
    .build();

// 建立新的控制器並綁定
AliPlayerController newController = new AliPlayerController(this);
newController.configure(newModel);
playerView.attach(newController); 

進階使用

如何驗證視頻源有效性?

在配置播放器之前,可以調用 isValid() 方法驗證視頻源配置:

VideoSource.VidAuthSource videoSource = VideoSourceFactory.createVidAuthSource(vid, playAuth);

if (videoSource.isValid()) {
    // 配置有效,可以使用
    AliPlayerModel model = new AliPlayerModel.Builder()
        .videoSource(videoSource)
        .build();
    controller.configure(model);
    playerView.attach(controller);
} else {
    // 配置無效,檢查參數
    Log.e(TAG, "Invalid video source configuration");
}

如何從伺服器擷取授權資訊?

推薦通過伺服器端擷取授權資訊,避免在用戶端寫入程式碼敏感性資料:

// 推薦:從伺服器擷取
public void playVideo(String videoId) {
    // 請求伺服器擷取 playAuth
    apiService.getPlayAuth(videoId, new Callback<PlayAuthResponse>() {
        @Override
        public void onSuccess(PlayAuthResponse response) {
            VideoSource.VidAuthSource videoSource = VideoSourceFactory.createVidAuthSource(
                videoId,
                response.getPlayAuth()
            );
            // 開始播放...
        }

        @Override
        public void onError(Exception e) {
            Log.e(TAG, "Failed to get playAuth", e);
        }
    });
}   

如何處理 STS 令牌到期?

對於 VidSts 模式,需要注意安全性權杖的到期時間:

// 檢查令牌是否即將到期if (isTokenExpiringSoon(securityToken)) {
    // 重新整理權杖
    refreshSecurityToken(new TokenCallback() {
        @Overridepublic void onTokenRefreshed(String newToken) {
            // 使用新令牌重新建立視頻源
            VideoSource.VidStsSource videoSource = VideoSourceFactory.createVidStsSource(
                vid, accessKeyId, accessKeySecret, newToken, region
            );
            // 繼續播放...
        }
    });
}

最佳實務

視頻源類型選擇

需求情境

推薦類型

原因

一般業務情境

VidAuth(推薦)

授權簡單,安全性足夠。

高安全情境

VidSts

臨時憑證,精細許可權控制。

公開資源

URL

無需授權,使用簡單。

安全性建議

建議

說明

不要寫入程式碼敏感資訊

避免在用戶端代碼中寫入程式碼 playAuth、accessKeySecret 等。

從伺服器擷取授權

通過伺服器端介面擷取授權資訊,再傳遞給用戶端。

及時重新整理憑證

VidSts 令牌有有效期間,需及時重新整理。

使用 HTTPS

確保資料轉送安全。

錯誤處理

建立視頻源時建議進行錯誤處理:

try {
    VideoSource.VidAuthSource videoSource = VideoSourceFactory.createVidAuthSource(vid, playAuth);

    if (!videoSource.isValid()) {
        // 處理無效配置
        showError("視頻源配置無效");
        return;
    }

    // 使用視頻源
    playVideo(videoSource);

} catch (IllegalArgumentException e) {
    // 處理參數錯誤
    Log.e(TAG, "Invalid video source parameters", e);
    showError("參數錯誤: " + e.getMessage());
}   

樣本參考

專案提供了完整的樣本,位於 playerkit-examples/example-video-source。

樣本功能

功能

說明

URL 播放

示範直接 URL 方式播放。

VidAuth 播放

示範 VidAuth 方式播放。

VidSts 播放

示範 VidSts 方式播放。

運行樣本

在 Demo App 中選擇 Video Source 樣本查看效果。

API 參考

VideoSourceFactory 方法

方法

說明

createVidAuthSource(vid, playAuth)

建立 VidAuth 類型視頻源(推薦)。

createVidStsSource(vid, accessKeyId, accessKeySecret, securityToken, region)

建立 VidSts 類型視頻源。

createUrlSource(url)

建立 URL 類型視頻源。

VideoSource 方法

方法

說明

getSourceType()

擷取視頻源類型。

isValid()

驗證配置是否有效。

getMediaId()

擷取唯一識別碼。

toMap()

轉換為配置 Map。

SourceType 常量

常量

值

說明

VID_AUTH

0

VidAuth 類型。

VID_STS

1

VidSts 類型。

URL

2

URL 類型。

技術原理

MediaId 建置規則

視頻源類型

MediaId 格式

VidAuth

vidauth:{vid}

VidSts

vidsts:{vid}

URL

url:{url}

MediaId 用於播放器生命週期策略中的執行個體複用,相同 MediaId 的視頻源會複用同一個播放器執行個體。

常見問題

如何選擇視頻源類型?

  • 需要授權且安全性要求一般:使用 VidAuth 模式(推薦)。

  • 需要高安全性和臨時訪問憑證:使用 VidSts 模式。

  • 視頻是公開的:使用 URL 模式。

VidAuth 和 VidSts 有什麼區別?

特性

VidAuth

VidSts

授權方式

播放憑證

臨時訪問憑證

參數數量

2 個

4~5 個

安全層級

中等

高

適用情境

大多數業務

高安全情境

推薦度

推薦

特殊需求

視頻源建立失敗怎麼辦?

檢查以下幾點:

  1. 參數是否為空白或無效。

  2. URL 格式是否正確(URL 模式)。

  3. 授權資訊是否有效(VidAuth 和 VidSts)。

  4. 網路連接是否正常。

高頻錯誤錯例

錯例 1:用戶端寫入程式碼敏感資訊

錯誤碼:

// 不要在用戶端寫入程式碼敏感資訊
VideoSource.VidAuthSource videoSource = VideoSourceFactory.createVidAuthSource(
    "video_id",
    "hardcoded_play_auth_value"  // 安全風險!
);

正確做法:

// 從伺服器擷取授權資訊
String playAuth = fetchPlayAuthFromServer(videoId);
VideoSource.VidAuthSource videoSource = VideoSourceFactory.createVidAuthSource(videoId, playAuth);

錯例 2:未驗證視頻源有效性

錯誤碼:

//  未驗證就使用
VideoSource.VidAuthSource videoSource = VideoSourceFactory.createVidAuthSource(vid, playAuth);
controller.configure(createModel(videoSource));  // 可能為無效配置
playerView.attach(controller);

正確做法:

//  先驗證再使用
VideoSource.VidAuthSource videoSource = VideoSourceFactory.createVidAuthSource(vid, playAuth);

if (videoSource.isValid()) {
    controller.configure(createModel(videoSource));
    playerView.attach(controller);
} else {
    showError("視頻源配置無效");
}

錯例 3:STS 令牌到期未處理

錯誤碼:

// 未處理令牌到期
VideoSource.VidStsSource videoSource = VideoSourceFactory.createVidStsSource(
    vid, accessKeyId, accessKeySecret, expiredToken, region
);
// 播放失敗!令牌已到期

正確做法:

// 檢查令牌有效期間,及時重新整理if (isTokenExpired(securityToken)) {
    securityToken = refreshToken();
}
VideoSource.VidStsSource videoSource = VideoSourceFactory.createVidStsSource(
    vid, accessKeyId, accessKeySecret, securityToken, region
);

如何調試?

  1. 檢查日誌:使用 tag:AliPlayerKit 過濾 Logcat。

  2. 調用 toString():視頻源的 toString() 方法會輸出脫敏後的配置資訊。

  3. 驗證參數:使用 isValid() 方法驗證配置。

  4. 檢查網路:確保能正常訪問視頻資源。