该代码只对PC有效,对部分接管视频播放器的手机浏览器完全无效。其实m3u8里面不一定是ts,也可以是.png或者.jpg等,我这里就很文盲地统称它们为“ts文件”
//引用最新的hls文件 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/dplayer@latest/dist/DPlayer.min.css"> <!--hls文件--> <script src="https://cdn.jsdelivr.net/npm/hls.js/dist/hls.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/dplayer/dist/DPlayer.min.js"></script> //重写dplayer播放器的hls config var dp = new DPlayer({ container: document.getElementById('video'), theme: '#4C8FE8', volume: 0.8, autoplay: true, video: { url: urls, type: 'hls', defaultQuality: 0 }, pluginOptions: { hls: { pLoader: pLoader,//重写这个方法,就可以改了... // hls config xhrSetup: function(xhr, url) { //这个方法其实可以删除的,跟重写上面的方法功能类似,但没有上面的强大.. //每个ts的url加载都会走这里... //这里可以修改url地址..但不能删..(如果不去open的话,就会404...) //这里就不删了,做个记录... ///// ////// ///////如果要用的话,记着删了这个if的逻辑... ////这个地方我是记录用的.... if (/\.ts/.test(url)) { url = url + '?_q=123456' xhr.open('GET', url, true); } } }, }, }); class pLoader extends Hls.DefaultConfig.loader { constructor(config) { super(config); var load = this.load.bind(this); this.load = function(context, config, callbacks) { //这里有两个值manifest level //manifest:加载最早的,但这个东西有时候还包裹着另外一层,不是最终的。看情况 // level:这玩意貌似是最后的... if (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); }; } } //playlist是m3u8的ts文件内容 //所以可以在这里用正则或者其他替换方法 //进行对ts文件地址的增删改查 function process(playlist) { //这个正则也是举例子...没有具体的需求跟实际意义 //具体怎么替换根据需求写...... //不要纠结为什么写这个 //因为我愿意,这是我的博客.... var arr = playlist.match(/#EXTINF(?:.|\n)*?ts\n/gi); if (arr != null){ for (var i = 0; i < arr.length; i++) { var strts = arr[i]; //给每个ts链接增加一个q=12345的参数,只是举个例子 //不要纠结有没有意思 strts=strts+"?q=12345"; playlist = playlist.replace(strts, ""); } } return playlist; }
暂无评论
请先登录后发表评论!
暂无评论