feat: add danmuku plugin documentation and i18n setup guide

- Created a new documentation file for the danmuku plugin with code examples.
- Added a comprehensive guide for language settings (i18n) including default languages, importing languages, adding new languages, and modifying existing languages.
- Included code snippets for initializing the Artplayer with different language configurations.
This commit is contained in:
Harvey Zhao committed 2026-02-12 16:55:43 +08:00
1 parent 687a34c6b3
commit cfaaea6a5c
72 files changed
+436 -392

No files matched your search

+129 -34
View File
@@ -209,15 +209,16 @@
}
})({"fIfgU":[function(require,module,exports,__globalThis) {
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
parcelHelpers.defineInteropFlag(exports);
parcelHelpers.export(exports, "default", ()=>artplayerPluginWebsr);
var _upscaler = require("./Upscaler");
var _upscalerDefault = parcelHelpers.interopDefault(_upscaler);
var _upscalerJs = require("./Upscaler.js");
var _upscalerJsDefault = parcelHelpers.interopDefault(_upscalerJs);
function artplayerPluginWebsr(option = {
networkSize: "medium",
compare: false
compare: false,
weightsBaseUrl: "/weights",
workerUrl: "/worker/main.js",
videoScale: 2
}) {
return async (art)=>{
return (art)=>{
const { $video, $player } = art.template;
const $canvas = document.createElement("canvas");
$player.appendChild($canvas);
@@ -227,6 +228,8 @@ function artplayerPluginWebsr(option = {
$canvas.style.top = "50%";
$canvas.style.left = "50%";
$canvas.style.transform = "translate(-50%, -50%)";
$canvas.style.opacity = "0";
$canvas.style.transition = "opacity 0.2s ease";
function calcCanvasSize() {
const videoElement = art.video;
const containerWidth = $player.offsetWidth || 640;
@@ -243,27 +246,65 @@ function artplayerPluginWebsr(option = {
displayHeight
};
}
const upscaler = new (0, _upscalerDefault.default)(option);
upscaler.init();
await upscaler.startRealtimeUpscale($video, $canvas, option.networkSize);
// 初始化 canvas 显示尺寸
if (!(0, _upscalerJsDefault.default) || !(0, _upscalerJsDefault.default).isSupported || !(0, _upscalerJsDefault.default).isSupported()) {
console.warn("Upscaler is not supported in this environment");
return;
}
const upscaler = new (0, _upscalerJsDefault.default)({
networkSize: option.networkSize || "medium",
weightsBaseUrl: option.weightsBaseUrl || "/weights",
workerUrl: option.workerUrl || "/worker/main.js",
videoScale: option.videoScale || 2
});
let realtimeStarted = false;
async function startRealtime() {
if (realtimeStarted) return;
realtimeStarted = true;
try {
await new Promise((resolve, reject)=>{
if ($video.readyState >= 1) {
resolve();
return;
}
const onLoaded = ()=>{
cleanup();
resolve();
};
const onError = ()=>{
cleanup();
reject(new Error("Failed to load video metadata"));
};
const cleanup = ()=>{
$video.removeEventListener("loadedmetadata", onLoaded);
$video.removeEventListener("error", onError);
};
$video.addEventListener("loadedmetadata", onLoaded);
$video.addEventListener("error", onError);
});
await upscaler.startRealtimeUpscale($video, $canvas, option.networkSize || upscaler.networkSize);
requestAnimationFrame(()=>{
$canvas.style.opacity = "1";
});
} catch (e) {
console.error("artplayer-plugin-upscaler: failed to start realtime", e);
}
}
const { displayWidth, displayHeight } = calcCanvasSize();
$canvas.style.width = displayWidth + "px";
$canvas.style.height = displayHeight + "px";
// 对比模式
let comparePosition = 50;
let isDragging = false;
// 创建对比手柄
let compareEnabled = !!option.compare;
const $handler = document.createElement("div");
$handler.style.position = "absolute";
$handler.style.width = "3px";
$handler.style.backgroundColor = "rgba(255, 255, 255, 0.5)";
$handler.style.backgroundColor = "rgba(255, 255, 255, 0.75)";
$handler.style.cursor = "ew-resize";
$handler.style.zIndex = "12";
$handler.style.pointerEvents = "auto";
$handler.style.display = option.compare ? "block" : "none";
$handler.style.boxShadow = "0 0 4px rgba(0, 0, 0, 0.1)";
if (option.compare) {
$handler.style.display = compareEnabled ? "block" : "none";
$handler.style.boxShadow = "0 0 2px rgba(0, 0, 0, 0.1)";
if (compareEnabled) {
$player.appendChild($handler);
$handler.addEventListener("mousedown", handleMouseDown);
document.addEventListener("mousemove", handleMouseMove);
@@ -271,7 +312,7 @@ function artplayerPluginWebsr(option = {
updateCompareMask();
}
function updateCompareMask() {
if (option.compare) {
if (compareEnabled) {
const { displayWidth, displayHeight } = calcCanvasSize();
const gradient = `linear-gradient(to right, transparent 0%, transparent ${comparePosition}%, black ${comparePosition}%, black 100%)`;
$canvas.style.maskImage = gradient;
@@ -287,10 +328,10 @@ function artplayerPluginWebsr(option = {
} else $canvas.style.maskImage = "none";
}
function handleMouseDown(e) {
if (option.compare) isDragging = true;
if (compareEnabled) isDragging = true;
}
function handleMouseMove(e) {
if (option.compare && isDragging) {
if (compareEnabled && isDragging) {
const rect = $player.getBoundingClientRect();
const { displayWidth } = calcCanvasSize();
const containerWidth = $player.offsetWidth || 640;
@@ -306,7 +347,7 @@ function artplayerPluginWebsr(option = {
isDragging = false;
}
art.on("destroy", ()=>{
upscaler.dispose();
if (upscaler && typeof upscaler.dispose === "function") upscaler.dispose();
$handler.removeEventListener("mousedown", handleMouseDown);
document.removeEventListener("mousemove", handleMouseMove);
document.removeEventListener("mouseup", handleMouseUp);
@@ -317,14 +358,48 @@ function artplayerPluginWebsr(option = {
$canvas.style.height = displayHeight + "px";
updateCompareMask();
});
art.on("play", ()=>{
startRealtime();
});
function update(newOption = {}) {
if (!newOption || typeof newOption !== "object") return;
if (Object.prototype.hasOwnProperty.call(newOption, "compare")) {
const nextCompare = !!newOption.compare;
option.compare = nextCompare;
compareEnabled = nextCompare;
if (compareEnabled) {
if (!$handler.parentNode) $player.appendChild($handler);
$handler.style.display = "block";
$handler.addEventListener("mousedown", handleMouseDown);
document.addEventListener("mousemove", handleMouseMove);
document.addEventListener("mouseup", handleMouseUp);
updateCompareMask();
} else {
$canvas.style.maskImage = "none";
$handler.style.display = "none";
$handler.removeEventListener("mousedown", handleMouseDown);
document.removeEventListener("mousemove", handleMouseMove);
document.removeEventListener("mouseup", handleMouseUp);
}
}
if (newOption.networkSize) {
const nextSize = newOption.networkSize;
option.networkSize = nextSize;
if (upscaler && typeof upscaler.stopRealtimeUpscale === "function") upscaler.stopRealtimeUpscale();
realtimeStarted = false;
if (!art.paused) startRealtime();
}
}
return {
name: "artplayerPluginWebsr"
name: "artplayerPluginWebsr",
upscaler,
update
};
};
}
if (typeof window !== "undefined") window.artplayerPluginWebsr = artplayerPluginWebsr;
window.artplayerPluginWebsr = artplayerPluginWebsr;
},{"./Upscaler":"d22Rz","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"d22Rz":[function(require,module,exports,__globalThis) {
},{"./Upscaler.js":"d22Rz","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"d22Rz":[function(require,module,exports,__globalThis) {
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
parcelHelpers.defineInteropFlag(exports);
class Upscaler {
@@ -370,8 +445,8 @@ class Upscaler {
weightsUrl: `${weightsBaseUrl}/cnn-28.json`
}
};
this.networkSize = options.networkSize || "medium";
this.weightsBaseUrl = weightsBaseUrl;
this.networkSize = options.networkSize || "medium";
this.workerUrl = options.workerUrl || "/worker/main.js";
this.timeouts = {
...Upscaler.DEFAULT_TIMEOUTS,
@@ -390,6 +465,7 @@ class Upscaler {
this.processingType = null;
this.realtimeLoopId = null;
this.realtimeState = null;
this.init();
}
init({ prewarm = true } = {}) {
if (!Upscaler.isSupported()) throw new Error("Upscaler is not supported in this environment");
@@ -424,6 +500,7 @@ class Upscaler {
}
handleWorkerMessage(event) {
const { data } = event;
console.debug("Worker message:", data);
if (!data.cmd) return;
const { cmd } = data;
if (cmd === "progress") {
@@ -644,18 +721,27 @@ class Upscaler {
const width = videoElement.videoWidth;
const height = videoElement.videoHeight;
if (!width || !height) throw new Error("Invalid video dimensions");
canvasElement.width = width * scale;
canvasElement.height = height * scale;
if (typeof canvasElement.transferControlToOffscreen !== "function") throw new Error("OffscreenCanvas is not supported in this environment");
const offscreen = canvasElement.transferControlToOffscreen();
const firstInit = !canvasElement._upscalerTransferred;
let offscreen = null;
if (firstInit) {
canvasElement.width = width * scale;
canvasElement.height = height * scale;
if (typeof canvasElement.transferControlToOffscreen !== "function") throw new Error("OffscreenCanvas is not supported in this environment");
offscreen = canvasElement.transferControlToOffscreen();
canvasElement._upscalerTransferred = true;
}
const captureCanvas = document.createElement("canvas");
captureCanvas.width = width;
captureCanvas.height = height;
const captureCtx = captureCanvas.getContext("2d");
if (this.realtimeLoopId) {
cancelAnimationFrame(this.realtimeLoopId);
this.realtimeLoopId = null;
}
this.getWorker().postMessage({
const initPayload = {
cmd: "realtimeInit",
data: {
upscaled: offscreen,
upscaled: firstInit ? offscreen : null,
resolution: {
width,
height,
@@ -666,25 +752,34 @@ class Upscaler {
network_name: network.name,
weights
}
}, [
};
if (firstInit && offscreen) this.getWorker().postMessage(initPayload, [
offscreen
]);
else this.getWorker().postMessage(initPayload);
this.realtimeState = {
running: true,
video: videoElement,
canvas: canvasElement,
scale,
busy: false,
frameIndex: 0
frameIndex: 0,
captureCanvas,
captureCtx
};
const loop = async ()=>{
if (!this.realtimeState || !this.realtimeState.running) return;
const state = this.realtimeState;
const v = state.video;
if (!v.paused && !v.ended && !state.busy) {
const haveCurrentData = v.HAVE_CURRENT_DATA || 2;
if (!v.paused && !v.ended && !state.busy && v.readyState >= haveCurrentData && v.videoWidth > 0 && v.videoHeight > 0) {
state.busy = true;
try {
const frame = await createImageBitmap(v);
const captureCanvas = state.captureCanvas;
const captureCtx = state.captureCtx;
if (!captureCanvas || !captureCtx) throw new Error("Missing capture canvas");
captureCtx.drawImage(v, 0, 0, captureCanvas.width, captureCanvas.height);
const frame = await createImageBitmap(captureCanvas);
state.frameIndex += 1;
this.getWorker().postMessage({
cmd: "realtimeFrame",
@@ -1 +1 @@
{"mappings":"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 truncated
{"mappings":"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 truncated