Greasy Fork is available in English.
Remove HLS.js-based(m3u8) ad stream
当前为
// ==UserScript==
// @name HLS(m3u8) Ad Remover
// @name:zh-CN HLS(m3u8) 去广告
// @namespace http://tampermonkey.net/
// @license GNU AGPLv3
// @version 0.2
// @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=greasyfork.org
// @grant none
// ==/UserScript==
(function() {
'use strict';
/*global Hls*/
// alert(“HLS Ad Remover”);
//debugger
// special playlist post processing function
function process(playlist) {
let adExp = /#EXT-X-DISCONTINUITY\n(?<ad>#EXTINF:.*\n.*\n){1,10}#EXT-X-DISCONTINUITY/g;
let around = new RegExp(`((?:#EXTINF.*\n.*\n){0,3})(${adExp.source})((?:.*\n){0,3})`, adExp.flags);
for (let match of playlist.matchAll(around)) {
console.log(match[1]);
console.log("*********************REMOVED*********************");
console.log(match[2]);
console.log("*********************REMOVED*********************");
console.log(match[3]);
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);
})();