@pixi/assets
Version:
Asset manager for PixiJS, loading resolving and Cacheing
1 lines • 5.44 kB
Source Map (JSON)
{"version":3,"file":"loadVideo.mjs","sources":["../../../../src/loader/parsers/textures/loadVideo.ts"],"sourcesContent":["import { BaseTexture, extensions, ExtensionType, settings, utils, VideoResource } from '@pixi/core';\nimport { checkDataUrl } from '../../../utils/checkDataUrl';\nimport { checkExtension } from '../../../utils/checkExtension';\nimport { LoaderParserPriority } from '../LoaderParser';\nimport { createTexture } from './utils/createTexture';\n\nimport type { IBaseTextureOptions, IVideoResourceOptions, Texture } from '@pixi/core';\nimport type { ResolvedAsset } from '../../../types';\nimport type { Loader } from '../../Loader';\nimport type { LoaderParser } from '../LoaderParser';\n\nconst validVideoExtensions = ['.mp4', '.m4v', '.webm', '.ogv'];\nconst validVideoMIMEs = [\n 'video/mp4',\n 'video/webm',\n 'video/ogg',\n];\n\n/**\n * Configuration for the `loadVideo` loader parser.\n * @memberof PIXI\n * @see PIXI.loadVideo\n */\nexport interface LoadVideoConfig\n{\n /**\n * When set to `true`, the video will start playing automatically after being loaded,\n * otherwise it will not start playing automatically.\n * @default true\n */\n defaultAutoPlay: boolean;\n\n /**\n * How many times a second to update the texture of the loaded video by default.\n * If 0, `requestVideoFrameCallback` is used to update the texture.\n * If `requestVideoFrameCallback` is not available, the texture is updated every render.\n * @default 0\n */\n defaultUpdateFPS: number;\n\n /**\n * When set to `true`, the loaded video will loop by default.\n * @default false\n */\n defaultLoop: boolean;\n\n /**\n * When set to `true`, the loaded video will be muted.\n * @default false\n */\n defaultMuted: boolean;\n\n /**\n * When set to `true`, opening the video on mobile devices is prevented.\n * @default true\n */\n defaultPlaysinline: boolean;\n}\n\n/**\n * Loads videos into Textures.\n * @memberof PIXI\n */\nexport const loadVideo = {\n name: 'loadVideo',\n\n extension: {\n type: ExtensionType.LoadParser,\n priority: LoaderParserPriority.High,\n },\n\n config: {\n defaultAutoPlay: true,\n defaultUpdateFPS: 0,\n defaultLoop: false,\n defaultMuted: false,\n defaultPlaysinline: true,\n },\n\n test(url: string): boolean\n {\n return checkDataUrl(url, validVideoMIMEs) || checkExtension(url, validVideoExtensions);\n },\n\n async load(\n url: string,\n loadAsset?: ResolvedAsset<IBaseTextureOptions<IVideoResourceOptions>>,\n loader?: Loader): Promise<Texture>\n {\n let texture: Texture;\n const response = await settings.ADAPTER.fetch(url);\n const blob = await response.blob();\n const blobURL = URL.createObjectURL(blob);\n\n try\n {\n const options = {\n autoPlay: this.config.defaultAutoPlay,\n updateFPS: this.config.defaultUpdateFPS,\n loop: this.config.defaultLoop,\n muted: this.config.defaultMuted,\n playsinline: this.config.defaultPlaysinline,\n ...loadAsset?.data?.resourceOptions,\n autoLoad: true,\n };\n const src = new VideoResource(blobURL, options);\n\n await src.load();\n\n const base = new BaseTexture(src, {\n alphaMode: await utils.detectVideoAlphaMode(),\n resolution: utils.getResolutionOfUrl(url),\n ...loadAsset?.data,\n });\n\n base.resource.src = url;\n texture = createTexture(base, loader, url);\n texture.baseTexture.once('destroyed', () =>\n {\n URL.revokeObjectURL(blobURL);\n });\n }\n catch (e)\n {\n URL.revokeObjectURL(blobURL);\n\n throw e;\n }\n\n return texture;\n },\n\n unload(texture: Texture): void\n {\n texture.destroy(true);\n }\n} as LoaderParser<Texture, IBaseTextureOptions<IVideoResourceOptions>, LoadVideoConfig>;\n\nextensions.add(loadVideo);\n"],"names":[],"mappings":";;;;;AAWA,MAAM,uBAAuB,CAAC,QAAQ,QAAQ,SAAS,MAAM,GACvD,kBAAkB;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AACJ,GA+Ca,YAAY;AAAA,EACrB,MAAM;AAAA,EAEN,WAAW;AAAA,IACP,MAAM,cAAc;AAAA,IACpB,UAAU,qBAAqB;AAAA,EACnC;AAAA,EAEA,QAAQ;AAAA,IACJ,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,aAAa;AAAA,IACb,cAAc;AAAA,IACd,oBAAoB;AAAA,EACxB;AAAA,EAEA,KAAK,KACL;AACI,WAAO,aAAa,KAAK,eAAe,KAAK,eAAe,KAAK,oBAAoB;AAAA,EACzF;AAAA,EAEA,MAAM,KACF,KACA,WACA,QACJ;AACQ,QAAA;AAEJ,UAAM,OAAO,OADI,MAAM,SAAS,QAAQ,MAAM,GAAG,GACrB,KAAK,GAC3B,UAAU,IAAI,gBAAgB,IAAI;AAGxC,QAAA;AACI,YAAM,UAAU;AAAA,QACZ,UAAU,KAAK,OAAO;AAAA,QACtB,WAAW,KAAK,OAAO;AAAA,QACvB,MAAM,KAAK,OAAO;AAAA,QAClB,OAAO,KAAK,OAAO;AAAA,QACnB,aAAa,KAAK,OAAO;AAAA,QACzB,GAAG,WAAW,MAAM;AAAA,QACpB,UAAU;AAAA,MAER,GAAA,MAAM,IAAI,cAAc,SAAS,OAAO;AAE9C,YAAM,IAAI;AAEJ,YAAA,OAAO,IAAI,YAAY,KAAK;AAAA,QAC9B,WAAW,MAAM,MAAM,qBAAqB;AAAA,QAC5C,YAAY,MAAM,mBAAmB,GAAG;AAAA,QACxC,GAAG,WAAW;AAAA,MAAA,CACjB;AAED,WAAK,SAAS,MAAM,KACpB,UAAU,cAAc,MAAM,QAAQ,GAAG,GACzC,QAAQ,YAAY,KAAK,aAAa,MACtC;AACI,YAAI,gBAAgB,OAAO;AAAA,MAAA,CAC9B;AAAA,aAEE,GACP;AACQ,YAAA,IAAA,gBAAgB,OAAO,GAErB;AAAA,IACV;AAEO,WAAA;AAAA,EACX;AAAA,EAEA,OAAO,SACP;AACI,YAAQ,QAAQ,EAAI;AAAA,EACxB;AACJ;AAEA,WAAW,IAAI,SAAS;"}