已掉线,重新登录

首页 > 绿虎论坛 > 杂类 > 超级灌水 (发帖)

标题: 备份一个算法,用于自动跳转资源站广告

作者: @Ta

时间: 06-26 14:04发布,06-26 14:23修改

点击: 207

如题,这是一个关于跳过某些视频资源站非法广告的算法,支持引用hls.js播放器,m3u8文件播放时有效,已知问题,有闪屏现象
注意hls版本必须为这个<script src="https://s4.zstatic.net/ajax/libs/hls.js/1.5.6/hls.min.js"></script>其余版本可能会无效,1.5.6以后的版本应该都可以
用法实例
<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>






[隐藏样式|查看源码]


『回复列表(5|隐藏机器人聊天)』

1. 补充一下,该算法来自于libretv,本文只是提取备份一下。其他播放器引用类似,都是替换hls配置文件,如muiplayer也只是替换hls配置文件即可
替换前
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,
    }
  };



(/@Ta/2025-06-26 14:32//)

2.

片源提供商会检测么
虎友高配版(绿色)

(/@Ta/2025-07-02 02:49//)

3. @怒放家族de霖,检测到了,就换呗,资源站多的是
原理就是删除了#EXT-X-DISCONTINUITY标识,因为广告的码率、分辨率和视频资源的不一样,删了这个,码率变了的广告部分就无法播放
(/@Ta/2025-07-02 10:46//)

4.

@,好东西!

只是那些资源站,画质不行,经常运动幅度一大,就满屏马赛克,实在太难受,都懒得看了。。

估计又想省硬盘 & 带宽,又不想用大量服务器 & 电费去认真转,x264 veryfast 敷衍了事。。(瞎猜的)

(/@Ta/2025-07-02 15:39//)

5. @无名啊,只有那种有跑马灯广告的还行,有几家活得久的,都是那种垃圾画质
你可以看看这里面提供的几个片源,靠前那几个画质还行
https://github.com/LibreSpark/LibreTV/blob/main/js/config.js
(/@Ta/2025-07-02 18:00//)

回复需要登录

7月24日 04:01 星期四

本站由hu60wap6驱动

备案号: 京ICP备18041936号-1