mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-23 22:01:20 -08:00
refactor: Update video element in Artplayer to support custom canvas or video
This commit is contained in:
1 parent
7fa69a7de8
commit
7f6c9c8ee1
27 files changed
+326
-287
No files matched your search
@@ -1,65 +0,0 @@
|
||||
export default class Extension {
|
||||
constructor(canvas) {
|
||||
this.canvas = canvas;
|
||||
this.methods = {};
|
||||
this.listeners = {};
|
||||
this.properties = {};
|
||||
|
||||
const handler = {
|
||||
get: (target, prop) => {
|
||||
if (prop in target.properties) {
|
||||
return target.properties[prop];
|
||||
}
|
||||
if (prop in target.methods) {
|
||||
return target.methods[prop];
|
||||
}
|
||||
if (prop === 'addEventListener') {
|
||||
return target.addEventListener.bind(target);
|
||||
}
|
||||
if (prop === 'removeEventListener') {
|
||||
return target.removeEventListener.bind(target);
|
||||
}
|
||||
if (prop === 'getOriginalCanvas') {
|
||||
return () => target.canvas;
|
||||
}
|
||||
return target.canvas[prop];
|
||||
},
|
||||
set: (target, prop, value) => {
|
||||
if (prop in target.canvas) {
|
||||
target.canvas[prop] = value;
|
||||
} else {
|
||||
target.properties[prop] = value;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
};
|
||||
|
||||
handler[Symbol.hasInstance] = (instance) => {
|
||||
return instance instanceof HTMLCanvasElement || instance === this.proxy;
|
||||
};
|
||||
|
||||
this.proxy = new Proxy(this, handler);
|
||||
|
||||
return this.proxy;
|
||||
}
|
||||
|
||||
addEventListener(type, listener, options) {
|
||||
if (!this.listeners[type]) {
|
||||
this.listeners[type] = [];
|
||||
this.canvas.addEventListener(
|
||||
type,
|
||||
(event) => {
|
||||
this.listeners[type].forEach((l) => l(event));
|
||||
},
|
||||
options,
|
||||
);
|
||||
}
|
||||
this.listeners[type].push(listener);
|
||||
}
|
||||
|
||||
removeEventListener(type, listener) {
|
||||
if (this.listeners[type]) {
|
||||
this.listeners[type] = this.listeners[type].filter((l) => l !== listener);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,98 +0,0 @@
|
||||
export default class ArtplayerPluginCanvas extends HTMLCanvasElement {
|
||||
constructor(art) {
|
||||
super();
|
||||
|
||||
this.art = art;
|
||||
console.log(art);
|
||||
|
||||
this._muted = false;
|
||||
this._volume = 1;
|
||||
this._src = '';
|
||||
this._currentTime = 0;
|
||||
this._playbackRate = 1;
|
||||
|
||||
this.loop = false;
|
||||
this.ended = false;
|
||||
this.paused = true;
|
||||
this.readyState = 0;
|
||||
this.videoWidth = 0;
|
||||
this.videoHeight = 0;
|
||||
this.autoplay = false;
|
||||
this.duration = NaN;
|
||||
|
||||
this.buffered = {
|
||||
length: 0,
|
||||
start: () => 0,
|
||||
end: () => 0,
|
||||
};
|
||||
|
||||
this.textTracks = [{ activeCues: [] }];
|
||||
}
|
||||
|
||||
get muted() {
|
||||
console.log('get muted');
|
||||
return this._muted;
|
||||
}
|
||||
|
||||
set muted(muted) {
|
||||
console.log('set muted');
|
||||
this._muted = muted;
|
||||
}
|
||||
|
||||
get volume() {
|
||||
console.log('get volume');
|
||||
return this._volume;
|
||||
}
|
||||
|
||||
set volume(percentage) {
|
||||
console.log('set volume');
|
||||
this._volume = percentage;
|
||||
}
|
||||
|
||||
get src() {
|
||||
console.log('get src');
|
||||
return this._src;
|
||||
}
|
||||
|
||||
set src(newSrc) {
|
||||
console.log('set src');
|
||||
this._src = newSrc;
|
||||
}
|
||||
|
||||
get currentTime() {
|
||||
console.log('get currentTime');
|
||||
return this._currentTime;
|
||||
}
|
||||
|
||||
set currentTime(time) {
|
||||
console.log('set currentTime');
|
||||
this._currentTime = time;
|
||||
}
|
||||
|
||||
get playbackRate() {
|
||||
console.log('get playbackRate');
|
||||
return this._playbackRate;
|
||||
}
|
||||
|
||||
set playbackRate(rate) {
|
||||
console.log('set playbackRate');
|
||||
this._playbackRate = rate;
|
||||
}
|
||||
|
||||
async play() {
|
||||
console.log('play');
|
||||
return true;
|
||||
}
|
||||
|
||||
pause() {
|
||||
console.log('pause');
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof window !== 'undefined') {
|
||||
window['ArtplayerPluginCanvas'] = ArtplayerPluginCanvas;
|
||||
|
||||
if (!customElements.get('art-plugin-canvas')) {
|
||||
customElements.define('art-plugin-canvas', ArtplayerPluginCanvas, { extends: 'canvas' });
|
||||
}
|
||||
}
|
||||
Whitespace-only changes.
@@ -1,14 +0,0 @@
|
||||
import type Artplayer from 'artplayer';
|
||||
|
||||
export = ArtplayerPluginCanvas;
|
||||
export as namespace ArtplayerPluginCanvas;
|
||||
|
||||
type Option = {
|
||||
//
|
||||
};
|
||||
|
||||
type Result = {
|
||||
name: 'ArtplayerPluginCanvas';
|
||||
};
|
||||
|
||||
declare const ArtplayerPluginCanvas: (option: Option) => (art: Artplayer) => Result;
|
||||
@@ -22,5 +22,5 @@ if (typeof document !== 'undefined') {
|
||||
}
|
||||
|
||||
if (typeof window !== 'undefined') {
|
||||
window['ArtplayerPluginVast'] = artplayerPluginVast;
|
||||
window['artplayerPluginVast'] = artplayerPluginVast;
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
# artplayer-proxy-libmedia
|
||||
|
||||
libmedia proxy for ArtPlayer
|
||||
|
||||
## Demo
|
||||
|
||||
[https://artplayer.org](https://artplayer.org/?libs=./uncompiled/artplayer-proxy-libmedia/index.js&example=libmedia)
|
||||
|
||||
## License
|
||||
|
||||
MIT © Harvey Zack
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"license": "MIT",
|
||||
"version": "1.0.0",
|
||||
"name": "artplayer-proxy-libmedia",
|
||||
"types": "types/artplayer-proxy-libmedia.d.ts",
|
||||
"description": "libmedia proxy for ArtPlayer",
|
||||
"main": "dist/artplayer-proxy-libmedia.js",
|
||||
"legacy": "dist/artplayer-proxy-libmedia.legacy.js",
|
||||
"author": "Harvey Zack <laozhaochaguan@gmail.com>",
|
||||
"browserslist": "last 1 Chrome version",
|
||||
"homepage": "https://artplayer.org",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/zhw2590582/ArtPlayer.git"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/zhw2590582/ArtPlayer/issues"
|
||||
},
|
||||
"keywords": [
|
||||
"html5",
|
||||
"video",
|
||||
"player"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
export default function artplayerProxyLibmedia(option) {
|
||||
return (art) => {
|
||||
return document.createElement('video');
|
||||
};
|
||||
}
|
||||
|
||||
if (typeof window !== 'undefined') {
|
||||
window['artplayerProxyLibmedia'] = artplayerProxyLibmedia;
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
import type Artplayer from 'artplayer';
|
||||
|
||||
export = artplayerProxyLibmedia;
|
||||
export as namespace artplayerProxyLibmedia;
|
||||
|
||||
type Option = {
|
||||
//
|
||||
};
|
||||
|
||||
type Result = {
|
||||
name: 'artplayerProxyLibmedia';
|
||||
};
|
||||
|
||||
declare const artplayerProxyLibmedia: (option: Option) => (art: Artplayer) => Result;
|
||||
+3
-3
@@ -1,10 +1,10 @@
|
||||
# artplayer-plugin-canvas
|
||||
# artplayer-proxy-webav
|
||||
|
||||
canvas plugin for ArtPlayer
|
||||
webav proxy for ArtPlayer
|
||||
|
||||
## Demo
|
||||
|
||||
[https://artplayer.org](https://artplayer.org/?libs=./uncompiled/artplayer-plugin-canvas/index.js&example=canvas)
|
||||
[https://artplayer.org](https://artplayer.org/?libs=./uncompiled/artplayer-proxy-webav/index.js&example=webav)
|
||||
|
||||
## License
|
||||
|
||||
+5
-5
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"license": "MIT",
|
||||
"version": "1.0.0",
|
||||
"name": "artplayer-plugin-canvas",
|
||||
"types": "types/artplayer-plugin-canvas.d.ts",
|
||||
"description": "Canvas plugin for ArtPlayer",
|
||||
"main": "dist/artplayer-plugin-canvas.js",
|
||||
"legacy": "dist/artplayer-plugin-canvas.legacy.js",
|
||||
"name": "artplayer-proxy-webav",
|
||||
"types": "types/artplayer-proxy-webav.d.ts",
|
||||
"description": "webav proxy for ArtPlayer",
|
||||
"main": "dist/artplayer-proxy-webav.js",
|
||||
"legacy": "dist/artplayer-proxy-webav.legacy.js",
|
||||
"author": "Harvey Zack <laozhaochaguan@gmail.com>",
|
||||
"browserslist": "last 1 Chrome version",
|
||||
"homepage": "https://artplayer.org",
|
||||
@@ -0,0 +1,9 @@
|
||||
export default function artplayerProxyWebAV(option) {
|
||||
return (art) => {
|
||||
return document.createElement('video');
|
||||
};
|
||||
}
|
||||
|
||||
if (typeof window !== 'undefined') {
|
||||
window['artplayerProxyWebAV'] = artplayerProxyWebAV;
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
import type Artplayer from 'artplayer';
|
||||
|
||||
export = artplayerProxyWebAV;
|
||||
export as namespace artplayerProxyWebAV;
|
||||
|
||||
type Option = {
|
||||
//
|
||||
};
|
||||
|
||||
type Result = {
|
||||
name: 'artplayerProxyWebAV';
|
||||
};
|
||||
|
||||
declare const artplayerProxyWebAV: (option: Option) => (art: Artplayer) => Result;
|
||||
@@ -156,7 +156,7 @@ export default class Artplayer extends Emitter {
|
||||
autoPlayback: false,
|
||||
autoOrientation: false,
|
||||
airplay: false,
|
||||
proxy: null,
|
||||
proxy: undefined,
|
||||
layers: [],
|
||||
contextmenu: [],
|
||||
controls: [],
|
||||
|
||||
@@ -68,7 +68,7 @@ export default {
|
||||
autoPlayback: b,
|
||||
autoOrientation: b,
|
||||
airplay: b,
|
||||
proxy: f,
|
||||
proxy: `?${f}`,
|
||||
plugins: [f],
|
||||
layers: [ComponentOption],
|
||||
contextmenu: [ComponentOption],
|
||||
|
||||
Reference in new issue
Block a user