hls.user.js

m3u8 playback using HTML5 video and MediaSource Extensions (CORS Required!)

目前為 2017-04-28 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name hls.user.js
  3. // @name:zh-CN hls.user.js
  4. // @namespace hls.js
  5. // @version 0.2.3
  6. // @description m3u8 playback using HTML5 video and MediaSource Extensions (CORS Required!)
  7. // @description:zh-cn 基于HTML5和MediaSource Extensions的hls/m3u8播放
  8. // @include https://*
  9. // @include http://*
  10. // @exclude http://218.94.1.182:8080/*
  11. // @exclude http://www.itslaw.com/*
  12. // @exclude http://www.epox.cn/*
  13. // @exclude https://cn.nytimes.com/*
  14. // @grant none
  15. // @license MIT
  16. // @require https://cdn.jsdelivr.net/hls.js/latest/hls.min.js
  17. // ==/UserScript==
  18. 'use strict';
  19.  
  20. function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
  21.  
  22. var makehls = function makehls(element) {
  23. 'use strict';
  24.  
  25. if (!(element && element.tagName.toLowerCase() === 'video')) return false;
  26. var src = element.currentSrc || element.src;
  27. if (!(src && src.match('m3u8'))) return false;
  28. //if(!(element.error&&element.error.code==4)) return;
  29. var hls = new Hls();
  30. hls.attachMedia(element);
  31. hls.on(Hls.Events.MEDIA_ATTACHED, function (e) {
  32. return hls.loadSource(src);
  33. });
  34. return hls;
  35. };
  36. (function () {
  37. 'use strict';
  38. //console.log([...document.getElementsByTagName('video')].map(makehls));
  39.  
  40. [].concat(_toConsumableArray(document.getElementsByTagName('video'))).map(makehls);
  41. var observerFn = function observerFn(mutationRecord) {
  42. if (mutationRecord.type === 'childList' && mutationRecord.target && typeof getElementsByTagName === 'function') return [].concat(_toConsumableArray(mutationRecord.target.getElementsByTagName('video'))).map(makehls);
  43. return makehls(mutationRecord.target);
  44. };
  45. var mutationObserver = new MutationObserver(function (mutations) {
  46. return mutations.map(observerFn);
  47. });
  48. mutationObserver.observe(document, {
  49. childList: true,
  50. attributes: true,
  51. subtree: true,
  52. attributeFilter: ['src']
  53. });
  54. })();

QingJ © 2025

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