diff --git a/docs/assets/example/libass.js b/docs/assets/example/libass.js new file mode 100644 index 000000000..8e0fcca41 --- /dev/null +++ b/docs/assets/example/libass.js @@ -0,0 +1,111 @@ +var art = new Artplayer({ + container: '.artplayer-app', + url: '/assets/sample/video.mp4', + poster: '/assets/sample/poster.jpg', + volume: 0.5, + isLive: false, + muted: false, + autoplay: false, + pip: true, + autoSize: true, + autoMini: true, + screenshot: true, + setting: true, + loop: true, + flip: true, + playbackRate: true, + aspectRatio: true, + fullscreen: true, + fullscreenWeb: true, + subtitleOffset: true, + miniProgressBar: true, + mutex: true, + backdrop: true, + playsInline: true, + autoPlayback: true, + airplay: true, + theme: '#23ade5', + lang: navigator.language.toLowerCase(), + moreVideoAttr: { + crossOrigin: 'anonymous', + }, + settings: [ + { + width: 200, + html: 'Subtitle', + tooltip: 'Bilingual', + icon: '', + selector: [ + { + html: 'Display', + tooltip: 'Show', + switch: true, + onSwitch: function (item) { + item.tooltip = item.switch ? 'Hide' : 'Show'; + art.subtitle.show = !item.switch; + return !item.switch; + }, + }, + { + html: 'Style Test', + url: '/assets/sample/style-test.ass', + }, + { + default: true, + html: 'Bilingual', + url: '/assets/sample/subtitle.ass', + }, + { + html: 'subtitle.srt', + url: '/assets/sample/subtitle.srt', + }, + ], + onSelect: function (item) { + art.subtitle.switch(item.url, { + name: item.html, + }); + return item.html; + }, + }, + ], + subtitle: { + url: '/assets/sample/subtitle.ass', + style: { + color: '#48aff0', + fontSize: '16px', + }, + }, + plugins: [ + artplayerPluginLibass({ + // debug: true, + workerUrl: 'https://unpkg.com/libass-wasm@4.1.0/dist/js/subtitles-octopus-worker.js', + // wasmUrl: 'https://unpkg.com/libass-wasm@4.1.0/dist/js/subtitles-octopus-worker.wasm', + fallbackFont: '/assets/misc/SourceHanSansCN-Bold.woff2' + }), + ], +}); + +// init +art.on('artplayerPluginLibass:init', (adapter) => { + console.info('artplayerPluginLibass:init', adapter); +}); + +// subtitle switch +art.on('artplayerPluginLibass:switch', (url) => { + console.info('artplayerPluginLibass:switch', url); +}) + +// subtitle visible +art.on('artplayerPluginLibass:visible', (visible) => { + console.info('artplayerPluginLibass:visible', visible); +}) + +// subtitle timeOffset +art.on('artplayerPluginLibass:timeOffset', (timeOffset) => { + console.info('artplayerPluginLibass:timeOffset', timeOffset); +}) + +// destroy +art.on('artplayerPluginLibass:destroy', () => { + console.info('artplayerPluginLibass:destroy'); +}) diff --git a/docs/assets/misc/SourceHanSansCN-Bold.woff2 b/docs/assets/misc/SourceHanSansCN-Bold.woff2 new file mode 100644 index 000000000..28d1506fd Binary files /dev/null and b/docs/assets/misc/SourceHanSansCN-Bold.woff2 differ diff --git a/docs/assets/sample/style-test.ass b/docs/assets/sample/style-test.ass new file mode 100644 index 000000000..935da278f --- /dev/null +++ b/docs/assets/sample/style-test.ass @@ -0,0 +1,56 @@ +[Script Info] +Title: +ScriptType: v4.00+ +WrapStyle: 0 +PlayResX: 640 +PlayResY: 480 +ScaledBorderAndShadow: yes + +[V4+ Styles] +Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding +Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,2,2,10,10,10,0 +Style: Alt,Times New Roman,40,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,2,8,10,10,10,0 + +[Events] +Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text +Comment: 0,0:00:00.00,0:00:05.00,Default,,0000,0000,0000,,This line is a comment and should not display on rendered output. This file is intended to be rendered on a 640x480 video, preferably a single solid colour, or maybe a checkerboard pattern. +Dialogue: 0,0:00:00.00,0:00:05.00,Default,,0000,0000,0000,,This is a test of the ASS format and some basic features in it. +Dialogue: 0,0:00:05.00,0:00:07.00,Default,,0000,0000,0000,,This and the previous line should both show at the bottom of the video in 20 pixel high white Arial with a 2 pixel black outline and 2 pixel offset shadow. This line is long so it should automatically be broken into several lines that are approximately even length, with upper lines being longer. +Dialogue: 0,0:00:07.00,0:00:09.00,Default,,0000,0000,0000,,Now going to test conflict resolution. {By the way, this is a common abuse, "inline-comments" in override tag groups. They should not be rendered and not generate errors, just be ignored.} +Dialogue: 0,0:00:07.50,0:00:09.00,Default,,0000,0000,0000,,This line should be above the previous. +Dialogue: 0,0:00:09.00,0:00:11.00,Default,,0000,0000,0000,,{\an1}This line should be lower-left aligned using the \an1 override. +Dialogue: 0,0:00:11.00,0:00:13.00,Default,,0000,0000,0000,,{\an9}Upper right +Dialogue: 0,0:00:12.00,0:00:14.00,Alt,,0000,0000,0000,,This one should be below the "Upper right" line and be centered on screen. It should also be in 40 pixel high Times New Roman. +Dialogue: 0,0:00:14.00,0:00:16.00,Alt,,0000,0000,0000,,{\fs10}This should also be a toptitle in Times New Roman, but much smaller. Using an override tag to change size. +Dialogue: 0,0:00:16.00,0:00:18.00,Alt,,0000,0000,0000,,{\a5}Top-left using the legacy \a5 tag +Dialogue: 0,0:00:18.00,0:00:20.00,Default,,0000,0000,0000,,{\an5}This line is centered on screen.\NAt the bottom of the screen should be two lines in different layers, they are rendered on top of each other because conflict resolution only considers lines in the same layer. +Dialogue: 0,0:00:18.00,0:00:20.00,Default,,0000,0000,0000,,This is in layer 0 +Dialogue: 1,0:00:18.00,0:00:20.00,Default,,0000,0000,0000,,And this line is in layer 1 +Dialogue: 0,0:00:20.00,0:00:22.00,Default,,0000,0000,0000,,Another line in layer 0 +Dialogue: 1,0:00:20.00,0:00:22.00,Default,,0050,0000,0020,,And this line is in layer 1, but has changed its margins so it isn't exactly centered, and it's raised above the other line. +Dialogue: 0,0:00:22.00,0:00:24.00,Default,,0000,0000,0000,,Switching {\fnTimes New Roman}font inline, {\r}and resetting styles +Dialogue: 0,0:00:24.00,0:00:26.00,Default,,0000,0000,0000,,Also {\rAlt}switching to a different style {\r}inline +Dialogue: 0,0:00:26.00,0:00:28.00,Default,,0000,0000,0000,,{\an5\pos(258,131)}Positioning... this line should be in an odd place +Dialogue: 0,0:00:26.00,0:00:28.00,Default,,0000,0000,0000,,{\an5\pos(222,338)\frz29.559}So should this one, and be rotated +Dialogue: 0,0:00:28.00,0:00:30.00,Default,,0000,0000,0000,,{\pos(371,314)\frz338.403\frx42\fry30\org(187,165)}Some more rotation tricks, this time in 3D and with a different origin +Dialogue: 0,0:00:30.00,0:00:32.00,Default,,0000,0000,0000,,{\an5\t(\frz360)}This line is animated and rotates 360 degrees over its duration +Dialogue: 0,0:00:32.00,0:00:34.00,Default,,0000,0000,0000,,{\an5\move(182,157,414,311)}This line moves +Dialogue: 0,0:00:34.00,0:00:36.00,Default,,0000,0000,0000,,{\an5\clip(126,192,487,241)}This line is only partially visible\Nso if you can see this, \clip is handled incorrectly +Dialogue: 0,0:00:36.00,0:00:38.00,Default,,0000,0000,0000,,{\an5\clip(m 178 212 l 163 249 212 302 257 232 309 249 366 241 392 285 473 267 487 210 421 241 353 219 207 258)}And this line has a funnily-shaped clip area +Dialogue: 0,0:00:38.00,0:00:40.00,Default,,0000,0000,0000,,{\an5\pos(321,193)}Here should be a pretty feather with a thin border and no shadow: +Dialogue: 0,0:00:38.00,0:00:40.00,Default,,0000,0000,0000,,{\an5\bord1\shad0\p1\fscx300\fscy300\pos(316,312)}m 0 0 b 33 -3 48 -7 61 -19 b 53 -7 31 -1 1 2 m 9 0 b 9 -5 10 -6 14 -12 b 9 -5 10 -3 10 0 m 10 -1 b 10 -5 11 -8 16 -12 b 17 -12 18 -13 22 -14 b 18 -10 16 -6 15 -1 b 17 -6 19 -10 23 -14 l 26 -15 b 22 -11 20 -6 19 -2 b 24 -11 27 -14 28 -15 b 31 -16 35 -16 39 -16 b 37 -14 36 -10 36 -5 b 36 -9 38 -14 39 -16 b 41 -16 43 -16 45 -15 b 44 -13 43 -10 43 -7 l 29 -3 m 43 -7 b 44 -11 45 -13 47 -15 b 46 -13 46 -11 46 -9 b 46 -11 47 -13 49 -15 b 51 -15 48 -13 48 -9 b 49 -11 49 -14 52 -16 b 55 -16 53 -17 51 -11 l 48 -8 m 54 -13 b 53 -14 54 -15 54 -16 b 54 -15 54 -14 55 -13 b 57 -13 60 -12 62 -14 b 61 -12 55 -12 53 -12 b 55 -11 56 -10 61 -10 b 61 -7 53 -9 52 -11 b 53 -8 55 -7 58 -6 b 57 -5 56 -4 54 -3 b 49 -5 48 -6 47 -9 b 47 -6 50 -4 53 -2 b 49 -3 47 -6 45 -8 b 46 -6 49 -3 52 -1 b 46 2 45 3 43 3 b 40 0 39 -3 40 -6 b 39 -3 39 1 42 3 b 40 6 36 1 34 -4 b 35 -1 36 2 38 5 b 32 7 26 9 22 8 b 19 5 17 2 16 -1 b 17 3 19 5 20 7 b 17 4 16 2 15 0 b 15 2 17 5 19 8 b 15 9 13 3 12 0 l 25 -2 l 42 -7 m 12 0 b 13 3 13 7 17 9 b 12 7 10 1 10 0 +Dialogue: 0,0:00:40.00,0:00:42.00,Default,,0000,0000,0000,,Some other basic font style tests:\NNormal, {\b1}Boldface{\r}, {\i1}Italics{\r}, {\u1}Underline{\r}, {\s1}Strikethrough +Dialogue: 0,0:00:42.00,0:00:44.00,Default,,0000,0000,0000,,There should be no linebreak here,\nbut there should be one here\Nso this is on a separate line. +Dialogue: 0,0:00:44.00,0:00:46.00,Default,,0000,0000,0000,,This line is pushed left by adding some hard spaces to the right\h\h\h\h\h\h\h\h\h\h\h\h\h\h\h\h\h\h\h\h +Dialogue: 0,0:00:44.00,0:00:46.00,Default,,0000,0000,0000,, Regular spaces at line start/end are ignored, so this line is centered +Dialogue: 0,0:00:46.00,0:00:48.00,Default,,0000,0000,0000,,{\an8\q2}This is a long line but it is not broken into several because it's using the \q override tag which changes the line-wrapping mode for a single line. The tag can take several values, 0 is the default which is "smart wrapping" with top lines longer, 1 is regular wrapping, 2 is no wrapping and 3 is smart-wrapping with bottom lines longer. +Dialogue: 0,0:00:46.00,0:00:48.00,Default,,0000,0000,0000,,{\an5\q1}This is a long line using the \q1 override tag to get "dumb" wrapping, make as long lines as possible and first wrap when it'd go off screen. This is mostly visible when the last line generated is short. +Dialogue: 0,0:00:46.00,0:00:48.00,Default,,0000,0000,0000,,{\q3}And this line uses the \q3 wrapping style, which is similar to the \q0 default smart-wrap style, but has lower lines longer than the upper ones. +Dialogue: 0,0:00:48.00,0:00:50.00,Default,,0000,0000,0000,,{\an5}{\bord0\t(\bord10)}This text has a growing border\N{\r\shad0\t(\shad10)}This text has an increasing shadow\N{\r\t(\fry360)}This text is rotating around the Y axis\N{\r\t(\frz720)}This text rotates {\t(\frx360)}and this one even more +Dialogue: 0,0:00:50.00,0:00:52.00,Default,,0000,0000,0000,,{\an5\bord0\shad0}All of this has no border or shadow...\N{\1c&H0000FF&}This is bright red, {\1c&H00FF00&}green, {\1c&HFF0000}blue{\1c&HFFFFFF&}\N{\1a&H80&}50% transparent +Dialogue: 0,0:00:52.00,0:00:54.00,Default,,0000,0000,0000,,{\fsp10}Large inter-letter spacing +Dialogue: 0,0:00:54.00,0:00:56.00,Default,,0000,0000,0000,,{\shad0}No shadow here, just regular border, {\be1}but this is \be1 blurred edges! +Dialogue: 0,0:00:56.00,0:00:58.00,Default,,0000,0000,0000,,{\t(1000,2000,\alpha&HFF&)}Fading out after 1 sec on screen, using \alpha. Everything should fade. +Dialogue: 0,0:00:58.00,0:01:00.00,Default,,0000,0000,0000,,{\fad(1000,1000)}Fading in and out using \fad +Dialogue: 0,0:01:00.00,0:01:02.00,Default,,0000,0000,0000,,{\k10}And {\k5}now {\k20}for {\kf50}ka{\kf20}ra{\K70}o{\K10}ke{\k0}! +Dialogue: 0,0:01:02.00,0:01:04.00,Default,,0000,0000,0000,,{\an5\t()\clip(69,215,573,267)\t(1000,2000,3,\clip(573,267,573,267))}And the last thing on the programme, an animated rectangular \clip, delayed by 1 second. And it even uses acceleration...! \ No newline at end of file diff --git a/docs/compiled/artplayer-plugin-libass.js b/docs/compiled/artplayer-plugin-libass.js new file mode 100644 index 000000000..de489e958 --- /dev/null +++ b/docs/compiled/artplayer-plugin-libass.js @@ -0,0 +1,7 @@ +/*! + * artplayer-plugin-libass.js v1.0.0 + * Github: https://github.com/zhw2590582/ArtPlayer + * (c) 2017-2023 Harvey Zack + * Released under the MIT License. + */ +!function(e,t,s,r,n){var a="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},i="function"==typeof a[r]&&a[r],o=i.cache||{},l="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function c(t,s){if(!o[t]){if(!e[t]){var n="function"==typeof a[r]&&a[r];if(!s&&n)return n(t,!0);if(i)return i(t,!0);if(l&&"string"==typeof t)return l(t);var d=new Error("Cannot find module '"+t+"'");throw d.code="MODULE_NOT_FOUND",d}v.resolve=function(s){var r=e[t][1][s];return null!=r?r:s},v.cache={};var u=o[t]=new c.Module(t);e[t][0].call(u.exports,v,u,u.exports,this)}return o[t].exports;function v(e){var t=v.resolve(e);return!1===t?{}:c(t)}}c.isParcelRequire=!0,c.Module=function(e){this.id=e,this.bundle=c,this.exports={}},c.modules=e,c.cache=o,c.parent=i,c.register=function(t,s){e[t]=[function(e,t){t.exports=s},{}]},Object.defineProperty(c,"root",{get:function(){return a[r]}}),a[r]=c;for(var d=0;d{!function(e){const{version:t,utils:{errorHandle:s}}=e.constructor,r=t.split(".").map(Number);s(r[0]+r[1]/100>=5,`Artplayer.js@${t} is not compatible the artplayerPluginLibass@${i.version}. Please update it to version Artplayer.js@5.x.x`)}(t);let s=new(0,a.default)(t,e);return{name:"artplayerPluginLibass",libass:s.libass,visible:s.visible,init:s.init.bind(s),switch:s.switch.bind(s),show:s.show.bind(s),hide:s.hide.bind(s),destroy:s.destroy.bind(s)}}}s.default=i,i.env="production",i.version="1.0.0",i.build="2023-11-14 12:36:09","undefined"!=typeof window&&(window.artplayerPluginLibass=i)},{"./adapter":"cjgNP","@parcel/transformer-js/src/esmodule-helpers.js":"4ajKp"}],cjgNP:[function(e,t,s){var r=e("@parcel/transformer-js/src/esmodule-helpers.js");r.defineInteropFlag(s);var n=e("libass-wasm"),a=r.interopDefault(n);s.default=class{constructor(e,t){const{constructor:s,template:r}=e;this.art=e,this.$video=r.$video,this.$webvtt=r.$subtitle,this.utils=s.utils,this.libass=null,e.once("ready",this.init.bind(this,t))}async init(e){this.#e(),await this.#t(e),this.#s(),this.art.emit("artplayerPluginLibass:init",this);const t=this.art?.option?.subtitle?.url;t&&"ass"===this.utils.getExt(t)&&this.switch(t)}switch(e){this.art.emit("artplayerPluginLibass:switch",e),e&&"ass"===this.utils.getExt(e)?(this.currentType="ass",this.libass.freeTrack(),this.libass.setTrackByUrl(this.#r(e)),this.visible=this.art.subtitle.show):(this.currentType="webvtt",this.hide(),this.libass.freeTrack())}setVisibility(e){this.visible=e}setOffset(e){this.timeOffset=e}get active(){return"ass"===this.currentType}get visible(){return!!this.libass&&"none"!==this.libass.canvasParent.style.display}set visible(e){this.art.emit("artplayerPluginLibass:visible",e),this.#n(!this.active),this.libass.canvasParent&&(this.libass.canvasParent.style.display=e?"block":"none",e&&this.libass.resize())}get timeOffset(){return this.libass.timeOffset}set timeOffset(e){this.art.emit("artplayerPluginLibass:timeOffset",e),this.libass.timeOffset=e}show(){this.visible=!0}hide(){this.visible=!1}destroy(){this.art.emit("artplayerPluginLibass:destroy"),this.#a(),this.libass.dispose(),URL.revokeObjectURL(this.workerScriptUrl),this.libass=null}async#t(e={}){if(!e.fallbackFont)return this.utils.errorHandle(e.fallbackFont,"artplayerPluginLibass: fallbackFont is required");e.workerUrl||(e.workerUrl="https://cdnjs.cloudflare.com/ajax/libs/libass-wasm/4.1.0/js/subtitles-octopus-worker.js"),e.availableFonts&&(e.availableFonts=Object.entries(e.availableFonts).reduce(((e,[t,s])=>(e[t]=this.#r(s),e)),{})),this.libass=new(0,a.default)({subContent:"[Script Info]\nScriptType: v4.00+",video:this.$video,...e,workerUrl:await this.#i(e),fallbackFont:this.#r(e.fallbackFont),fonts:e.fonts?.map((e=>this.#r(e)))}),this.libass.canvasParent.className="artplayer-plugin-libass",this.libass.canvasParent.style.cssText="\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n user-select: none;\n pointer-events: none;\n z-index: 20;"}#s(){this.switchHandler=this.switch.bind(this),this.visibleHandler=this.setVisibility.bind(this),this.offsetHandler=this.setOffset.bind(this),this.art.on("subtitle",this.visibleHandler),this.art.on("subtitleLoad",this.switchHandler),this.art.on("subtitleOffset",this.offsetHandler),this.art.once("destroy",this.destroy.bind(this))}#a(){this.art.off("subtitle",this.visibleHandler),this.art.off("subtitleLoad",this.switchHandler),this.art.off("subtitleOffset",this.offsetHandler)}#n(e){this.$webvtt.style.visibility=e?"visible":"hidden"}#r(e){return this.#o(e)?e:new URL(e,document.baseURI).toString()}#o(e){return/^https?:\/\//.test(e)}#i({workerUrl:e,wasmUrl:t}){return new Promise((s=>{fetch(e).then((e=>e.text())).then((r=>{let n=r;n=n.replace(/wasmBinaryFile\s*=\s*"(subtitles-octopus-worker\.wasm)"/g,((s,r)=>`wasmBinaryFile = "${t=t?this.#r(t):new URL(r,e).toString()}"`));const a=new Blob([n],{type:"text/javascript"});s(URL.createObjectURL(a))}))}))}#e(){let e=!1;try{if("object"==typeof WebAssembly&&"function"==typeof WebAssembly.instantiate){const t=new WebAssembly.Module(Uint8Array.of(0,97,115,109,1,0,0,0));t instanceof WebAssembly.Module&&(e=new WebAssembly.Instance(t)instanceof WebAssembly.Instance)}}catch(e){}this.utils.errorHandle(e,"Browser does not support WebAssembly")}}},{"libass-wasm":"5pEVf","@parcel/transformer-js/src/esmodule-helpers.js":"4ajKp"}],"5pEVf":[function(e,t,s){"use strict";"function"==typeof SubtitlesOctopusOnLoad&&SubtitlesOctopusOnLoad(),t.exports&&(t.exports=function(e){var t=!1;try{if("object"==typeof WebAssembly&&"function"==typeof WebAssembly.instantiate){const e=new WebAssembly.Module(Uint8Array.of(0,97,115,109,1,0,0,0));e instanceof WebAssembly.Module&&(t=new WebAssembly.Instance(e)instanceof WebAssembly.Instance)}}catch(e){}console.log("WebAssembly support detected: "+(t?"yes":"no"));var s=this;function r(){s.setCurrentTime(s.video.currentTime+s.timeOffset)}function n(){s.setIsPaused(!1,s.video.currentTime+s.timeOffset)}function a(){s.setIsPaused(!0,s.video.currentTime+s.timeOffset)}function i(){s.video.removeEventListener("timeupdate",r,!1)}function o(){s.video.addEventListener("timeupdate",r,!1);var e=s.video.currentTime+s.timeOffset;s.setCurrentTime(e)}function l(){s.setRate(s.video.playbackRate)}function c(){s.setIsPaused(!0,s.video.currentTime+s.timeOffset)}function d(e){e.target.removeEventListener(e.type,d,!1),s.resize()}function u(){var e=s.renderFramesData,t=performance.now();s.ctx.clearRect(0,0,s.canvas.width,s.canvas.height);for(var r=0;r=1?a[i]:1;var o=new ImageData(a,n.w,n.h);s.bufferCanvasCtx.putImageData(o,0,0),s.ctx.drawImage(s.bufferCanvas,n.x,n.y)}if(s.debug){var l=Math.round(performance.now()-t),c=e.blendTime;void 0!==c?console.log("render: "+Math.round(e.spentTime-c)+" ms, blend: "+Math.round(c)+" ms, draw: "+l+" ms; TOTAL="+Math.round(e.spentTime+l)+" ms"):console.log(Math.round(e.spentTime)+" ms (+ "+l+" ms draw)"),s.renderStart=performance.now()}}function v(){var e=s.renderFramesData,t=performance.now();s.ctx.clearRect(0,0,s.canvas.width,s.canvas.height);for(var r=0;r0?s.resize():s.video.addEventListener("loadedmetadata",d,!1))},s.getVideoPosition=function(){var e=s.video.videoWidth/s.video.videoHeight,t=s.video.offsetWidth,r=s.video.offsetHeight,n=t,a=r;return t/r>e?n=Math.floor(r*e):a=Math.floor(t/e),{width:n,height:a,x:(t-n)/2,y:(r-a)/2}},s.setSubUrl=function(e){s.subUrl=e},s.renderFrameData=null,s.workerActive=!1,s.frameId=0,s.onWorkerMessage=function(e){s.workerActive||(s.workerActive=!0,s.onReadyEvent&&s.onReadyEvent());var t=e.data;switch(t.target){case"stdout":console.log(t.content);break;case"console-log":console.log.apply(console,JSON.parse(t.content));break;case"console-debug":console.debug.apply(console,JSON.parse(t.content));break;case"console-info":console.info.apply(console,JSON.parse(t.content));break;case"console-warn":console.warn.apply(console,JSON.parse(t.content));break;case"console-error":console.error.apply(console,JSON.parse(t.content));break;case"stderr":console.error(t.content);break;case"window":window[t.method]();break;case"canvas":switch(t.op){case"getContext":s.ctx=s.canvas.getContext(t.type,t.attributes);break;case"resize":s.resize(t.width,t.height);break;case"renderCanvas":s.lastRenderTime0&&a>s.maxRenderHeight&&(a=s.maxRenderHeight),e*=a/t,t=a}return{width:e,height:t}}((a=s.getVideoPosition()).width*s.pixelRatio,a.height*s.pixelRatio);e=i.width,t=i.height;var o=s.canvasParent.getBoundingClientRect().top-s.video.getBoundingClientRect().top;r=a.y-o,n=a.x}e&&t?s.canvas.width==e&&s.canvas.height==t&&s.canvas.style.top==r&&s.canvas.style.left==n||(s.canvas.width=e,s.canvas.height=t,null!=a&&(s.canvasParent.style.position="relative",s.canvas.style.display="block",s.canvas.style.position="absolute",s.canvas.style.width=a.width+"px",s.canvas.style.height=a.height+"px",s.canvas.style.top=r+"px",s.canvas.style.left=n+"px",s.canvas.style.pointerEvents="none"),s.worker.postMessage({target:"canvas",width:s.canvas.width,height:s.canvas.height})):s.video||console.error("width or height is 0. You should specify width & height for resize.")},s.resizeWithTimeout=function(){s.resize(),setTimeout(s.resize,100)},s.runBenchmark=function(){s.worker.postMessage({target:"runBenchmark"})},s.customMessage=function(e,t){t=t||{},s.worker.postMessage({target:"custom",userData:e,preMain:t.preMain})},s.setCurrentTime=function(e){s.worker.postMessage({target:"video",currentTime:e})},s.setTrackByUrl=function(e){s.worker.postMessage({target:"set-track-by-url",url:e})},s.setTrack=function(e){s.worker.postMessage({target:"set-track",content:e})},s.freeTrack=function(e){s.worker.postMessage({target:"free-track"})},s.render=s.setCurrentTime,s.setIsPaused=function(e,t){s.worker.postMessage({target:"video",isPaused:e,currentTime:t})},s.setRate=function(e){s.worker.postMessage({target:"video",rate:e})},s.dispose=function(){s.worker.postMessage({target:"destroy"}),s.worker.terminate(),s.worker.removeEventListener("message",s.onWorkerMessage),s.worker.removeEventListener("error",s.workerError),s.workerActive=!1,s.worker=null,s.video&&(s.video.removeEventListener("timeupdate",r,!1),s.video.removeEventListener("playing",n,!1),s.video.removeEventListener("pause",a,!1),s.video.removeEventListener("seeking",i,!1),s.video.removeEventListener("seeked",o,!1),s.video.removeEventListener("ratechange",l,!1),s.video.removeEventListener("waiting",c,!1),s.video.removeEventListener("loadedmetadata",d,!1),document.removeEventListener("fullscreenchange",s.resizeWithTimeout,!1),document.removeEventListener("mozfullscreenchange",s.resizeWithTimeout,!1),document.removeEventListener("webkitfullscreenchange",s.resizeWithTimeout,!1),document.removeEventListener("msfullscreenchange",s.resizeWithTimeout,!1),window.removeEventListener("resize",s.resizeWithTimeout,!1),s.video.parentNode.removeChild(s.canvasParent),s.video=null),s.ro&&(s.ro.disconnect(),s.ro=null),s.onCustomMessage=null,s.onErrorEvent=null,s.onReadyEvent=null},s.fetchFromWorker=function(e,t,r){try{var n=e.target,a=setTimeout((function(){o(Error("Error: Timeout while try to fetch "+n))}),5e3),i=function(e){e.data.target==n&&(t(e.data),s.worker.removeEventListener("message",i),s.worker.removeEventListener("error",o),clearTimeout(a))},o=function(e){r(e),s.worker.removeEventListener("message",i),s.worker.removeEventListener("error",o),clearTimeout(a)};s.worker.addEventListener("message",i),s.worker.addEventListener("error",o),s.worker.postMessage(e)}catch(e){r(e)}},s.createEvent=function(e){s.worker.postMessage({target:"create-event",event:e})},s.getEvents=function(e,t){s.fetchFromWorker({target:"get-events"},(function(t){e(t.events)}),t)},s.setEvent=function(e,t){s.worker.postMessage({target:"set-event",event:e,index:t})},s.removeEvent=function(e){s.worker.postMessage({target:"remove-event",index:e})},s.createStyle=function(e){s.worker.postMessage({target:"create-style",style:e})},s.getStyles=function(e,t){s.fetchFromWorker({target:"get-styles"},(function(t){e(t.styles)}),t)},s.setStyle=function(e,t){s.worker.postMessage({target:"set-style",style:e,index:t})},s.removeStyle=function(e){s.worker.postMessage({target:"remove-style",index:e})},s.init()})},{}],"4ajKp":[function(e,t,s){s.interopDefault=function(e){return e&&e.__esModule?e:{default:e}},s.defineInteropFlag=function(e){Object.defineProperty(e,"__esModule",{value:!0})},s.exportAll=function(e,t){return Object.keys(e).forEach((function(s){"default"===s||"__esModule"===s||t.hasOwnProperty(s)||Object.defineProperty(t,s,{enumerable:!0,get:function(){return e[s]}})})),t},s.export=function(e,t,s){Object.defineProperty(e,t,{enumerable:!0,get:s})}},{}]},["abjMI"],"abjMI","parcelRequire03dd"); \ No newline at end of file diff --git a/docs/compiled/artplayer-plugin-libass.legacy.js b/docs/compiled/artplayer-plugin-libass.legacy.js new file mode 100644 index 000000000..29ffdc7ad --- /dev/null +++ b/docs/compiled/artplayer-plugin-libass.legacy.js @@ -0,0 +1,7 @@ +/*! + * artplayer-plugin-libass.js v1.0.0 + * Github: https://github.com/zhw2590582/ArtPlayer + * (c) 2017-2023 Harvey Zack + * Released under the MIT License. + */ +!function(e,t,r,n,s){var o="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},a="function"==typeof o[n]&&o[n],i=a.cache||{},c="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function l(t,r){if(!i[t]){if(!e[t]){var s="function"==typeof o[n]&&o[n];if(!r&&s)return s(t,!0);if(a)return a(t,!0);if(c&&"string"==typeof t)return c(t);var u=new Error("Cannot find module '"+t+"'");throw u.code="MODULE_NOT_FOUND",u}p.resolve=function(r){var n=e[t][1][r];return null!=n?n:r},p.cache={};var f=i[t]=new l.Module(t);e[t][0].call(f.exports,p,f,f.exports,this)}return i[t].exports;function p(e){var t=p.resolve(e);return!1===t?{}:l(t)}}l.isParcelRequire=!0,l.Module=function(e){this.id=e,this.bundle=l,this.exports={}},l.modules=e,l.cache=i,l.parent=a,l.register=function(t,r){e[t]=[function(e,t){t.exports=r},{}]},Object.defineProperty(l,"root",{get:function(){return o[n]}}),o[n]=l;for(var u=0;u=5,"Artplayer.js@".concat(r," is not compatible the artplayerPluginLibass@").concat(a.version,". Please update it to version Artplayer.js@5.x.x"))}(t);var r=new(0,o.default)(t,e);return{name:"artplayerPluginLibass",libass:r.libass,visible:r.visible,init:r.init.bind(r),switch:r.switch.bind(r),show:r.show.bind(r),hide:r.hide.bind(r),destroy:r.destroy.bind(r)}}}r.default=a,a.env="production",a.version="1.0.0",a.build="2023-11-14 12:36:10","undefined"!=typeof window&&(window.artplayerPluginLibass=a)},{"./adapter":"9NihZ","@parcel/transformer-js/src/esmodule-helpers.js":"38Wbh"}],"9NihZ":[function(e,t,r){var n=e("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(r),n.export(r,"default",(function(){return I}));var s=e("@swc/helpers/src/_async_to_generator.mjs"),o=n.interopDefault(s),a=e("@swc/helpers/src/_class_call_check.mjs"),i=n.interopDefault(a),c=e("@swc/helpers/src/_class_private_method_get.mjs"),l=n.interopDefault(c),u=e("@swc/helpers/src/_class_private_method_init.mjs"),f=n.interopDefault(u),p=e("@swc/helpers/src/_create_class.mjs"),d=n.interopDefault(p),h=e("@swc/helpers/src/_object_spread.mjs"),m=n.interopDefault(h),v=e("@swc/helpers/src/_object_spread_props.mjs"),b=n.interopDefault(v),y=e("@swc/helpers/src/_sliced_to_array.mjs"),_=n.interopDefault(y),g=e("@swc/helpers/src/_ts_generator.mjs"),w=n.interopDefault(g),j=e("libass-wasm"),k=n.interopDefault(j),x="[Script Info]\nScriptType: v4.00+",O=new WeakSet,E=new WeakSet,P=new WeakSet,T=new WeakSet,F=new WeakSet,L=new WeakSet,W=new WeakSet,S=new WeakSet,I=function(){"use strict";function e(t,r){(0,i.default)(this,e),(0,f.default)(this,O),(0,f.default)(this,E),(0,f.default)(this,P),(0,f.default)(this,T),(0,f.default)(this,F),(0,f.default)(this,L),(0,f.default)(this,W),(0,f.default)(this,S);var n=t.constructor,s=t.template;this.art=t,this.$video=s.$video,this.$webvtt=s.$subtitle,this.utils=n.utils,this.libass=null,t.once("ready",this.init.bind(this,r))}return(0,d.default)(e,[{key:"init",value:function(e){var t=this;return(0,o.default)((function(){var r,n,s,o;return(0,w.default)(this,(function(a){switch(a.label){case 0:return(0,l.default)(t,S,B).call(t),[4,(0,l.default)(t,O,C).call(t,e)];case 1:return a.sent(),(0,l.default)(t,E,R).call(t),t.art.emit("artplayerPluginLibass:init",t),(o=null===(r=t.art)||void 0===r||null===(n=r.option)||void 0===n||null===(s=n.subtitle)||void 0===s?void 0:s.url)&&"ass"===t.utils.getExt(o)&&t.switch(o),[2]}}))}))()}},{key:"switch",value:function(e){this.art.emit("artplayerPluginLibass:switch",e),e&&"ass"===this.utils.getExt(e)?(this.currentType="ass",this.libass.freeTrack(),this.libass.setTrackByUrl((0,l.default)(this,F,U).call(this,e)),this.visible=this.art.subtitle.show):(this.currentType="webvtt",this.hide(),this.libass.freeTrack())}},{key:"setVisibility",value:function(e){this.visible=e}},{key:"setOffset",value:function(e){this.timeOffset=e}},{key:"active",get:function(){return"ass"===this.currentType}},{key:"visible",get:function(){return!!this.libass&&"none"!==this.libass.canvasParent.style.display},set:function(e){this.art.emit("artplayerPluginLibass:visible",e),(0,l.default)(this,T,D).call(this,!this.active),this.libass.canvasParent&&(this.libass.canvasParent.style.display=e?"block":"none",e&&this.libass.resize())}},{key:"timeOffset",get:function(){return this.libass.timeOffset},set:function(e){this.art.emit("artplayerPluginLibass:timeOffset",e),this.libass.timeOffset=e}},{key:"show",value:function(){this.visible=!0}},{key:"hide",value:function(){this.visible=!1}},{key:"destroy",value:function(){this.art.emit("artplayerPluginLibass:destroy"),(0,l.default)(this,P,A).call(this),this.libass.dispose(),URL.revokeObjectURL(this.workerScriptUrl),this.libass=null}}]),e}();function C(){return M.apply(this,arguments)}function M(){return M=(0,o.default)((function(){var e,t,r,n,s,o,a,i=arguments;return(0,w.default)(this,(function(c){switch(c.label){case 0:return t=this,(e=i.length>0&&void 0!==i[0]?i[0]:{}).fallbackFont?(e.workerUrl||(e.workerUrl="https://cdnjs.cloudflare.com/ajax/libs/libass-wasm/4.1.0/js/subtitles-octopus-worker.js"),e.availableFonts&&(e.availableFonts=Object.entries(e.availableFonts).reduce((function(e,r){var n=(0,_.default)(r,2),s=n[0],o=n[1];return e[s]=(0,l.default)(t,F,U).call(t,o),e}),{})),n=this,s=k.default.bind,o=[(0,m.default)({subContent:x,video:this.$video},e)],a={},[4,(0,l.default)(this,W,H).call(this,e)]):[2,this.utils.errorHandle(e.fallbackFont,"artplayerPluginLibass: fallbackFont is required")];case 1:return n.libass=new(s.apply(k.default,[void 0,b.default.apply(void 0,o.concat([(a.workerUrl=c.sent(),a.fallbackFont=(0,l.default)(this,F,U).call(this,e.fallbackFont),a.fonts=null===(r=e.fonts)||void 0===r?void 0:r.map((function(e){return(0,l.default)(t,F,U).call(t,e)})),a)]))])),this.libass.canvasParent.className="artplayer-plugin-libass",this.libass.canvasParent.style.cssText="\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n user-select: none;\n pointer-events: none;\n z-index: 20;",[2]}}))})),M.apply(this,arguments)}function R(){this.switchHandler=this.switch.bind(this),this.visibleHandler=this.setVisibility.bind(this),this.offsetHandler=this.setOffset.bind(this),this.art.on("subtitle",this.visibleHandler),this.art.on("subtitleLoad",this.switchHandler),this.art.on("subtitleOffset",this.offsetHandler),this.art.once("destroy",this.destroy.bind(this))}function A(){this.art.off("subtitle",this.visibleHandler),this.art.off("subtitleLoad",this.switchHandler),this.art.off("subtitleOffset",this.offsetHandler)}function D(e){this.$webvtt.style.visibility=e?"visible":"hidden"}function U(e){return(0,l.default)(this,L,z).call(this,e)?e:new URL(e,document.baseURI).toString()}function z(e){return/^https?:\/\//.test(e)}function H(e){var t=e.workerUrl,r=e.wasmUrl,n=this;return new Promise((function(e){fetch(t).then((function(e){return e.text()})).then((function(s){var o=s;o=o.replace(/wasmBinaryFile\s*=\s*"(subtitles-octopus-worker\.wasm)"/g,(function(e,s){return r=r?(0,l.default)(n,F,U).call(n,r):new URL(s,t).toString(),'wasmBinaryFile = "'.concat(r,'"')}));var a=new Blob([o],{type:"text/javascript"});e(URL.createObjectURL(a))}))}))}function B(){var e=!1;try{if("object"==typeof WebAssembly&&"function"==typeof WebAssembly.instantiate){var t=new WebAssembly.Module(Uint8Array.of(0,97,115,109,1,0,0,0));t instanceof WebAssembly.Module&&(e=new WebAssembly.Instance(t)instanceof WebAssembly.Instance)}}catch(e){}this.utils.errorHandle(e,"Browser does not support WebAssembly")}},{"@swc/helpers/src/_async_to_generator.mjs":"3hQHk","@swc/helpers/src/_class_call_check.mjs":"7KuKS","@swc/helpers/src/_class_private_method_get.mjs":"kk95v","@swc/helpers/src/_class_private_method_init.mjs":"2ZqFD","@swc/helpers/src/_create_class.mjs":"1OxxQ","@swc/helpers/src/_object_spread.mjs":"cp2gr","@swc/helpers/src/_object_spread_props.mjs":"kyA7Y","@swc/helpers/src/_sliced_to_array.mjs":"4qVKy","@swc/helpers/src/_ts_generator.mjs":"9SwlE","libass-wasm":"3Pmnq","@parcel/transformer-js/src/esmodule-helpers.js":"38Wbh"}],"3hQHk":[function(e,t,r){var n=e("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(r),n.export(r,"default",(function(){return s._}));var s=e("../esm/_async_to_generator.js")},{"../esm/_async_to_generator.js":"7D6Py","@parcel/transformer-js/src/esmodule-helpers.js":"38Wbh"}],"7D6Py":[function(e,t,r){var n=e("@parcel/transformer-js/src/esmodule-helpers.js");function s(e,t,r,n,s,o,a){try{var i=e[o](a),c=i.value}catch(e){return void r(e)}i.done?t(c):Promise.resolve(c).then(n,s)}function o(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var a=e.apply(t,r);function i(e){s(a,n,o,i,c,"next",e)}function c(e){s(a,n,o,i,c,"throw",e)}i(void 0)}))}}n.defineInteropFlag(r),n.export(r,"_async_to_generator",(function(){return o})),n.export(r,"_",(function(){return o}))},{"@parcel/transformer-js/src/esmodule-helpers.js":"38Wbh"}],"38Wbh":[function(e,t,r){r.interopDefault=function(e){return e&&e.__esModule?e:{default:e}},r.defineInteropFlag=function(e){Object.defineProperty(e,"__esModule",{value:!0})},r.exportAll=function(e,t){return Object.keys(e).forEach((function(r){"default"===r||"__esModule"===r||t.hasOwnProperty(r)||Object.defineProperty(t,r,{enumerable:!0,get:function(){return e[r]}})})),t},r.export=function(e,t,r){Object.defineProperty(e,t,{enumerable:!0,get:r})}},{}],"7KuKS":[function(e,t,r){var n=e("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(r),n.export(r,"default",(function(){return s._}));var s=e("../esm/_class_call_check.js")},{"../esm/_class_call_check.js":"5Bg0U","@parcel/transformer-js/src/esmodule-helpers.js":"38Wbh"}],"5Bg0U":[function(e,t,r){var n=e("@parcel/transformer-js/src/esmodule-helpers.js");function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}n.defineInteropFlag(r),n.export(r,"_class_call_check",(function(){return s})),n.export(r,"_",(function(){return s}))},{"@parcel/transformer-js/src/esmodule-helpers.js":"38Wbh"}],kk95v:[function(e,t,r){var n=e("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(r),n.export(r,"default",(function(){return s._}));var s=e("../esm/_class_private_method_get.js")},{"../esm/_class_private_method_get.js":"pQ7EL","@parcel/transformer-js/src/esmodule-helpers.js":"38Wbh"}],pQ7EL:[function(e,t,r){var n=e("@parcel/transformer-js/src/esmodule-helpers.js");function s(e,t,r){if(!t.has(e))throw new TypeError("attempted to get private field on non-instance");return r}n.defineInteropFlag(r),n.export(r,"_class_private_method_get",(function(){return s})),n.export(r,"_",(function(){return s}))},{"@parcel/transformer-js/src/esmodule-helpers.js":"38Wbh"}],"2ZqFD":[function(e,t,r){var n=e("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(r),n.export(r,"default",(function(){return s._}));var s=e("../esm/_class_private_method_init.js")},{"../esm/_class_private_method_init.js":"eyt9C","@parcel/transformer-js/src/esmodule-helpers.js":"38Wbh"}],eyt9C:[function(e,t,r){var n=e("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(r),n.export(r,"_class_private_method_init",(function(){return o})),n.export(r,"_",(function(){return o}));var s=e("./_check_private_redeclaration.js");function o(e,t){(0,s._check_private_redeclaration)(e,t),t.add(e)}},{"./_check_private_redeclaration.js":"81WQh","@parcel/transformer-js/src/esmodule-helpers.js":"38Wbh"}],"81WQh":[function(e,t,r){var n=e("@parcel/transformer-js/src/esmodule-helpers.js");function s(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")}n.defineInteropFlag(r),n.export(r,"_check_private_redeclaration",(function(){return s})),n.export(r,"_",(function(){return s}))},{"@parcel/transformer-js/src/esmodule-helpers.js":"38Wbh"}],"1OxxQ":[function(e,t,r){var n=e("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(r),n.export(r,"default",(function(){return s._}));var s=e("../esm/_create_class.js")},{"../esm/_create_class.js":"8sVT6","@parcel/transformer-js/src/esmodule-helpers.js":"38Wbh"}],"8sVT6":[function(e,t,r){var n=e("@parcel/transformer-js/src/esmodule-helpers.js");function s(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0;i--)(s=e[i])&&(a=(o<3?s(a):o>3?s(t,r,a):s(t,r))||a);return o>3&&a&&Object.defineProperty(t,r,a),a}function f(e,t){return function(r,n){t(r,n,e)}}function p(e,t,r,n,s,o){function a(e){if(void 0!==e&&"function"!=typeof e)throw new TypeError("Function expected");return e}for(var i,c=n.kind,l="getter"===c?"get":"setter"===c?"set":"value",u=!t&&e?n.static?e:e.prototype:null,f=t||(u?Object.getOwnPropertyDescriptor(u,n.name):{}),p=!1,d=r.length-1;d>=0;d--){var h={};for(var m in n)h[m]="access"===m?{}:n[m];for(var m in n.access)h.access[m]=n.access[m];h.addInitializer=function(e){if(p)throw new TypeError("Cannot add initializers after decoration has completed");o.push(a(e||null))};var v=(0,r[d])("accessor"===c?{get:f.get,set:f.set}:f[l],h);if("accessor"===c){if(void 0===v)continue;if(null===v||"object"!=typeof v)throw new TypeError("Object expected");(i=a(v.get))&&(f.get=i),(i=a(v.set))&&(f.set=i),(i=a(v.init))&&s.unshift(i)}else(i=a(v))&&("field"===c?s.unshift(i):f[l]=i)}u&&Object.defineProperty(u,n.name,f),p=!0}function d(e,t,r){for(var n=arguments.length>2,s=0;s0&&s[s.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!s||i[1]>s[0]&&i[1]=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function j(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,s,o=r.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)a.push(n.value)}catch(e){s={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(s)throw s.error}}return a}function k(){for(var e=[],t=0;t1||i(e,t)}))})}function i(e,t){try{(r=s[e](t)).value instanceof E?Promise.resolve(r.value.v).then(c,l):u(o[0][2],r)}catch(e){u(o[0][3],e)}var r}function c(e){i("next",e)}function l(e){i("throw",e)}function u(e,t){e(t),o.shift(),o.length&&i(o[0][0],o[0][1])}}function T(e){var t,r;return t={},n("next"),n("throw",(function(e){throw e})),n("return"),t[Symbol.iterator]=function(){return this},t;function n(n,s){t[n]=e[n]?function(t){return(r=!r)?{value:E(e[n](t)),done:!1}:s?s(t):t}:s}}function F(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,r=e[Symbol.asyncIterator];return r?r.call(e):(e=w(e),t={},n("next"),n("throw"),n("return"),t[Symbol.asyncIterator]=function(){return this},t);function n(r){t[r]=e[r]&&function(t){return new Promise((function(n,s){(function(e,t,r,n){Promise.resolve(n).then((function(t){e({value:t,done:r})}),t)})(n,s,(t=e[r](t)).done,t.value)}))}}}function L(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}var W=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t};function S(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&_(t,e,r);return W(t,e),t}function I(e){return e&&e.__esModule?e:{default:e}}function C(e,t,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(e):n?n.value:t.get(e)}function M(e,t,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!s:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(e,r):s?s.value=r:t.set(e,r),r}function R(e,t){if(null===t||"object"!=typeof t&&"function"!=typeof t)throw new TypeError("Cannot use 'in' operator on non-object");return"function"==typeof e?t===e:e.has(t)}function A(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose]}if("function"!=typeof n)throw new TypeError("Object not disposable.");e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0});return t}var D="function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n};function U(e){function t(t){e.error=e.hasError?new D(t,e.error,"An error was suppressed during disposal."):t,e.hasError=!0}return function r(){for(;e.stack.length;){var n=e.stack.pop();try{var s=n.dispose&&n.dispose.call(n.value);if(n.async)return Promise.resolve(s).then(r,(function(e){return t(e),r()}))}catch(e){t(e)}}if(e.hasError)throw e.error}()}r.default={__extends:i,__assign:c,__rest:l,__decorate:u,__param:f,__metadata:v,__awaiter:b,__generator:y,__createBinding:_,__exportStar:g,__values:w,__read:j,__spread:k,__spreadArrays:x,__spreadArray:O,__await:E,__asyncGenerator:P,__asyncDelegator:T,__asyncValues:F,__makeTemplateObject:L,__importStar:S,__importDefault:I,__classPrivateFieldGet:C,__classPrivateFieldSet:M,__classPrivateFieldIn:R,__addDisposableResource:A,__disposeResources:U}},{"@swc/helpers/src/_type_of.mjs":"7XNJj","@parcel/transformer-js/src/esmodule-helpers.js":"38Wbh"}],"7XNJj":[function(e,t,r){var n=e("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(r),n.export(r,"default",(function(){return s._}));var s=e("../esm/_type_of.js")},{"../esm/_type_of.js":"9tzuI","@parcel/transformer-js/src/esmodule-helpers.js":"38Wbh"}],"9tzuI":[function(e,t,r){var n=e("@parcel/transformer-js/src/esmodule-helpers.js");function s(e){return e&&"undefined"!=typeof Symbol&&e.constructor===Symbol?"symbol":typeof e}n.defineInteropFlag(r),n.export(r,"_type_of",(function(){return s})),n.export(r,"_",(function(){return s}))},{"@parcel/transformer-js/src/esmodule-helpers.js":"38Wbh"}],"3Pmnq":[function(e,t,r){"use strict";"function"==typeof SubtitlesOctopusOnLoad&&SubtitlesOctopusOnLoad(),t.exports&&(t.exports=function(e){var t=!1;try{if("object"==typeof WebAssembly&&"function"==typeof WebAssembly.instantiate){var r=new WebAssembly.Module(Uint8Array.of(0,97,115,109,1,0,0,0));r instanceof WebAssembly.Module&&(t=new WebAssembly.Instance(r)instanceof WebAssembly.Instance)}}catch(e){}console.log("WebAssembly support detected: "+(t?"yes":"no"));var n=this;function s(){n.setCurrentTime(n.video.currentTime+n.timeOffset)}function o(){n.setIsPaused(!1,n.video.currentTime+n.timeOffset)}function a(){n.setIsPaused(!0,n.video.currentTime+n.timeOffset)}function i(){n.video.removeEventListener("timeupdate",s,!1)}function c(){n.video.addEventListener("timeupdate",s,!1);var e=n.video.currentTime+n.timeOffset;n.setCurrentTime(e)}function l(){n.setRate(n.video.playbackRate)}function u(){n.setIsPaused(!0,n.video.currentTime+n.timeOffset)}function f(e){e.target.removeEventListener(e.type,f,!1),n.resize()}function p(){var e=n.renderFramesData,t=performance.now();n.ctx.clearRect(0,0,n.canvas.width,n.canvas.height);for(var r=0;r=1?o[a]:1;var i=new ImageData(o,s.w,s.h);n.bufferCanvasCtx.putImageData(i,0,0),n.ctx.drawImage(n.bufferCanvas,s.x,s.y)}if(n.debug){var c=Math.round(performance.now()-t),l=e.blendTime;void 0!==l?console.log("render: "+Math.round(e.spentTime-l)+" ms, blend: "+Math.round(l)+" ms, draw: "+c+" ms; TOTAL="+Math.round(e.spentTime+c)+" ms"):console.log(Math.round(e.spentTime)+" ms (+ "+c+" ms draw)"),n.renderStart=performance.now()}}function d(){var e=n.renderFramesData,t=performance.now();n.ctx.clearRect(0,0,n.canvas.width,n.canvas.height);for(var r=0;r0?n.resize():n.video.addEventListener("loadedmetadata",f,!1))},n.getVideoPosition=function(){var e=n.video.videoWidth/n.video.videoHeight,t=n.video.offsetWidth,r=n.video.offsetHeight,s=t,o=r;return t/r>e?s=Math.floor(r*e):o=Math.floor(t/e),{width:s,height:o,x:(t-s)/2,y:(r-o)/2}},n.setSubUrl=function(e){n.subUrl=e},n.renderFrameData=null,n.workerActive=!1,n.frameId=0,n.onWorkerMessage=function(e){n.workerActive||(n.workerActive=!0,n.onReadyEvent&&n.onReadyEvent());var t=e.data;switch(t.target){case"stdout":console.log(t.content);break;case"console-log":console.log.apply(console,JSON.parse(t.content));break;case"console-debug":console.debug.apply(console,JSON.parse(t.content));break;case"console-info":console.info.apply(console,JSON.parse(t.content));break;case"console-warn":console.warn.apply(console,JSON.parse(t.content));break;case"console-error":console.error.apply(console,JSON.parse(t.content));break;case"stderr":console.error(t.content);break;case"window":window[t.method]();break;case"canvas":switch(t.op){case"getContext":n.ctx=n.canvas.getContext(t.type,t.attributes);break;case"resize":n.resize(t.width,t.height);break;case"renderCanvas":n.lastRenderTime0&&o>n.maxRenderHeight&&(o=n.maxRenderHeight),e*=o/t,t=o}return{width:e,height:t}}((o=n.getVideoPosition()).width*n.pixelRatio,o.height*n.pixelRatio);e=a.width,t=a.height;var i=n.canvasParent.getBoundingClientRect().top-n.video.getBoundingClientRect().top;r=o.y-i,s=o.x}e&&t?n.canvas.width==e&&n.canvas.height==t&&n.canvas.style.top==r&&n.canvas.style.left==s||(n.canvas.width=e,n.canvas.height=t,null!=o&&(n.canvasParent.style.position="relative",n.canvas.style.display="block",n.canvas.style.position="absolute",n.canvas.style.width=o.width+"px",n.canvas.style.height=o.height+"px",n.canvas.style.top=r+"px",n.canvas.style.left=s+"px",n.canvas.style.pointerEvents="none"),n.worker.postMessage({target:"canvas",width:n.canvas.width,height:n.canvas.height})):n.video||console.error("width or height is 0. You should specify width & height for resize.")},n.resizeWithTimeout=function(){n.resize(),setTimeout(n.resize,100)},n.runBenchmark=function(){n.worker.postMessage({target:"runBenchmark"})},n.customMessage=function(e,t){t=t||{},n.worker.postMessage({target:"custom",userData:e,preMain:t.preMain})},n.setCurrentTime=function(e){n.worker.postMessage({target:"video",currentTime:e})},n.setTrackByUrl=function(e){n.worker.postMessage({target:"set-track-by-url",url:e})},n.setTrack=function(e){n.worker.postMessage({target:"set-track",content:e})},n.freeTrack=function(e){n.worker.postMessage({target:"free-track"})},n.render=n.setCurrentTime,n.setIsPaused=function(e,t){n.worker.postMessage({target:"video",isPaused:e,currentTime:t})},n.setRate=function(e){n.worker.postMessage({target:"video",rate:e})},n.dispose=function(){n.worker.postMessage({target:"destroy"}),n.worker.terminate(),n.worker.removeEventListener("message",n.onWorkerMessage),n.worker.removeEventListener("error",n.workerError),n.workerActive=!1,n.worker=null,n.video&&(n.video.removeEventListener("timeupdate",s,!1),n.video.removeEventListener("playing",o,!1),n.video.removeEventListener("pause",a,!1),n.video.removeEventListener("seeking",i,!1),n.video.removeEventListener("seeked",c,!1),n.video.removeEventListener("ratechange",l,!1),n.video.removeEventListener("waiting",u,!1),n.video.removeEventListener("loadedmetadata",f,!1),document.removeEventListener("fullscreenchange",n.resizeWithTimeout,!1),document.removeEventListener("mozfullscreenchange",n.resizeWithTimeout,!1),document.removeEventListener("webkitfullscreenchange",n.resizeWithTimeout,!1),document.removeEventListener("msfullscreenchange",n.resizeWithTimeout,!1),window.removeEventListener("resize",n.resizeWithTimeout,!1),n.video.parentNode.removeChild(n.canvasParent),n.video=null),n.ro&&(n.ro.disconnect(),n.ro=null),n.onCustomMessage=null,n.onErrorEvent=null,n.onReadyEvent=null},n.fetchFromWorker=function(e,t,r){try{var s=e.target,o=setTimeout((function(){i(Error("Error: Timeout while try to fetch "+s))}),5e3),a=function(e){e.data.target==s&&(t(e.data),n.worker.removeEventListener("message",a),n.worker.removeEventListener("error",i),clearTimeout(o))},i=function(e){r(e),n.worker.removeEventListener("message",a),n.worker.removeEventListener("error",i),clearTimeout(o)};n.worker.addEventListener("message",a),n.worker.addEventListener("error",i),n.worker.postMessage(e)}catch(e){r(e)}},n.createEvent=function(e){n.worker.postMessage({target:"create-event",event:e})},n.getEvents=function(e,t){n.fetchFromWorker({target:"get-events"},(function(t){e(t.events)}),t)},n.setEvent=function(e,t){n.worker.postMessage({target:"set-event",event:e,index:t})},n.removeEvent=function(e){n.worker.postMessage({target:"remove-event",index:e})},n.createStyle=function(e){n.worker.postMessage({target:"create-style",style:e})},n.getStyles=function(e,t){n.fetchFromWorker({target:"get-styles"},(function(t){e(t.styles)}),t)},n.setStyle=function(e,t){n.worker.postMessage({target:"set-style",style:e,index:t})},n.removeStyle=function(e){n.worker.postMessage({target:"remove-style",index:e})},n.init()})},{}]},["7Csdv"],"7Csdv","parcelRequire03dd"); \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index d85d7decb..8b12d8ae0 100644 --- a/docs/index.html +++ b/docs/index.html @@ -55,6 +55,10 @@ artplayer-plugin-vtt-thumbnail +
  • + artplayer-plugin-libass +
    • Tools
    • diff --git a/docs/uncompiled/artplayer-plugin-libass/index.js b/docs/uncompiled/artplayer-plugin-libass/index.js new file mode 100644 index 000000000..09c61cfb9 --- /dev/null +++ b/docs/uncompiled/artplayer-plugin-libass/index.js @@ -0,0 +1,1913 @@ +// modules are defined as an array +// [ module function, map of requires ] +// +// map of requires is short require name -> numeric require +// +// anything defined in a previous bundle is accessed via the +// orig method which is the require for previous bundles + +(function (modules, entry, mainEntry, parcelRequireName, globalName) { + /* eslint-disable no-undef */ + var globalObject = + typeof globalThis !== 'undefined' + ? globalThis + : typeof self !== 'undefined' + ? self + : typeof window !== 'undefined' + ? window + : typeof global !== 'undefined' + ? global + : {}; + /* eslint-enable no-undef */ + + // Save the require from previous bundle to this closure if any + var previousRequire = + typeof globalObject[parcelRequireName] === 'function' && + globalObject[parcelRequireName]; + + var cache = previousRequire.cache || {}; + // Do not use `require` to prevent Webpack from trying to bundle this call + var nodeRequire = + typeof module !== 'undefined' && + typeof module.require === 'function' && + module.require.bind(module); + + function newRequire(name, jumped) { + if (!cache[name]) { + if (!modules[name]) { + // if we cannot find the module within our internal map or + // cache jump to the current global require ie. the last bundle + // that was added to the page. + var currentRequire = + typeof globalObject[parcelRequireName] === 'function' && + globalObject[parcelRequireName]; + if (!jumped && currentRequire) { + return currentRequire(name, true); + } + + // If there are other bundles on this page the require from the + // previous one is saved to 'previousRequire'. Repeat this as + // many times as there are bundles until the module is found or + // we exhaust the require chain. + if (previousRequire) { + return previousRequire(name, true); + } + + // Try the node require function if it exists. + if (nodeRequire && typeof name === 'string') { + return nodeRequire(name); + } + + var err = new Error("Cannot find module '" + name + "'"); + err.code = 'MODULE_NOT_FOUND'; + throw err; + } + + localRequire.resolve = resolve; + localRequire.cache = {}; + + var module = (cache[name] = new newRequire.Module(name)); + + modules[name][0].call( + module.exports, + localRequire, + module, + module.exports, + this + ); + } + + return cache[name].exports; + + function localRequire(x) { + var res = localRequire.resolve(x); + return res === false ? {} : newRequire(res); + } + + function resolve(x) { + var id = modules[name][1][x]; + return id != null ? id : x; + } + } + + function Module(moduleName) { + this.id = moduleName; + this.bundle = newRequire; + this.exports = {}; + } + + newRequire.isParcelRequire = true; + newRequire.Module = Module; + newRequire.modules = modules; + newRequire.cache = cache; + newRequire.parent = previousRequire; + newRequire.register = function (id, exports) { + modules[id] = [ + function (require, module) { + module.exports = exports; + }, + {}, + ]; + }; + + Object.defineProperty(newRequire, 'root', { + get: function () { + return globalObject[parcelRequireName]; + }, + }); + + globalObject[parcelRequireName] = newRequire; + + for (var i = 0; i < entry.length; i++) { + newRequire(entry[i]); + } + + if (mainEntry) { + // Expose entry point to Node, AMD or browser globals + // Based on https://github.com/ForbesLindesay/umd/blob/master/template.js + var mainExports = newRequire(mainEntry); + + // CommonJS + if (typeof exports === 'object' && typeof module !== 'undefined') { + module.exports = mainExports; + + // RequireJS + } else if (typeof define === 'function' && define.amd) { + define(function () { + return mainExports; + }); + + //