自訂配置 (Custom Config) 是 AliPlayerKit 的擴充配置機制。AliPlayerKit 已內建最佳實務配置,大多數情境無需額外設定即可獲得優質體驗。當需要的播放器能力未通過 AliPlayerKit 介面直接提供時,可通過自訂配置機制直接調用底層 AliPlayer SDK 的 API 來實現。
概念介紹
什麼是自訂配置?
AliPlayerKit 在底層 AliPlayer SDK 之上提供了高層封裝,已內建最佳實務配置。但底層 SDK 提供了更豐富的能力(如自訂緩衝策略、Referer 防盜鏈、HTTP Header 注入等),這些能力並非都通過 AliPlayerKit 直接透出。
自訂配置機制提供了兩個回調入口,讓開發人員在關鍵時機擷取底層對象並直接調用原生 API:
層級 | 介面 | 調用時機 | 典型情境 |
全域配置 |
| +setup 內部初始化完成後(僅一次) | 全域記錄層級、HTTP/2 多工等全域行為 |
執行個體配置 |
| 每次 configure: 時 prepare 前 | 緩衝策略、Referer、HTTP Header 等執行個體行為 |
三層配置體系
AliPlayerKit 的完整配置體系包含三個層級:
┌─────────────────────────────────────────────────────────┐
│ 1. 全域配置 (OnGlobalInitBlock) │
│ 應用啟動時執行一次,影響所有播放器執行個體 │
├─────────────────────────────────────────────────────────┤
│ 2. 模型配置 (AliPlayerModel) │
│ 每次 configure: 時通過屬性設定播放參數 │
├─────────────────────────────────────────────────────────┤
│ 3. 執行個體配置 (onPlayerConfigBlock) │
│ 每次 configure: 時在 prepare 前回調底層播放器 │
└─────────────────────────────────────────────────────────┘全域配置(Global Config)
適用情境
設定全域 Option(如全域記錄層級)
啟用 HTTP/2 多工
配置全域 DNS 解析策略
其他需要在所有播放器執行個體建立前生效的全域行為
機制說明
通過 +[AliPlayerKit setOnGlobalInitBlock:] 註冊回調 Block
回調在 +setup 完成內部初始化後觸發,僅執行一次
執行後 Block 被置 nil,後續不再觸發
此時底層 SDK 已就緒,可安全調用全域 API
使用方式
在 application:didFinishLaunchingWithOptions: 中,調用 +setup 之前註冊回調:
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 1. 註冊全域自訂配置回調(必須在 setup 之前調用)
[AliPlayerKit setOnGlobalInitBlock:^{
// 樣本:啟用 HTTP/2 多工
[AliPlayerFactory setOption:ALLOW_H2_MULTIPLEX value:1];
// 樣本:設定全域記錄層級
// [AliPlayerFactory setLogLevel:AF_LOG_LEVEL_INFO];
}];
// 2. 初始化(內部完成初始化後觸發上面註冊的回調)
[AliPlayerKit setup];
return YES;
}配置時序
application:didFinishLaunchingWithOptions:
│
├── [AliPlayerKit setOnGlobalInitBlock:block] ← 註冊回調
│
└── [AliPlayerKit setup]
│
├── [GlobalManager setup] ← 底層 SDK 初始化
│
├── sInitialized = YES
│
└── block() ← 觸發全域配置回調(僅一次)注意事項
要點 | 說明 |
調用順序 |
|
執行次數 | 全域配置僅執行一次, |
傳 nil 清除 | 傳入 |
等冪性 |
|
執行個體配置(Player Config)
適用情境
自訂緩衝策略(maxBufferDuration、highBufferDuration 等)
設定 Referer 防盜鏈
配置 HTTP Header
設定執行個體級 Option
其他 AliPlayerKit 未直接透出的播放器介面
機制說明
通過 AliPlayerModel.onPlayerConfigBlock 設定回調 Block
每次調用 [controller configure:model] 時觸發
回調在 setDataSource: 之後、prepare 之前執行
回調參數為遵循 MediaPlayer 協議的底層播放器執行個體
使用方式
在構建 AliPlayerModel 時設定 onPlayerConfigBlock:
VideoSource *source = [VideoSource urlSourceWithUrl:@"https://example.com/video.mp4"];
AliPlayerModel *model = [[AliPlayerModel alloc] initWithVideoSource:source];
// 設定執行個體級自訂配置回調
model.onPlayerConfigBlock = ^(id<MediaPlayer> player) {
// 樣本 1:自訂緩衝策略
AVPConfig *config = [player getConfig];
config.maxBufferDuration = 50000; // 最大緩衝時間長度 50s
config.highBufferDuration = 3000; // 高水位緩衝 3s
config.startBufferDuration = 500; // 起播緩衝 500ms
[player setConfig:config];
// 樣本 2:設定 Referer 防盜鏈
AVPConfig *refConfig = [player getConfig];
refConfig.referer = @"https://your-domain.com";
[player setConfig:refConfig];
// 樣本 3:設定執行個體級 Option
// [player setOption:key value:value];
};
// 配置並播放
[controller configure:model];配置時序
[controller configure:model]
│
├── lifecycleStrategy.acquire() ← 擷取播放器執行個體
│
├── [mediaPlayer setDataSource:model] ← 配置視頻源
│
├── model.onPlayerConfigBlock(mediaPlayer) ← 觸發執行個體配置回調
│
├── [strategyManager start/reset] ← 策略系統啟動
│
└── [mediaPlayer prepare] ← 開始準備播放注意事項
要點 | 說明 |
觸發頻率 | 每次調用 |
執行時機 | 在 |
回調參數 |
|
可選配置 |
|
避免非同步 | 回調是同步執行的,不應在回調中執行耗時或非同步作業 |
內建配置項
AliPlayerKit 全域配置
通過 AliPlayerKit 類方法直接設定的內建配置項:
配置項 | 方法 | 說明 |
初始化 |
| 初始化 SDK, |
初始化狀態 |
| 查詢 SDK 是否已完成初始化 |
全域配置回調 |
| 註冊全域初始化後的自訂配置回調 |
偵錯模式 |
| 開啟/關閉偵錯模式(預設 |
日誌面板 |
| 是否在播放器視圖中顯示日誌面板(預設 |
記錄層級 |
| SDK 日誌輸出層級(預設 |
控制台日誌 |
| 是否輸出日誌到控制台(預設 |
播放器工廠 |
| 自訂播放器建立工廠,傳 |
預先載入器 |
| 自訂預先載入器,傳 |
清除緩衝 |
| 清除播放器本地媒體緩衝(需在 |
語言設定 |
| 手動指定語言代碼( |
自訂翻譯 |
| 注入自訂本地化 Provider |
跟隨系統語言 |
| 恢複跟隨系統慣用語言 |
當前語言 |
| 擷取當前生效的語言代碼 |
版本資訊 |
| 擷取 AliPlayerKit / 底層 SDK 版本號碼 |
AliPlayerModel 執行個體配置
通過 AliPlayerModel 屬性設定的執行個體級配置項:
屬性 | 類型 | 預設值 | 說明 |
|
| — | 必填,播放視頻資料來源( |
|
|
| 播放情境,影響插槽 UI 和手勢行為 |
|
|
| 視頻封面圖 URL |
|
|
| 顯示在 TopBar 的標題 |
|
|
| 配置完成後是否自動開始播放 |
|
|
| 播放品質監控標識(業務方的唯一標識) |
|
|
| 播放起始位置(毫秒),負數自動修正為 0 |
|
|
| 是否啟用硬體解碼 |
|
|
| 播放時是否允許螢幕休眠 |
|
|
| iOS 特有,禁止截屏/錄屏 |
|
|
| 執行個體級自訂配置回調 |
AliPlayerController 運行時配置
通過 AliPlayerController 方法在運行時動態調整的配置:
方法 / 屬性 | 類型 | 說明 |
|
| 播放速度(1.0 正常,0.5 半速,2.0 倍速) |
|
| 是否迴圈播放 |
|
| 是否靜音 |
|
| 鏡像模式( |
|
| 縮放模式( |
|
| 旋轉角度( |
|
| 顯示/隱藏控制欄 |
|
| 控制欄可見度鎖定( |
|
| 進入/退出全屏(預設帶動畫) |
|
| 進入/退出全屏(可控制動畫) |
|
| 切換清晰度 |
| — | 截取當前視頻畫面 |
| — | 切換播放/暫停狀態 |
| — | 從頭重新播放 |
| — | 停止播放 |
|
| 自動管理前後台暫停/恢複(預設 |
配置優先順序
優先順序規則
當同一配置項在不同層級都有設定時,按以下優先順序生效:
執行個體配置(onPlayerConfigBlock) > AliPlayerModel 屬性 > 全域配置 > SDK 預設值配置生效範圍
層級 | 生效範圍 | 生命週期 |
全域配置 | 所有播放器執行個體 | 應用級(僅執行一次) |
Model 屬性 | 單個播放器執行個體 | 單次 |
執行個體配置回調 | 單個播放器執行個體 | 每次 |
Controller 方法 | 單個播放器執行個體 | 運行時動態生效 |
完整配置樣本
綜合樣本
// ===== 全域配置(AppDelegate 中,僅一次)=====
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 全域自訂配置
[AliPlayerKit setOnGlobalInitBlock:^{
// 啟用 HTTP/2 多工
[AliPlayerFactory setOption:ALLOW_H2_MULTIPLEX value:1];
}];
// 初始化
[AliPlayerKit setup];
// 全域內建配置(需在 setup 之後調用)
[AliPlayerKit setLogLevel:LogLevelWarn];
[AliPlayerKit enableConsoleLog:YES];
return YES;
}
// ===== 執行個體配置(播放頁中,每次播放)=====
- (void)startPlayback {
VideoSource *source = [VideoSource urlSourceWithUrl:videoUrl];
AliPlayerModel *model = [[AliPlayerModel alloc] initWithVideoSource:source];
// Model 屬性配置
model.sceneType = SceneTypeVOD;
model.videoTitle = @"精彩視頻";
model.coverUrl = coverImageUrl;
model.autoPlay = YES;
model.hardwareDecode = YES;
model.startTime = resumePosition; // 斷點續播
// 執行個體級自訂配置(底層 SDK)
model.onPlayerConfigBlock = ^(id<MediaPlayer> player) {
AVPConfig *config = [player getConfig];
config.maxBufferDuration = 50000;
config.highBufferDuration = 3000;
config.startBufferDuration = 500;
config.referer = @"https://your-domain.com";
[player setConfig:config];
};
[_controller configure:model];
}setLogLevel: 和 enableConsoleLog: 等日誌配置需在 setup 之後調用,因為它們操作的是 LogHub 單例執行個體。
API 速查
全域配置 API
方法 | 說明 |
| 註冊全域配置回調,傳 |
| 觸發初始化,執行回調 |
執行個體配置 API
類 | 屬性 | 說明 |
|
| 執行個體級配置回調( |
相關檔案
檔案 | 說明 |
| 全域配置 API( |
| 執行個體配置入口( |
| 運行時配置方法 |
| 底層播放器協議(回調參數類型) |
完整API請參見API參考。
常見問題
全域配置和執行個體配置的執行順序是什嗎?
全域配置在應用啟動時(+setup 內)執行一次;執行個體配置在每次 configure: 時的 prepare 前執行。兩者互不干擾。
如果不設定自訂配置會怎樣?
AliPlayerKit 已內建最佳實務配置,不設定任何自訂配置即可正常使用,適合大多數情境。
執行個體配置回調中可以做非同步作業嗎?
不建議。回調是同步執行的,完成後才會繼續執行 prepare。如果在回調中執行耗時操作,會阻塞播放器的啟動流程。
可以在執行個體配置中修改視頻源嗎?
不建議。視頻源在回調前已通過 setDataSource: 設定完成,在回調中修改可能導致不可預期的行為。執行個體配置回調應僅用於設定播放參數(如緩衝策略、Referer 等)。
setOnGlobalInitBlock: 在 +setup 之後調用會怎樣?
不會生效。+setup 使用 dispatch_once 保證只執行一次,如果 Block 在 +setup 之後設定,將永遠不會被觸發。
日誌配置應該在 setup 之前還是之後?
setLogLevel: 和 enableConsoleLog: 需在 +setup 之後調用,因為它們直接操作 LogHub 單例。而 setOnGlobalInitBlock: 必須在 +setup 之前設定。