@galacean/effects-plugin-multimedia 2.9.0-alpha.1 → 2.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +453 -175
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +2 -2
- package/dist/index.min.js.map +1 -1
- package/dist/index.mjs +454 -176
- package/dist/index.mjs.map +1 -1
- package/dist/video/video-component.d.ts +153 -31
- package/package.json +2 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Engine, GeometryFromShape
|
|
1
|
+
import type { Engine, GeometryFromShape } from '@galacean/effects';
|
|
2
2
|
import { MaskableGraphic, Texture, spec } from '@galacean/effects';
|
|
3
3
|
/**
|
|
4
4
|
* 用于创建 videoItem 的数据类型, 经过处理后的 spec.VideoContent
|
|
@@ -13,25 +13,12 @@ export interface VideoItemProps extends Omit<spec.VideoComponentData, 'renderer'
|
|
|
13
13
|
}
|
|
14
14
|
/**
|
|
15
15
|
* Video component class
|
|
16
|
+
* 视频播放状态由以下两个维度的结束行为组合决定:
|
|
17
|
+
* - 合成结束行为(rootEndBehavior):destroy / freeze / restart / forward
|
|
18
|
+
* - 视频结束行为(videoEndBehavior):destroy / freeze / restart
|
|
16
19
|
*/
|
|
17
20
|
export declare class VideoComponent extends MaskableGraphic {
|
|
18
21
|
video?: HTMLVideoElement;
|
|
19
|
-
/**
|
|
20
|
-
* 播放标志位
|
|
21
|
-
*/
|
|
22
|
-
private played;
|
|
23
|
-
private pendingPause;
|
|
24
|
-
private threshold;
|
|
25
|
-
/**
|
|
26
|
-
* 解决 video 暂停报错问题
|
|
27
|
-
*
|
|
28
|
-
* video.play(); // <-- This is asynchronous!
|
|
29
|
-
*
|
|
30
|
-
* video.pause();
|
|
31
|
-
*
|
|
32
|
-
* @see https://developer.chrome.com/blog/play-request-was-interrupted
|
|
33
|
-
*/
|
|
34
|
-
private isPlayLoading;
|
|
35
22
|
/**
|
|
36
23
|
* 视频元素是否激活
|
|
37
24
|
*/
|
|
@@ -40,36 +27,169 @@ export declare class VideoComponent extends MaskableGraphic {
|
|
|
40
27
|
* 是否为透明视频
|
|
41
28
|
*/
|
|
42
29
|
protected transparent: boolean;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
30
|
+
/**
|
|
31
|
+
* 是否由用户手动控制播放速率(覆盖合成的播放速率)
|
|
32
|
+
*/
|
|
33
|
+
private manualPlaybackRate;
|
|
34
|
+
/**
|
|
35
|
+
* 是否由用户手动控制循环播放(覆盖合成的结束行为)
|
|
36
|
+
*/
|
|
37
|
+
private manualLoop;
|
|
38
|
+
/**
|
|
39
|
+
* 是否由用户手动暂停视频
|
|
40
|
+
*/
|
|
41
|
+
private manualPause;
|
|
42
|
+
/**
|
|
43
|
+
* 视频是否已开始播放
|
|
44
|
+
*/
|
|
45
|
+
private playTriggered;
|
|
46
|
+
/**
|
|
47
|
+
* 上一次的视频时间,用于检测重播
|
|
48
|
+
*/
|
|
49
|
+
private lastVideoTime;
|
|
50
|
+
/**
|
|
51
|
+
* 视频是否已经销毁(用于 destroy 结束行为,确保只重置一次)
|
|
52
|
+
*/
|
|
53
|
+
private videoDestroyed;
|
|
54
|
+
/**
|
|
55
|
+
* 视频是否处于 seek 中
|
|
56
|
+
* seek 期间禁止上传帧,避免 destroy 后 seek 回 0 期间渲染旧帧
|
|
57
|
+
*/
|
|
58
|
+
private videoSeeking;
|
|
59
|
+
/**
|
|
60
|
+
* 待执行的 seek 目标时间,延迟到 onUpdate 中处理以避免竞态。
|
|
61
|
+
* 值为 null 表示没有待执行的 seek。
|
|
62
|
+
*/
|
|
63
|
+
private pendingSeekTime;
|
|
64
|
+
/**
|
|
65
|
+
* 是否正在处理 gotoAndStop 的 seek
|
|
66
|
+
* 用于跳过 pause 事件触发的 pauseVideoElement,等 seek 完成后再暂停
|
|
67
|
+
*/
|
|
68
|
+
private isGotoAndStopSeeking;
|
|
69
|
+
/**
|
|
70
|
+
* 是否刚收到 goto 事件,等待后续 play/pause 事件来区分场景
|
|
71
|
+
*/
|
|
72
|
+
private isWaitingForGotoResult;
|
|
73
|
+
/**
|
|
74
|
+
* 当前正在执行的 play() Promise,用于串行化 play 调用,避免上的竞态
|
|
75
|
+
*/
|
|
76
|
+
private playPromise;
|
|
77
|
+
/**
|
|
78
|
+
* 存储事件监听器的移除函数,用于销毁时清理
|
|
79
|
+
*/
|
|
80
|
+
private eventDisposers;
|
|
81
|
+
private static readonly threshold;
|
|
46
82
|
constructor(engine: Engine);
|
|
47
83
|
setTexture(input: Texture): void;
|
|
48
84
|
setTexture(input: string): Promise<void>;
|
|
49
85
|
onAwake(): void;
|
|
50
86
|
fromData(data: VideoItemProps): void;
|
|
51
|
-
render(renderer: Renderer): void;
|
|
52
87
|
onUpdate(dt: number): void;
|
|
88
|
+
onDestroy(): void;
|
|
89
|
+
onDisable(): void;
|
|
90
|
+
onEnable(): void;
|
|
91
|
+
/**
|
|
92
|
+
* 处理 goto 事件:重置播放状态,记录待 seek 时间
|
|
93
|
+
*/
|
|
94
|
+
private handleGoto;
|
|
95
|
+
/**
|
|
96
|
+
* 处理合成 pause 事件
|
|
97
|
+
* 如果刚收到 goto 事件且等待结果,说明是 gotoAndStop 场景
|
|
98
|
+
*/
|
|
99
|
+
private handleCompositionPause;
|
|
100
|
+
/**
|
|
101
|
+
* 处理合成 play 事件(合成开始/重播/恢复时触发)
|
|
102
|
+
*/
|
|
103
|
+
private handleCompositionPlay;
|
|
104
|
+
/**
|
|
105
|
+
* 根据合成结束行为决定视频的后续处理
|
|
106
|
+
*/
|
|
107
|
+
private handleCompositionEnd;
|
|
108
|
+
/**
|
|
109
|
+
* 视频是否已播放到末尾
|
|
110
|
+
*/
|
|
111
|
+
private checkVideoEnded;
|
|
112
|
+
/**
|
|
113
|
+
* 合成是否已到达结束时间
|
|
114
|
+
*/
|
|
115
|
+
private checkCompositionEnded;
|
|
116
|
+
/**
|
|
117
|
+
* 是否应该冻结视频(暂停在当前帧)
|
|
118
|
+
*/
|
|
119
|
+
private shouldFreezeVideo;
|
|
120
|
+
/**
|
|
121
|
+
* 是否应该启动视频播放
|
|
122
|
+
*/
|
|
123
|
+
private shouldStartVideo;
|
|
124
|
+
/**
|
|
125
|
+
* 处理延迟 seek,返回 true 表示本帧已处理 seek,应跳过后续逻辑
|
|
126
|
+
*/
|
|
127
|
+
private processPendingSeek;
|
|
128
|
+
/**
|
|
129
|
+
* 检测合成是否发生了 restart,并重置相关状态
|
|
130
|
+
*/
|
|
131
|
+
private detectCompositionRestart;
|
|
132
|
+
/**
|
|
133
|
+
* 冻结视频:停止播放,保持当前帧
|
|
134
|
+
*/
|
|
135
|
+
private freezeVideo;
|
|
136
|
+
/**
|
|
137
|
+
* 确保 restart 行为的视频设置了 loop 标志
|
|
138
|
+
* 手动模式下不自动设置,保持用户设置的值
|
|
139
|
+
*/
|
|
140
|
+
private ensureLoopFlag;
|
|
141
|
+
/**
|
|
142
|
+
* 处理 destroy 结束行为:视频播放到末尾后,seek 回 0 并清空纹理
|
|
143
|
+
* 确保合成 restart 时视频已在第 0 帧,不会闪最后一帧
|
|
144
|
+
*/
|
|
145
|
+
private handleDestroyBehavior;
|
|
146
|
+
/**
|
|
147
|
+
* 开始播放视频
|
|
148
|
+
*/
|
|
149
|
+
private startVideo;
|
|
150
|
+
/**
|
|
151
|
+
* 安全地调用 video.play(),串行化调用
|
|
152
|
+
*/
|
|
153
|
+
private safePlay;
|
|
154
|
+
/**
|
|
155
|
+
* 暂停底层视频元素
|
|
156
|
+
*/
|
|
157
|
+
private pauseVideoElement;
|
|
158
|
+
/**
|
|
159
|
+
* seek 期间设置 videoSeeking=true,阻止 uploadCurrentVideoFrame 上传旧帧
|
|
160
|
+
* @param time 目标时间
|
|
161
|
+
* @param clearTexture 是否在 seek 期间清空纹理
|
|
162
|
+
* @param isGotoAndStop 是否为 gotoAndStop 场景
|
|
163
|
+
*/
|
|
164
|
+
private performSeek;
|
|
165
|
+
/**
|
|
166
|
+
* 更新视频播放速率
|
|
167
|
+
* 手动模式下保持用户设置的速率不变,自动模式下根据 engine.speed * composition.speed 计算
|
|
168
|
+
*/
|
|
169
|
+
private updatePlaybackRate;
|
|
53
170
|
/**
|
|
54
171
|
* 获取当前视频时长
|
|
55
|
-
* @returns 视频时长
|
|
56
172
|
*/
|
|
57
173
|
getDuration(): number;
|
|
58
174
|
/**
|
|
59
175
|
* 获取当前视频播放时刻
|
|
60
|
-
* @returns 当前视频播放时刻
|
|
61
176
|
*/
|
|
62
177
|
getCurrentTime(): number;
|
|
63
178
|
/**
|
|
64
179
|
* 设置当前视频播放时刻
|
|
65
|
-
* @param time
|
|
180
|
+
* @param time 目标时间,会被限制在 [0, duration] 范围内
|
|
66
181
|
*/
|
|
67
182
|
setCurrentTime(time: number): void;
|
|
68
183
|
/**
|
|
69
|
-
*
|
|
184
|
+
* 设置视频是否循环播放,调用后会覆盖合成的结束行为,改为由用户手动控制循环。
|
|
185
|
+
* 调用 {@link resetLoop} 可恢复为由合成结束行为自动控制。
|
|
70
186
|
* @param loop 是否循环播放
|
|
71
187
|
*/
|
|
72
188
|
setLoop(loop: boolean): void;
|
|
189
|
+
/**
|
|
190
|
+
* 重置循环播放为合成自动控制模式
|
|
191
|
+
*/
|
|
192
|
+
resetLoop(): void;
|
|
73
193
|
/**
|
|
74
194
|
* 设置视频是否静音
|
|
75
195
|
* @param muted 是否静音
|
|
@@ -86,21 +206,23 @@ export declare class VideoComponent extends MaskableGraphic {
|
|
|
86
206
|
*/
|
|
87
207
|
setTransparent(transparent: boolean): void;
|
|
88
208
|
/**
|
|
89
|
-
*
|
|
209
|
+
* 设置视频播放速率,调用后会覆盖合成的速率,改为由用户手动控制速率。
|
|
210
|
+
* 调用 {@link resetPlaybackRate} 可恢复为由合成速率自动控制。
|
|
90
211
|
* @param rate 视频播放速率
|
|
91
212
|
*/
|
|
92
213
|
setPlaybackRate(rate: number): void;
|
|
93
214
|
/**
|
|
94
|
-
*
|
|
215
|
+
* 重置播放速率为合成自动控制模式
|
|
216
|
+
*/
|
|
217
|
+
resetPlaybackRate(): void;
|
|
218
|
+
/**
|
|
219
|
+
* 播放视频,同时取消手动暂停状态
|
|
95
220
|
* @since 2.3.0
|
|
96
221
|
*/
|
|
97
222
|
playVideo(): void;
|
|
98
223
|
/**
|
|
99
|
-
*
|
|
224
|
+
* 手动暂停视频
|
|
100
225
|
* @since 2.3.0
|
|
101
226
|
*/
|
|
102
227
|
pauseVideo(): void;
|
|
103
|
-
onDestroy(): void;
|
|
104
|
-
onDisable(): void;
|
|
105
|
-
onEnable(): void;
|
|
106
228
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@galacean/effects-plugin-multimedia",
|
|
3
|
-
"version": "2.9.0
|
|
3
|
+
"version": "2.9.0",
|
|
4
4
|
"description": "Galacean Effects player multimedia plugin",
|
|
5
5
|
"module": "./dist/index.mjs",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"registry": "https://registry.npmjs.org"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
|
-
"@galacean/effects": "2.9.0
|
|
31
|
+
"@galacean/effects": "2.9.0"
|
|
32
32
|
},
|
|
33
33
|
"scripts": {
|
|
34
34
|
"dev": "vite",
|