//#region src/player/render/canvas2d/control.d.ts declare class Canvas2dControl { createCanvas(): HTMLCanvasElement | OffscreenCanvas; removeCanvas(ofs: HTMLCanvasElement | OffscreenCanvas): void; get2dContext(ofs: HTMLCanvasElement | OffscreenCanvas): CanvasRenderingContext2D; } //#endregion //#region src/helper/logger.d.ts type LogTypes = 'debug' | 'info' | 'warn' | 'error'; //#endregion //#region src/type/mix.d.ts type AlphaDirection = 'left' | 'right'; type EventCallback = undefined | ((...args: any) => void); type ModeType = 'AspectFill' | 'AspectFit' | 'Fill' | 'vertical' | 'horizontal' | 'contain' | 'cover'; type ResizeCanvasType = 'percent' | 'percentW' | 'percentH' | 'size'; type RenderType = 'webgl' | 'webgpu' | 'canvas2d'; type MixEvideoOptions = VideoEvent & { /** * 全屏模式模式 */ mode?: ModeType; /** * debug 模式显示视频情况 * @default false */ showVideo?: boolean; /** * web worker 模式 ::TODO */ useWorker?: boolean; /** * 循环播放 * @default true */ loop?: boolean | number; /** * 自动播放 * @default true */ autoplay?: boolean; /** * 停止到某一帧,默认停止到最后一帧 * @default undefined */ endFrame?: number; /** * 播放完毕后是否暂停, 传true的话,清理时,需要外部调用destroy释放资源 * @default false */ endPause?: boolean; /** * 动画容器 */ container: HTMLElement; /** * video http 连接 或 file 对象 */ videoUrl: string | File; /** * 提供给 op传输 */ videoSource?: string; /** * hevc、h265 格式 http 连接 或 file 对象 */ hevcUrl?: string | File; isHevc?: boolean; /** * video id * 用来做唯一播放对象处理 不重复注销video标签 适配微信 (目前是支持多video标签) * @default null */ videoID?: string; /** * 描述文件连接 */ dataUrl?: string; /** * 主要是指 mimeType MIME媒体类型 * https://developer.mozilla.org/en-US/docs/Web/API/MediaSource/isTypeSupported */ mimeCodec?: string; /** * 设置后主动降帧 */ fps?: number; /** * 制定播放帧 ::TODO */ offset?: number; /** * MSE 预加载模式 * @default true */ usePrefetch?: boolean; /** * 启动静音 适配 chrome 自动播放 * @default true */ mute?: boolean; /** * 使用bitmap 替代 imageElm 离屏模式必须 * @default true */ useBitmap?: boolean; /** * 启用 requestVideoFrameCallback,自动判断是否支持并且降级为 requestAnimationFrame * @default true */ useAccurate?: boolean; /** * 非 mix模式下 判断左右视频 ::TODO 加入上下模式 * @default left */ alphaDirection?: AlphaDirection; /** * 渲染模式 * @default webgl */ renderType?: RenderType; /** * 兼容vap 启动后 不需要填写 dataUrl * usePrefetch 强制打开 * @default false */ useMetaData?: boolean; /** * 字体全局配置 */ color?: string; style?: string; fontStyle?: string | any; font?: { overflow: 'zoom' | 'cut'; }; /** * effects * 业务内容 k 为 effectTag * text 可以加入 text */ effects?: { [k: string]: any; fontColor?: string; fontSize?: number; fontStyle?: string; }; /** * useVideoDBCache 使用视频缓存 * @default true */ useVideoDBCache?: boolean; /** * useFrameCache 使用缓存帧 与 帧数 * @default 5 */ useFrameCache?: boolean | number; /** * useOfsRender 使用 多canvas 渲染同步 * @default false */ useOfsRender?: boolean; /** * resizeCanvas * 设置 canvas大小 * @options percent 为 width 100% height 100% * @options percentW 为 width 100% * @options percentH 为 height 100% * @options size 为 原尺寸 * @default percent */ resizeCanvas?: ResizeCanvasType; /** * @default info */ logLevel?: LogTypes; /** * showPlayerInfo * @default true */ showPlayerInfo?: boolean | 'table'; /** * onRequestClickPlay * 微信&安卓端不能自动播放 * mute=false 不能自动播放 * 需要回调点击事件用户通过 video.play()触发一次 */ onRequestClickPlay?: (container: HTMLElement, video: HTMLVideoElement) => void; /** * forceBlob * 强制使用 blob 不受polyfill 影响 * @default false */ forceBlob?: boolean; /** * 播放超时开关 * @default false */ checkTimeout?: boolean; }; type VideoEvent = { onStart?: EventCallback; onResume?: EventCallback; onPause?: EventCallback; onStop?: EventCallback; onProcess?: EventCallback; onEnd?: EventCallback; onError?: EventCallback; onLoopCount?: EventCallback; onGetConfig?: (op: MixEvideoOptions) => void; }; type VideoAnimateType = { /** * 每一帧的动态元素位置信息 */ datas: VideoAnimateDataType[]; /** * 视频的描述信息 */ descript: VideoAnimateDescriptType; /** * 动态元素的遮罩描述信息 */ effect: VideoAnimateEffectType[]; }; declare enum EScaleMode { aspectFill = "aspectFill", aspectFit = "aspectFit", scaleFill = "scaleFill" } type VideoAnimateEffectType = { effectWidth: number; effectHeight: number; effectId: number | string; effectTag: string; effectType: 'txt' | 'img'; img?: ImageData | HTMLImageElement | ImageBitmap; text: string; fontColor?: string; fontSize?: number; scaleMode: EScaleMode; [key: string]: any; }; type VideoAnimateDescriptType = { width: number; height: number; isEffect: number; version: number; rgbFrame: number[]; alphaFrame: number[]; fps: number; hasAudio?: boolean; }; type VideoAnimateDataType = { frameIndex: number; data: VideoAnimateDataItemType[]; [key: string]: any; }; type VideoAnimateDataItemType = { renderFrame: number[]; effectId: number | string; outputFrame: number[]; [key: string]: any; }; type WebglVersion = 1 | 2 | null; //#endregion //#region src/player/render/common/mCache.d.ts type MCacheItem = { [frames: number]: ImageBitmap | HTMLImageElement | undefined; }; declare class MCache { static caches: { [url: string]: MCacheItem; }; static cacheKeys: string[]; static cachesOfs: { [url: string]: HTMLCanvasElement | OffscreenCanvas; }; private storeName; private op; private frameCacheCount; private requestAnimationFramePercent; private hasRequestAnimationFrame; private animationType; private fps; private videoDurationTime; constructor(op: MixEvideoOptions); setOptions({ fps, animationType, videoDurationTime }: any): void; setup(): Promise; setAnimationStatus(): void; isCache(): boolean; get(): MCacheItem; set(d: MCacheItem): void; getFrame(frame: number): ImageBitmap | HTMLImageElement | "skip"; setFrame(frame: number, d: ImageBitmap | HTMLImageElement): void; private checkCache; removeCache(): void; removeCacheItem(key: any): void; videoSeekedEvent(): void; destroy(): void; } //#endregion //#region src/player/render/common/renderCache.d.ts declare class RenderCache { private canvas; private op; mCache: MCache; constructor(canvas: HTMLCanvasElement | OffscreenCanvas, op: MixEvideoOptions); isCache(): boolean; setCache(frame: number): void; getCache(frame: number): ImageBitmap | HTMLImageElement | "skip"; /** * 注销缓存 */ destroy(): void; /** * 申请缓存 */ setup(): Promise; private createFramesCache; } //#endregion //#region src/player/render/common/videoEntity.d.ts type ContextType = CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D; declare class VideoEntity { op: MixEvideoOptions; fps: number; videoFps: number; config?: VideoAnimateType; isUseMeta: boolean; private ofs; private ctx; private effectTypes; effectWidth: string; effectHeight: string; effectTag: string; effectType: string; effectId: string; renderFrame: string; outputFrame: string; frameIndex: string; scaleMode: string; data: string; constructor(op: MixEvideoOptions); destroy(): void; /** * yy视频设置 * @param config */ setConfig(config: VideoAnimateType): void; setup(): Promise; private get isUseBitmap(); private dataURItoBlob; private createImageElement; /** * loadImg * @param url 支持 HTTP DATAURL * @returns */ private loadImg; effectTypeById(effectId: any): string; isTextTypeById(effectId: any): boolean; private parseFromSrcAndOptions; /** * effect 图片处理 * @param item * @param eOptions * @returns */ private makeImage; _getText(ctx: ContextType, text: string, maxWidth: number): string; private defaultFontInfo; /** * 文字转换图片 * @param item */ private makeTextImg; getFrame(frame: number): VideoAnimateDataType; private getConfig; } //#endregion //#region src/player/render/canvas2d/index.d.ts declare class Render2D extends Canvas2dControl { isPlay: boolean; renderType: string; videoEntity: VideoEntity; renderCache: RenderCache; private video; private ofs; private ctx; private canvas?; private context; private op; private alphaCanvas; private alphaCtx; private canvasKey; private ctxKey; drawEffect: { [key: string]: any; }; constructor(op: MixEvideoOptions); private setSizeCanvas; /** sx 裁剪框右上角的x坐标 sy 裁剪框右上角的y坐标 sw 裁剪框的宽度 sh 裁剪框的高度 */ private getScale; videoSeekedEvent(): void; setup(video?: HTMLVideoElement): Promise; destroy(): void; clear(): void; render(frame?: number): void; drawWithCache(frame: any): boolean; saveFrameCache(frame: any): void; renderKey(frame?: number): void; renderMix(frame?: number): void; mixImageData(colorImageData: any, alpathImageData: any, scale?: number): any; scaleImageData(imageData: any, scale: any): any; renderLR(frame?: number): void; } //#endregion //#region src/player/render/webgl/index.d.ts declare class WglRender { isPlay: boolean; videoEntity: VideoEntity; renderType: string; renderCache: RenderCache; PER_SIZE: number; canvas?: HTMLCanvasElement; ctx?: CanvasRenderingContext2D; ofs: HTMLCanvasElement | OffscreenCanvas; version: WebglVersion; gl: WebGLRenderingContext | WebGL2RenderingContext | null; private op; private textureMap; private imagePos; private currentFrame; private video; private program; private VERTEX_SHADER; private FRAGMENT_SHADER; constructor(op: MixEvideoOptions); videoSeekedEvent(): void; setup(video?: HTMLVideoElement): Promise; private prepareShader; private resizeCanvasToDisplaySize; destroy(): void; render(frame?: number): void; private getScale; private initWebgl; private initTexture; private getRgbaPos; private initVideoTexture; private createProgram; private createShader; /** * * @param x 位移转矩阵坐标 * @param y * @param w * @param h * @param vw * @param vh * @returns */ private computeCoord; /** * * @param gl 创建纹理 * @param index * @param imgData * @returns */ private createTexture; private createCanvas; private setSizeCanvas; private initGlContext; private webglDestroy; } //#endregion //#region src/player/render/webgpu/bizBase.d.ts declare class BizBase { isPlay: boolean; videoEntity: VideoEntity; renderType: string; renderCache: RenderCache; version: number; op: MixEvideoOptions; currentFrame: number; video: HTMLVideoElement | undefined; ofs: HTMLCanvasElement; ctx: GPUCanvasContext; constructor(op: MixEvideoOptions); destroy(): void; createCanvas(op: MixEvideoOptions): void; get verriceArray(): Float32Array; getRgbaPos(): { rgbX: number; rgbY: number; rgbW: number; rgbH: number; vW: number; vH: number; aX: number; aY: number; aW: number; aH: number; }; computeCoord(x: number, y: number, w: number, h: number, vw: number, vh: number): number[]; getScale(): number[]; setSizeCanvas(canvas: HTMLCanvasElement, resizeCanvas: ResizeCanvasType): void; resizeCanvasToDisplaySize(): void; } //#endregion //#region src/player/render/webgpu/base.d.ts declare class RenderWebGPUBase extends BizBase { currentFrame: number; PER_SIZE: number; adapter: GPUAdapter; device: GPUDevice; presentationFormat: GPUTextureFormat; pipeline: GPURenderPipeline; private cache; private textureMap; bindGroupLayout: GPUBindGroupLayout; initGPUContext(): Promise; setup(): Promise; createbindGroup(): void; createRender(frame: number): void; webgpuDestroy(): void; destroy(): void; imgPosBindGroup(frame: number, descript: VideoAnimateDescriptType): GPUBuffer; private createImageTexture; createPipe(): void; private createBufferMapped; private createBufferWrite; } //#endregion //#region src/player/render/webgpu/index.d.ts declare class RenderWebGPU extends RenderWebGPUBase { videoSeekedEvent(): void; setup(video?: HTMLVideoElement): Promise; render(frame?: number): void; } //#endregion //#region src/player/video/animator.d.ts type AnimatorType = 'requestVideoFrameCallback' | 'requestAnimationFrame' | 'setTimeout'; //#endregion //#region src/player/index.d.ts declare class EVideo { private video; private eventsFn; private animator; private blobUrl; private polyfillCreateObjectURL; private timeoutId; private loopChecker; private videoFile?; private isSupportHevc; private startFlag; private pollyfillTipsElement; onStart: EventCallback; onResume: EventCallback; onPause: EventCallback; onStop: EventCallback; onProcess: EventCallback; onEnd: EventCallback; onError: EventCallback; private onLoadedmetadata; isPlay: boolean; renderer: WglRender | Render2D | RenderWebGPU; renderType: RenderType; animationType: AnimatorType; op: MixEvideoOptions; fps: number; version: WebglVersion; webglVersion: WebglVersion; /** * 记录当前播放资源的 base64,当blob url播放失败时播放 */ constructor(op: MixEvideoOptions); private _onEnd; private _error; selectRender(rt: RenderType): Promise; private renderLoader; prepareRender(): Promise; setup(): Promise; private _updateEndFrame; private setPlay; private isDestroyed; start(): void; private cleanTimer; private beginTimer; private clickToPlay; private hidePollyfileTips; private startEvent; seek(time: number): void; stop(resetToStart?: boolean): void; private videoEvent; private loop; private _playVideo; private _updateVideoSource; private videoCreate; private videoAddEvents; private videoLoad; /** * 页面隐藏时执行 */ private videoVisbility; private removeVideoEvent; private revokeObjectURL; private createObjectURL; destroy(): void; private checkVideoCache; getVideoFile(): Promise; prefetch(): Promise; private readFileToBlobUrl; } //#endregion //#region src/helper/polyfill.d.ts declare class WechatPolyfill { private isReady; get ready(): boolean; set ready(b: boolean); initVideoIDPosition(list: string[]): void; wxReady(): Promise; } declare const wechatPolyfill: WechatPolyfill; //#endregion //#region src/index.d.ts declare function yyEva(options: MixEvideoOptions): Promise; declare const version: string; declare const mode: string; type YYEvaType = EVideo; type YYEvaOptionsType = MixEvideoOptions; //#endregion export { YYEvaOptionsType, YYEvaType, yyEva as default, yyEva, mode, version, wechatPolyfill }; //# sourceMappingURL=index.d.cts.map