UNPKG

@realsee/dnalogel

Version:
122 lines (121 loc) 4.58 kB
import type { Five } from '@realsee/five'; import type { VideoMeshParams } from './typings'; import type { Subscribe } from '../shared-utils/Subscribe'; import type { PluginEventMap } from './typings'; import type { Simplify } from 'type-fest'; import type { FiveUtil } from '../shared-utils/Utils/FiveUtil'; /** 点位视频控制器 * @description 控制器存在副作用,包括: * - 对 Five 事件的监听。 * - 对 DOM 原生事件的监听。 * - 用于播放视频的模型。 * - 视频实例。 * @description 清除副作用的力度从弱到强: * - 隐藏:hide,用于隐藏 UI 元素;不销毁多媒体资源。用于临时隐藏。 * - 取消挂载:unmount,销毁视频资源;移除模型。用于不符合自身展示条件时执行。 * - 禁用:disable,销毁视频资源;移除模型;取消监听。用于外部条件变换导致的功能禁用。 * - 销毁:dispose,用于彻底销毁实例,dispose 之后将不响应任何事件。 */ export declare class VideoMeshController { /** 传入的 ID,不可更改 */ get renderID(): string; /** 是否已经销毁 */ get disposed(): boolean; /** 是否已经启用 */ get enabled(): boolean; video: HTMLVideoElement; private fiveUtil?; private _id; /** 视频资源地址 */ private readonly url; /** Five Instance */ private five; /** 视频对应的点位 */ private panoIndex; /** 视频对应的 Work Observer */ private observer?; /** 视频在球面的 uv:[left, top, width, height] */ private origin; /** Video DOM */ /** Video Mesh */ private videoMesh; private _enabled; private _disposed; /** 视频资源是否满足播放条件 */ private videoDataLoaded; /** 视频是否曾经播放过 */ private hasVideoEverPlayed; /** 自动 render five 的销毁函数 * @remark 由于 render video 依赖 Five render,因此需要自动 render five。 */ private renderFiveDisposer?; private hooks; /** 初始化视频、模型以及相关事件监听。 */ constructor(five: Five, params: VideoMeshParams & { fiveUtil?: FiveUtil; } & { hooks: Subscribe<Simplify<PluginEventMap>>; }); /** * 取消静音 * * @warning 需要注意:由于大部分浏览器的限制,视频的声音必须在用户有交互事件后才能开启,否则会被浏览器禁用视频播放。 */ unmute: () => void; /** 彻底销毁,不响应之后的任何事件 */ dispose(): void; enable(): void; /** 禁用插件 */ disable(): void; /** 切换到全景模式并看向视频 * @remark 如果遇到不能自动播放的问题,需要放到用户交互事件中调用。 */ lookAtVideo(): void; /** 把 uv 值转换成位置 */ private uv2Position; /** 获取视频中心点的 uv */ private getUVCenter; /** 添加时间监听 */ private addEventListeners; /** 移除事件监听 */ private removeEventListeners; /** 如果满足 mount 条件,mount */ private mountIfNeeded; /** 挂载:加载视频资源;添加模型。 */ private mount; /** 卸载:销毁视频资源;移除模型。 */ private unmount; /** 暂停视频,去除模型。 */ private hide; /** Five 数据加载后需要根据点位位姿调整点位模型位置 */ private onFiveDataLoaded; /** 兼容视频播放 */ private onFiveWantsMoveToPano; /** 走到某个点位上时,挂载/卸载视频 */ private onFivePanoArrived; private onFivePanoWillArrive; /** Five 模型变化 */ private onFiveModeChange; /** Five mode change 动画结束 */ private onFiveInitAnimationEnded; /** Five Canvas 点击 */ private onFiveWantsTapGesture; /** video canplaythrough 事件触发 */ private onVideoDataLoaded; /** video playing 事件触发 * @remarks * 事件触发时机: * - video is ready to start after having been paused. * - video is ready to play after delayed due to lack of data. * @link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video */ private onVideoPlaying; /** 触发 playing 和 canplaythrough */ private onVideoPlayingAndLoaded; /** video pause 事件触发 */ private onVideoPaused; /** 控制台打印警告 */ private logWarning; /** 检测射线与模型的交点是不是在视频的范围内 */ private checkIntersectionInBounding; }