标题: 备份一个算法,用于自动跳转资源站广告
时间: 1天前发布,1天前修改
<div id="dplayer"></div>
<script src="https://s4.zstatic.net/ajax/libs/hls.js/1.5.6/hls.min.js"></script>
<script src="https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/dplayer/1.26.0/DPlayer.min.js"></script>
<script>
// 自定义M3U8 Loader用于过滤广告
class CustomHlsJsLoader extends Hls.DefaultConfig.loader {
constructor(config) {
super(config);
const load = this.load.bind(this);
this.load = function(context, config, callbacks) {
// 拦截manifest和level请求
if (context.type === 'manifest' || context.type === 'level') {
const onSuccess = callbacks.onSuccess;
callbacks.onSuccess = function(response, stats, context) {
// 如果是m3u8文件,处理内容以移除广告分段
if (response.data && typeof response.data === 'string') {
// 过滤掉广告段 - 实现更精确的广告过滤逻辑
response.data = filterAdsFromM3U8(response.data, true);
}
return onSuccess(response, stats, context);
};
}
// 执行原始load方法
load(context, config, callbacks);
};
}
}
// M3U8清单广告过滤函数
function filterAdsFromM3U8(m3u8Content, strictMode = false) {
if (!m3u8Content) return '';
// 按行分割M3U8内容
const lines = m3u8Content.split('\n');
const filteredLines = [];
for (let i = 0; i < lines.length; i++) {
const line = lines[i];
// 只过滤#EXT-X-DISCONTINUITY标识
if (!line.includes('#EXT-X-DISCONTINUITY')) {
filteredLines.push(line);
}
}
return filteredLines.join('\n');
}
//此处为是否跳过广告开关
let adFilteringEnabled = true;
//hls配置文件
const hlsConfig = {
debug: false,
loader: adFilteringEnabled ? CustomHlsJsLoader : Hls.DefaultConfig.loader};
//切片广告跳过算法结束
const dp = new DPlayer({
container: document.getElementById('dplayer'),
video: {
url: 'https://sf1-cdn-tos.huoshanstatic.com/obj/media-fe/xgplayer_doc_video/hls/xgplayer-demo.m3u8',
type: 'hls',
},
pluginOptions: {
//集成广告过滤位置,主要是要引用hlsConfig
hls: hlsConfig,
},
});
</script>
『回复列表(1|隐藏机器人聊天)』
var videoObject = {
container:document.getElementById("a1"),
src:purl,
title:vtitle,
autoplay:true,
autoFit:true,
parse:{
type:'hls',
loader:Hls,
config:{
debug:false
},
}
};
var videoObject = {
container:document.getElementById("a1"),
src:purl,
title:vtitle,
autoplay:true,
autoFit:true,
parse:{
type:'hls',
loader:Hls,
//只替换下面这处即可
config:hlsConfig,
}
};