HLS(m3u8) Ad Remover

Remove HLS.js-based(m3u8) ad stream

目前為 2023-04-05 提交的版本,檢視 最新版本

// ==UserScript==
// @name         HLS(m3u8) Ad Remover
// @name:zh-CN   HLS(m3u8) 去广告
// @namespace    http://tampermonkey.net/
// @license      GNU AGPLv3
// @version      0.3
// @description  Remove HLS.js-based(m3u8) ad stream
// @description:zh-cn   基于HLS.js的 m3u8 去广告
// @author       douniwan6
// @match        http*://xiaoheimi.net/player*
// @match        http*://www.yhpdm.net/yxsf/player*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=gf.qytechs.cn
// @supportURL   https://gf.qytechs.cn/en/scripts/463326-hls-m3u8-ad-remover/feedback
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    /*global Hls*/
    // alert(“HLS Ad Remover”);
    //debugger

    // special playlist post processing function
    function process(playlist) {
        // ad stream usually surrounded by #EXT-X-DISCONTINUITY
        let adExp = /#EXT-X-DISCONTINUITY\n(?<ad>#EXTINF:.*\n.*\n){1,10}#EXT-X-DISCONTINUITY/g;

        let around = new RegExp(`(?<before>(?:.*\n){0,6})(?<ads>${adExp.source})(?<after>(?:.*\n){0,6})`, adExp.flags);

        for (let match of playlist.matchAll(around)) {
            console.log(match.groups.before);
            console.log("*********************REMOVED*********************");
            console.log(match.groups.ads);
            console.log("*********************REMOVED*********************");
            console.log(match.groups.after);
            console.log(match);
        }

        playlist = playlist.replace(adExp, "");

        return playlist;
    }
    class pLoader extends Hls.DefaultConfig.loader {
        constructor(config) {
            super(config);
            var load = this.load.bind(this);
            this.load = function (context, config, callbacks) {
                if (context.type == 'manifest' || context.type == 'level') {
                    var onSuccess = callbacks.onSuccess;
                    callbacks.onSuccess = function (response, stats, context) {
                        response.data = process(response.data);
                        onSuccess(response, stats, context);
                    };
                }
                load(context, config, callbacks);
            };
        }
    }

    console.log(Hls.DefaultConfig.pLoader);
    Hls.DefaultConfig.pLoader = pLoader
    var loadSource = Hls.prototype.loadSource;
    Hls.prototype.loadSource = function(src) {
        console.log(src);
        loadSource.call(this, src);
    }
    console.log(Hls.DefaultConfig.pLoader);
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址