创建账å�·æ³¨å†Œæ–°ç”¨æˆ·ç”¨æˆ·å��支æŒ�å—æ¯�ã€�æ•°å—和下划线,密ç �长度为 6-72 ä½�。用户å��邮箱密ç �确认密ç �注册并登录已有账å�·ï¼Ÿè¿”回登录
प¤ª प¤ª ei/lis记录
ä»…ä¿�å˜åœ¨å½“å‰�设备प¤ª
¤ª¤ª प¤ª æ�œç´¢æi/lis记录प¤ª 观看列表0 / 0प¤ª
最多ä¿�ç•™ 30 æ�¡æœ¬æœºè®°å½•清空记录प¤ª¤ª à/buttonƒà¤ª¤ª
पपपप
àà(() => {
const config = document.getElementById("playerConfig");
const stage = document.getElementById("playerStage");
const nextLink = document.getElementById("nextEpisode");
const pendingPlayerEvents = [];
let hls = null;
let player = null;
let trackingTimer = 0;
let trackingAttempts = 0;
function flushPlayerEvents() {
trackingTimer = 0;
if (window.FlowTrack?.track) {
while (pendingPlayerEvents.length) {
const event = pendingPlayerEvents.shift();
window.FlowTrack.track(event.name, event.properties);
}
return;
}
trackingAttempts += 1;
if (pendingPlayerEvents.length && trackingAttempts < 100) {
trackingTimer = window.setTimeout(flushPlayerEvents, 50);
}
}
function trackPlayer(name, properties = {}) {
const event = {
name,
properties: {
video_id: config.dataset.videoId,
authenticated: Boolean(localStorage.getItem("auth_token")),
need_vip: Number(config.dataset.needVip || "0"),
play_source: config.dataset.playSource,
play_index: config.dataset.playIndex,
...properties
}
};
if (window.FlowTrack?.track) {
window.FlowTrack.track(event.name, event.properties);
return;
}
pendingPlayerEvents.push(event);
if (!trackingTimer) trackingTimer = window.setTimeout(flushPlayerEvents, 0);
}
function durationBucket(seconds) {
if (!Number.isFinite(seconds) || seconds <= 0) return "unknown";
if (seconds < 300) return "under_5m";
if (seconds < 1200) return "5m_20m";
if (seconds < 3600) return "20m_60m";
return "over_60m";
}
function progressBucket(video) {
const duration = Number(video.duration);
const currentTime = Number(video.currentTime);
if (!Number.isFinite(duration)