// ==UserScript== // @name 百度网盘高清播放(个人版) // @namespace http://tampermonkey.net/ // @version 1.0.5 // @description 仅个人使用:替换播放器,获取更高清晰度 m3u8 流(v1.0.5 彻底 dispose 原播放器实例消除双声音;全程不干预 playbackRate,兼容 Edge/Global Speed 倍速) // @author You // @match https://pan.baidu.com/play/video* // @match https://pan.baidu.com/pfile/video* // @require https://unpkg.com/artplayer@5.4.0/dist/artplayer.js // @require https://unpkg.com/hls.js@1.7.3/dist/hls.min.js // @grant unsafeWindow // @grant GM_getValue // @grant GM_setValue // @run-at document-start // ==/UserScript== /* global Artplayer, Hls */ (function () { 'use strict'; /* ========================================================== * 常量与全局状态 * 说明:GM_getValue / GM_setValue 按规格书保留授权, * 但本版本不做设置持久化(规格第七节),因此暂不使用。 * ========================================================== */ const TAG = '[BDHQ]'; const MAX_WAIT = 30000; // 各类等待的最长时间(毫秒) const INTERVAL = 500; // 轮询间隔(毫秒) const state = { videoInfo: null, // 当前视频信息(来自 Pinia) vipLevel: 0, // 如实读取的会员等级:0 普通 / 1 VIP / 2 SVIP qualities: [], // 当前可用清晰度列表 currentQuality: null, // 当前播放的清晰度项 art: null, // ArtPlayer 实例 hls: null, // 当前 hls.js 实例 observer: null, // MutationObserver(路由 / 原播放器重建监控) lastHref: location.href, initializing: false, // 防止初始化流程重入 networkRetry: 0, // hls 致命网络错误计数(用于升级恢复策略) playbackRate: 1, // 仅记录用户在内置菜单里选过的值,绝不自动套用 trackedMedia: [], // [v1.0.5] 页面脚本创建过的媒体元素(含从未插入 DOM 的) originalWraps: [], // [v1.0.5] 被替换掉的原播放器容器 destroyStarted: false // [v1.0.5] 原播放器销毁/压制轮询是否已启动 }; /* ========================================================== * [v1.0.2 新增] 深度媒体清理模块(修改1) * 背景:百度原播放器可能使用独立