Files
SEONexus/code/public/static/js/modules/player/dplayer.init.js
2026-01-09 01:28:23 +08:00

139 lines
4.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
(function () {
/**
* =====================================================
* DPlayer Initializer (Scoped by dom_prefix)
* -----------------------------------------------------
* - 不使用全局变量
* - 支持一个页面多个播放器
* - 只初始化 data-engine="dplayer" 的模块
* =====================================================
*/
function initDPlayer(strPlayUrl) {
let DomDPlayer = document.getElementById('dplayer')
// ---- 创建 DPlayer 实例 ----
try {
videoPlayer = new DPlayer({
container: DomDPlayer,
autoplay: true,
screenshot: false,
//logo: dplayerLogo,
video: {
url: strPlayUrl,
type: 'hls',
},
pluginOptions: {
hls: {
maxBufferLength: 600,
},
},
});
videoPlayer.play()
// ---- 错误处理(兜底)----
videoPlayer.on('error', function () {
showError(root, '播放失败,请尝试切换线路');
});
} catch (e) {
console.log(e)
showError(root, '播放器初始化失败');
}
}
function showError(root, msg) {
var err = root.querySelector('.' + root.dataset.prefix + '-player-status');
if (!err) {
err = document.createElement('div');
err.className = root.dataset.prefix + '-player-status is-error';
root.appendChild(err);
}
err.innerText = msg;
}
function boot() {
var players = document.querySelectorAll('[data-engine="dplayer"]');
if (!players.length) return;
players.forEach(function (root) {
// dom_prefix 注入(防串)
if (!root.dataset.prefix) {
var cls = root.className || '';
var m = cls.match(/([a-z0-9]{4,8})-player/);
if (m) {
root.dataset.prefix = m[1];
}
}
console.log(root)
initDPlayer(root);
});
}
// 获取第一个线路 key带容错
function getDefaultLine() {
if (typeof arrPlayUrl === "undefined" || !arrPlayUrl || typeof arrPlayUrl !== "object") {
console.warn("arrPlayUrl 无效:");
return null;
}
const keys = Object.keys(arrPlayUrl);
if (keys.length === 0) {
console.warn("没有任何播放线路");
return null;
}
return keys[0]; // 后端排序,第一位为默认
}
// 获取某个线路的第一个 url
function getFirstPlayUrl(playLine) {
if (!arrPlayUrl || !arrPlayUrl[playLine] || !arrPlayUrl[playLine][0]) {
console.warn("播放线路不存在:", playLine, arrPlayUrl);
return null;
}
return arrPlayUrl[playLine][0].url || null;
}
// DOM Ready
document.addEventListener("DOMContentLoaded", function () {
try {
if (typeof strVideoId == "undefined") return;
console.log(strPlayType)
console.log(boolIsPlayPage)
if (typeof strPlayType !== "undefined" && boolIsPlayPage) {
// 用户指定线路
if (strPlayType !== "default") {
const activeUrl = arrPlayUrl[strPlayType][intPlayUrlIndex - 1];
strPlayUrl = activeUrl.url;
// checkLine(strPlayType);
// 默认播放第一个线路的第一个 URL
} else {
const defaultLine = getDefaultLine();
strPlayUrl = getFirstPlayUrl(defaultLine);
// checkLine(defaultLine);
}
console.log('strPlayUrlstrPlayUrl')
initDPlayer(strPlayUrl);
} else if (strPlayType == "default" && !boolIsPlayPage) {
const defaultLine = getDefaultLine();
strPlayUrl = getFirstPlayUrl(defaultLine);
// checkLine(defaultLine);
initDPlayer(strPlayUrl);
}
} catch (error) {
}
})
})();