102 lines
5.7 KiB
JavaScript
102 lines
5.7 KiB
JavaScript
shadow$provide.module$node_modules$pixi_DOT_js$lib$assets$loader$parsers$textures$loadVideoTextures = function(global, require, module, exports) {
|
|
function crossOrigin(element, url, crossorigin) {
|
|
void 0 !== crossorigin || url.startsWith("data:") ? !1 !== crossorigin && (element.crossOrigin = "string" === typeof crossorigin ? crossorigin : "anonymous") : element.crossOrigin = determineCrossOrigin(url);
|
|
}
|
|
function preloadVideo(element) {
|
|
return new Promise((resolve, reject) => {
|
|
function loaded() {
|
|
cleanup();
|
|
resolve();
|
|
}
|
|
function error(err) {
|
|
cleanup();
|
|
reject(err);
|
|
}
|
|
function cleanup() {
|
|
element.removeEventListener("canplaythrough", loaded);
|
|
element.removeEventListener("error", error);
|
|
}
|
|
element.addEventListener("canplaythrough", loaded);
|
|
element.addEventListener("error", error);
|
|
element.load();
|
|
});
|
|
}
|
|
function determineCrossOrigin(url, loc = globalThis.location) {
|
|
if (url.startsWith("data:")) {
|
|
return "";
|
|
}
|
|
loc || (loc = globalThis.location);
|
|
url = new URL(url, document.baseURI);
|
|
return url.hostname !== loc.hostname || url.port !== loc.port || url.protocol !== loc.protocol ? "anonymous" : "";
|
|
}
|
|
global = require("module$node_modules$pixi_DOT_js$lib$extensions$Extensions");
|
|
var VideoSource = require("module$node_modules$pixi_DOT_js$lib$rendering$renderers$shared$texture$sources$VideoSource"), detectVideoAlphaMode = require("module$node_modules$pixi_DOT_js$lib$utils$browser$detectVideoAlphaMode"), getResolutionOfUrl = require("module$node_modules$pixi_DOT_js$lib$utils$network$getResolutionOfUrl"), testVideoFormat = require("module$node_modules$pixi_DOT_js$lib$assets$detections$utils$testVideoFormat"), checkDataUrl = require("module$node_modules$pixi_DOT_js$lib$assets$utils$checkDataUrl"),
|
|
checkExtension = require("module$node_modules$pixi_DOT_js$lib$assets$utils$checkExtension"), createTexture = require("module$node_modules$pixi_DOT_js$lib$assets$loader$parsers$textures$utils$createTexture");
|
|
"use strict";
|
|
const potentialVideoExtensions = ".mp4 .m4v .webm .ogg .ogv .h264 .avi .mov".split(" ");
|
|
let validVideoExtensions, validVideoMIMEs;
|
|
require = {name:"loadVideo", id:"video", extension:{type:global.ExtensionType.LoadParser, name:"loadVideo"}, test(url) {
|
|
if (!validVideoExtensions || !validVideoMIMEs) {
|
|
var supportedExtensions = [];
|
|
const supportedMimes = [];
|
|
for (const ext of potentialVideoExtensions) {
|
|
const mimeType = VideoSource.VideoSource.MIME_TYPES[ext.substring(1)] || `video/${ext.substring(1)}`;
|
|
testVideoFormat.testVideoFormat(mimeType) && (supportedExtensions.push(ext), supportedMimes.includes(mimeType) || supportedMimes.push(mimeType));
|
|
}
|
|
const {validVideoExtensions:ve, validVideoMime:vm} = {validVideoExtensions:supportedExtensions, validVideoMime:supportedMimes};
|
|
validVideoExtensions = ve;
|
|
validVideoMIMEs = vm;
|
|
}
|
|
supportedExtensions = checkDataUrl.checkDataUrl(url, validVideoMIMEs);
|
|
url = checkExtension.checkExtension(url, validVideoExtensions);
|
|
return supportedExtensions || url;
|
|
}, async load(url, asset, loader) {
|
|
const options = {...VideoSource.VideoSource.defaultOptions, resolution:asset.data?.resolution || getResolutionOfUrl.getResolutionOfUrl(url), alphaMode:asset.data?.alphaMode || await detectVideoAlphaMode.detectVideoAlphaMode(), ...asset.data}, videoElement = document.createElement("video"), attributeMap = {preload:!1 !== options.autoLoad ? "auto" : void 0, "webkit-playsinline":!1 !== options.playsinline ? "" : void 0, playsinline:!1 !== options.playsinline ? "" : void 0, muted:!0 === options.muted ?
|
|
"" : void 0, loop:!0 === options.loop ? "" : void 0, autoplay:!1 !== options.autoPlay ? "" : void 0};
|
|
Object.keys(attributeMap).forEach(key => {
|
|
const value = attributeMap[key];
|
|
void 0 !== value && videoElement.setAttribute(key, value);
|
|
});
|
|
!0 === options.muted && (videoElement.muted = !0);
|
|
crossOrigin(videoElement, url, options.crossorigin);
|
|
const sourceElement = document.createElement("source");
|
|
if (options.mime) {
|
|
var mime = options.mime;
|
|
} else {
|
|
url.startsWith("data:") ? mime = url.slice(5, url.indexOf(";")) : url.startsWith("blob:") || (mime = url.split("?")[0].slice(url.lastIndexOf(".") + 1).toLowerCase(), mime = VideoSource.VideoSource.MIME_TYPES[mime] || `video/${mime}`);
|
|
}
|
|
sourceElement.src = url;
|
|
mime && (sourceElement.type = mime);
|
|
return new Promise((resolve, reject) => {
|
|
async function onCanPlay() {
|
|
const base = new VideoSource.VideoSource({...options, resource:videoElement});
|
|
cleanup();
|
|
asset.data.preload && await preloadVideo(videoElement);
|
|
resolve(createTexture.createTexture(base, loader, url));
|
|
}
|
|
function onError(event) {
|
|
cleanup();
|
|
reject(event);
|
|
}
|
|
function cleanup() {
|
|
videoElement.removeEventListener("canplay", onCanPlay);
|
|
videoElement.removeEventListener("error", onError);
|
|
sourceElement.removeEventListener("error", onError);
|
|
}
|
|
options.preload && !options.autoPlay && videoElement.load();
|
|
videoElement.addEventListener("canplay", onCanPlay);
|
|
videoElement.addEventListener("error", onError);
|
|
sourceElement.addEventListener("error", onError);
|
|
videoElement.appendChild(sourceElement);
|
|
});
|
|
}, unload(texture) {
|
|
texture.destroy(!0);
|
|
}};
|
|
exports.crossOrigin = crossOrigin;
|
|
exports.determineCrossOrigin = determineCrossOrigin;
|
|
exports.loadVideoTextures = require;
|
|
exports.preloadVideo = preloadVideo;
|
|
};
|
|
|
|
//# sourceMappingURL=module$node_modules$pixi_DOT_js$lib$assets$loader$parsers$textures$loadVideoTextures.js.map
|