本文介紹AliPlayerKit支援的多種視頻源類型及其使用方法。
概念介紹
什麼是視頻源?
視頻源 (Video Source) 是播放器播放視頻的資料來源,定義了視頻資源的擷取方式和授權機制。
AliPlayerKit 支援 3 種視頻源類型:
視頻源類型 | 授權方式 | 適用情境 |
VidAuth | VID + 播放憑證 | 推薦,大多數生產環境。 |
VidSts | VID + STS 臨時憑證 | 高安全性情境。 |
URL | 直接 URL 地址 | 公開資源、測試示範。 |
如何選擇視頻源類型?
根據業務情境和安全需求選擇合適的視頻源類型:
需求 | 推薦類型 | 說明 |
需要授權驗證 | VidAuth(推薦) | 授權機制簡單,易於整合。 |
高安全性要求 | VidSts | 臨時憑證,支援精細許可權控制。 |
公開視頻資源 | URL | 無需授權,使用簡單。 |
功能特性
解決問題
不同視頻源類型配置方式不統一。
授權憑證管理複雜。
缺乏統一的視頻源驗證機制。
難以區分不同類型的視頻資源。
核心價值
特性 | 說明 |
統一抽象 | 所有視頻源類型繼承自 |
工廠建立 | 通過 |
型別安全 | 使用 |
配置驗證 |
|
核心能力
能力 | 說明 |
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 | 無需授權,使用簡單。 |
安全性建議
建議 | 說明 |
不要寫入程式碼敏感資訊 | 避免在用戶端代碼中寫入程式碼 |
從伺服器擷取授權 | 通過伺服器端介面擷取授權資訊,再傳遞給用戶端。 |
及時重新整理憑證 | 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 方法
方法 | 說明 |
| 建立 VidAuth 類型視頻源(推薦)。 |
| 建立 VidSts 類型視頻源。 |
| 建立 URL 類型視頻源。 |
VideoSource 方法
方法 | 說明 |
| 擷取視頻源類型。 |
| 驗證配置是否有效。 |
| 擷取唯一識別碼。 |
| 轉換為配置 Map。 |
SourceType 常量
常量 | 值 | 說明 |
| 0 | VidAuth 類型。 |
| 1 | VidSts 類型。 |
| 2 | URL 類型。 |
技術原理
MediaId 建置規則
視頻源類型 | MediaId 格式 |
VidAuth |
|
VidSts |
|
URL |
|
MediaId 用於播放器生命週期策略中的執行個體複用,相同 MediaId 的視頻源會複用同一個播放器執行個體。
常見問題
如何選擇視頻源類型?
需要授權且安全性要求一般:使用 VidAuth 模式(推薦)。
需要高安全性和臨時訪問憑證:使用 VidSts 模式。
視頻是公開的:使用 URL 模式。
VidAuth 和 VidSts 有什麼區別?
特性 | VidAuth | VidSts |
授權方式 | 播放憑證 | 臨時訪問憑證 |
參數數量 | 2 個 | 4~5 個 |
安全層級 | 中等 | 高 |
適用情境 | 大多數業務 | 高安全情境 |
推薦度 | 推薦 | 特殊需求 |
視頻源建立失敗怎麼辦?
檢查以下幾點:
參數是否為空白或無效。
URL 格式是否正確(URL 模式)。
授權資訊是否有效(VidAuth 和 VidSts)。
網路連接是否正常。
高頻錯誤錯例
錯例 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
);如何調試?
檢查日誌:使用
tag:AliPlayerKit過濾 Logcat。調用 toString():視頻源的
toString()方法會輸出脫敏後的配置資訊。驗證參數:使用
isValid()方法驗證配置。檢查網路:確保能正常訪問視頻資源。