/**
* @file loader.js
*/
從 '../component.js' 導入組件;
從 './tech.js' 導入技術;
從 '../utils/string-cases.js' 導入 {toTitleCase};
從 '../utils/merge-options.js' 導入 mergeOptions;
/**
* `MediaLoader` 是決定加載哪種播放技術的 `Component`
* 播放器初始化時。
*
* @extends 組件
*/
類 MediaLoader 擴展組件 {
/**
* 創建此類的一個實例。
*
* @param {Player} 播放器
* 此類應附加到的 `Player`。
*
* @param {對象} [選項]
* 播放器選項的鍵/值存儲。
*
* @param {Component~ReadyCallback} [就緒]
* 此組件準備就緒時運行的函數。
*/
構造函數(播放器,選項,準備就緒){
// MediaLoader 沒有元素
const options_ = mergeOptions({createEl: false}, options);
超級(玩家,選項_,準備就緒);
// 如果初始化播放器時沒有源,
//加載第一個支持的播放技術。
如果(!options.playerOptions.sources || options.playerOptions.sources.length === 0){
for (let i = 0, j = options.playerOptions.techOrder; i < j.length; i++) {
const techName = toTitleCase(j[i]);
讓 tech = Tech.getTech(techName);
// 支持將技術註冊為組件的舊行為。
// 一旦刪除了不推薦使用的行為,就刪除。
如果(!技術名稱){
tech = Component.getComponent(techName);
}
// 檢查瀏覽器是否支持該技術
如果(技術 && 技術。isSupported()){
player.loadTech_(techName);
休息;
}
}
}其他{
// 循環播放技術(例如 HTML5)並檢查支持。
// 然後加載最好的源。
// 這裡有一些假設:
// 所有播放技術都尊重預加載 false。
player.src(options.playerOptions.sources);
}
}
}
Component.registerComponent('MediaLoader', MediaLoader);
導出默認 MediaLoader;