@xmov/avatar 2.0.0-alpha.38
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/README.md +139 -0
- package/dist/agent/__tests__/agent.test.d.ts +1 -0
- package/dist/agent/audio-debug.d.ts +3 -0
- package/dist/agent/audio-uplink.d.ts +62 -0
- package/dist/agent/avatar.cjs +2 -0
- package/dist/agent/avatar.cjs.map +1 -0
- package/dist/agent/avatar.modern.js +2 -0
- package/dist/agent/avatar.modern.js.map +1 -0
- package/dist/agent/avatar.module.js +2 -0
- package/dist/agent/avatar.module.js.map +1 -0
- package/dist/agent/avatar.umd.js +2 -0
- package/dist/agent/avatar.umd.js.map +1 -0
- package/dist/agent/e2e-client.d.ts +32 -0
- package/dist/agent/fixed-audio-track.d.ts +48 -0
- package/dist/agent/index.cjs +5 -0
- package/dist/agent/index.d.ts +104 -0
- package/dist/agent/index.umd.js +10 -0
- package/dist/agent/microphone.d.ts +49 -0
- package/dist/agent/types.d.ts +153 -0
- package/dist/baseRender/AudioRenderer.d.ts +46 -0
- package/dist/baseRender/AudioWorklet.d.ts +78 -0
- package/dist/baseRender/AvatarRenderer.d.ts +226 -0
- package/dist/baseRender/MSEAudioPlayer.d.ts +51 -0
- package/dist/baseRender/UIRenderer.d.ts +39 -0
- package/dist/baseRender/pcm-audio-processor.d.ts +63 -0
- package/dist/control/APIForwarder.d.ts +23 -0
- package/dist/control/DataCacheQueue.d.ts +69 -0
- package/dist/control/EventDispatcher.d.ts +35 -0
- package/dist/control/RenderScheduler.d.ts +162 -0
- package/dist/control/SaveAndDownload.d.ts +14 -0
- package/dist/control/StreamingClient.d.ts +33 -0
- package/dist/control/VideoPlayer.d.ts +47 -0
- package/dist/control/ttsa.d.ts +111 -0
- package/dist/encoding/media-recorder-encoder.d.ts +33 -0
- package/dist/encoding/pcm-webm-encoder.d.ts +13 -0
- package/dist/encoding/webcodec-opus-encoder.d.ts +41 -0
- package/dist/encoding/webm-muxer.d.ts +90 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +231 -0
- package/dist/index.modern.js +2 -0
- package/dist/index.modern.js.map +1 -0
- package/dist/index.module.js +2 -0
- package/dist/index.module.js.map +1 -0
- package/dist/index.umd.js +2 -0
- package/dist/index.umd.js.map +1 -0
- package/dist/modules/Composition.d.ts +28 -0
- package/dist/modules/ResourceManager.d.ts +295 -0
- package/dist/modules/TrackRenderer/base-track.d.ts +4 -0
- package/dist/modules/TrackRenderer/index.d.ts +12 -0
- package/dist/modules/TrackRenderer/render-implements.d.ts +19 -0
- package/dist/modules/TrackRenderer/track-pic.d.ts +8 -0
- package/dist/modules/TrackRenderer/track-subtitle.d.ts +8 -0
- package/dist/modules/cache-manager.d.ts +5 -0
- package/dist/modules/decoder.d.ts +84 -0
- package/dist/modules/error-handle.d.ts +17 -0
- package/dist/modules/network.d.ts +21 -0
- package/dist/proto/face_data_pb.d.ts +0 -0
- package/dist/types/capability.d.ts +15 -0
- package/dist/types/error.d.ts +70 -0
- package/dist/types/event.d.ts +25 -0
- package/dist/types/frame-data.d.ts +107 -0
- package/dist/types/index.d.ts +187 -0
- package/dist/types/render.d.ts +18 -0
- package/dist/utils/DataInterface.d.ts +113 -0
- package/dist/utils/GLDevice.d.ts +46 -0
- package/dist/utils/GLPipeline.d.ts +84 -0
- package/dist/utils/GLPipelineDebugTools.d.ts +5 -0
- package/dist/utils/Math.d.ts +21 -0
- package/dist/utils/__tests__/capability-checker.test.d.ts +1 -0
- package/dist/utils/audio-session.d.ts +11 -0
- package/dist/utils/audio.d.ts +1 -0
- package/dist/utils/capability-checker.d.ts +23 -0
- package/dist/utils/encodeToken.d.ts +7 -0
- package/dist/utils/face.d.ts +1 -0
- package/dist/utils/float32-decoder.d.ts +26 -0
- package/dist/utils/fpsTracker.d.ts +27 -0
- package/dist/utils/index.d.ts +22 -0
- package/dist/utils/logger.d.ts +9 -0
- package/dist/utils/media-recorder-timestamp.d.ts +15 -0
- package/dist/utils/pcmAnalyzer.d.ts +40 -0
- package/dist/utils/perfermance.d.ts +15 -0
- package/dist/utils/request.d.ts +19 -0
- package/dist/utils/requestAnimateFrames.d.ts +31 -0
- package/dist/utils/time.d.ts +9 -0
- package/dist/view/DebugOverlay.d.ts +54 -0
- package/dist/worker/streaming-video.d.ts +1 -0
- package/package.json +82 -0
- package/src/agent/__tests__/agent.test.ts +3787 -0
- package/src/agent/audio-debug.ts +36 -0
- package/src/agent/audio-uplink.ts +392 -0
- package/src/agent/e2e-client.ts +215 -0
- package/src/agent/fixed-audio-track.ts +547 -0
- package/src/agent/index.ts +1393 -0
- package/src/agent/microphone.ts +534 -0
- package/src/agent/types.ts +197 -0
- package/src/baseRender/AudioRenderer.ts +317 -0
- package/src/baseRender/AudioWorklet.ts +776 -0
- package/src/baseRender/AvatarRenderer.ts +1559 -0
- package/src/baseRender/MSEAudioPlayer.ts +243 -0
- package/src/baseRender/UIRenderer.ts +195 -0
- package/src/baseRender/pcm-audio-processor.js +267 -0
- package/src/control/APIForwarder.ts +67 -0
- package/src/control/DataCacheQueue.ts +372 -0
- package/src/control/EventDispatcher.ts +106 -0
- package/src/control/RenderScheduler.ts +945 -0
- package/src/control/SaveAndDownload.js +77 -0
- package/src/control/StreamingClient.ts +138 -0
- package/src/control/VideoPlayer.ts +306 -0
- package/src/control/ttsa.ts +676 -0
- package/src/encoding/media-recorder-encoder.ts +175 -0
- package/src/encoding/pcm-webm-encoder.ts +72 -0
- package/src/encoding/webcodec-opus-encoder.ts +258 -0
- package/src/encoding/webm-muxer.ts +337 -0
- package/src/global.d.ts +105 -0
- package/src/index.ts +1920 -0
- package/src/modules/Composition.ts +79 -0
- package/src/modules/ResourceManager.ts +899 -0
- package/src/modules/TrackRenderer/base-track.ts +7 -0
- package/src/modules/TrackRenderer/index.ts +40 -0
- package/src/modules/TrackRenderer/render-implements.ts +269 -0
- package/src/modules/TrackRenderer/track-pic.ts +19 -0
- package/src/modules/TrackRenderer/track-subtitle.ts +16 -0
- package/src/modules/cache-manager.ts +10 -0
- package/src/modules/decoder.ts +515 -0
- package/src/modules/error-handle.ts +20 -0
- package/src/modules/network.ts +71 -0
- package/src/proto/face_data.proto +45 -0
- package/src/proto/face_data_pb.js +1297 -0
- package/src/proto/protobuf.min.js +8 -0
- package/src/types/capability.ts +23 -0
- package/src/types/error.ts +211 -0
- package/src/types/event.ts +38 -0
- package/src/types/frame-data.ts +121 -0
- package/src/types/index.ts +207 -0
- package/src/types/render.ts +18 -0
- package/src/utils/DataInterface.ts +746 -0
- package/src/utils/GLDevice.ts +286 -0
- package/src/utils/GLPipeline.ts +1293 -0
- package/src/utils/GLPipelineDebugTools.ts +174 -0
- package/src/utils/Math.ts +266 -0
- package/src/utils/__tests__/capability-checker.test.ts +159 -0
- package/src/utils/audio-session.ts +144 -0
- package/src/utils/audio.ts +44 -0
- package/src/utils/blueimp-md5.d.ts +3 -0
- package/src/utils/capability-checker.ts +379 -0
- package/src/utils/encodeToken.ts +100 -0
- package/src/utils/face.ts +29 -0
- package/src/utils/float32-decoder.js +130 -0
- package/src/utils/fpsTracker.ts +100 -0
- package/src/utils/index.ts +182 -0
- package/src/utils/logger.js +36 -0
- package/src/utils/media-recorder-timestamp.ts +79 -0
- package/src/utils/pcmAnalyzer.ts +154 -0
- package/src/utils/perfermance.ts +141 -0
- package/src/utils/request.ts +95 -0
- package/src/utils/requestAnimateFrames.ts +195 -0
- package/src/utils/time.ts +32 -0
- package/src/view/DebugOverlay.ts +404 -0
- package/src/worker/streaming-video.ts +4647 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import AvatarRender from "../baseRender/AvatarRenderer";
|
|
2
|
+
import UIRenderer from "../baseRender/UIRenderer";
|
|
3
|
+
import AudioRenderer from "../baseRender/AudioRenderer";
|
|
4
|
+
import { FPSStats } from "../utils/fpsTracker";
|
|
5
|
+
type TRenderer = UIRenderer;
|
|
6
|
+
export default class Composition {
|
|
7
|
+
TAG: string;
|
|
8
|
+
container: Element;
|
|
9
|
+
avatarRenderer: AvatarRender;
|
|
10
|
+
audioRenderer: AudioRenderer;
|
|
11
|
+
restRenderers: TRenderer[];
|
|
12
|
+
private fpsTracker;
|
|
13
|
+
private onFPSUpdate?;
|
|
14
|
+
audioOnlyMode: boolean;
|
|
15
|
+
constructor(options: {
|
|
16
|
+
container: Element;
|
|
17
|
+
avatarRenderer: AvatarRender;
|
|
18
|
+
restRenderers: TRenderer[];
|
|
19
|
+
audioRenderer: AudioRenderer;
|
|
20
|
+
audioOnlyMode?: boolean;
|
|
21
|
+
onFPSUpdate?: (stats: FPSStats) => void;
|
|
22
|
+
});
|
|
23
|
+
compose(frameIndex: number): void;
|
|
24
|
+
getFPSStats(): FPSStats;
|
|
25
|
+
stop(): void;
|
|
26
|
+
destroy(): void;
|
|
27
|
+
}
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
import { IAvatarOptions, INetworkInfo, Layout, WalkConfig } from "../types/index";
|
|
2
|
+
import XmovAvatar from "../index";
|
|
3
|
+
/**
|
|
4
|
+
* 资源处理模块,加载并存储资源
|
|
5
|
+
*/
|
|
6
|
+
type TOptions = Pick<IAvatarOptions, "appId" | "appSecret" | "gatewayServer" | 'cacheServer' | "sdkInstance" | "config" | "headers" | "gateway_type" | "tag" | "asr_id" | "llm_id" | "session_speak_req_id"> & {
|
|
7
|
+
sessionRequestData?: Record<string, unknown>;
|
|
8
|
+
onNetworkInfo(quality: INetworkInfo): void;
|
|
9
|
+
onStartSessionWarning?: (message: Object) => void;
|
|
10
|
+
};
|
|
11
|
+
export type TDownloadProgress = (progress: number) => void;
|
|
12
|
+
export interface IOfflineIdle {
|
|
13
|
+
asf: number;
|
|
14
|
+
aef: number;
|
|
15
|
+
n: string;
|
|
16
|
+
}
|
|
17
|
+
export interface IResumeParams {
|
|
18
|
+
client_frame: number;
|
|
19
|
+
current_ani: string;
|
|
20
|
+
current_ani_frame: number;
|
|
21
|
+
next_state: string;
|
|
22
|
+
}
|
|
23
|
+
export interface ISessionResponse {
|
|
24
|
+
session_id: string;
|
|
25
|
+
room: string;
|
|
26
|
+
token: string;
|
|
27
|
+
socket_io_url: string;
|
|
28
|
+
e2e_resp?: {
|
|
29
|
+
ws_url?: string;
|
|
30
|
+
e2e_token?: string;
|
|
31
|
+
monitor_ws_url?: string;
|
|
32
|
+
features?: {
|
|
33
|
+
speech_frontend?: {
|
|
34
|
+
enable_aec?: boolean;
|
|
35
|
+
[key: string]: unknown;
|
|
36
|
+
};
|
|
37
|
+
[key: string]: unknown;
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
features?: {
|
|
41
|
+
speech_frontend?: {
|
|
42
|
+
enable_aec?: boolean;
|
|
43
|
+
[key: string]: unknown;
|
|
44
|
+
};
|
|
45
|
+
[key: string]: unknown;
|
|
46
|
+
};
|
|
47
|
+
session_start_time: string;
|
|
48
|
+
resource_pack: {
|
|
49
|
+
enable_robot_expression: boolean;
|
|
50
|
+
body_data_dir: string;
|
|
51
|
+
face_ani_char_data: string;
|
|
52
|
+
face_ani_preload_data: string;
|
|
53
|
+
offline_idle: IOfflineIdle[];
|
|
54
|
+
interpolate_joints: [number, number][];
|
|
55
|
+
};
|
|
56
|
+
reconnect_timeout: number;
|
|
57
|
+
reconnect_client_timeout: number;
|
|
58
|
+
config: {
|
|
59
|
+
background_img: string;
|
|
60
|
+
frame_rate: number;
|
|
61
|
+
look_name: string;
|
|
62
|
+
tts_vcn_id: string;
|
|
63
|
+
sta_face_id: string;
|
|
64
|
+
mp_service_id: string;
|
|
65
|
+
raw_audio: boolean;
|
|
66
|
+
resolution: {
|
|
67
|
+
width: number;
|
|
68
|
+
height: number;
|
|
69
|
+
};
|
|
70
|
+
init_events: [
|
|
71
|
+
{
|
|
72
|
+
type: string;
|
|
73
|
+
data: {
|
|
74
|
+
image: string;
|
|
75
|
+
axis_id: number;
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
];
|
|
79
|
+
fx?: {
|
|
80
|
+
transform?: {
|
|
81
|
+
offsetX: number;
|
|
82
|
+
offsetY: number;
|
|
83
|
+
scaleX: number;
|
|
84
|
+
scaleY: number;
|
|
85
|
+
};
|
|
86
|
+
shadow?: {
|
|
87
|
+
refPos: number[];
|
|
88
|
+
light: number[];
|
|
89
|
+
lightType: string;
|
|
90
|
+
blurRadius: number;
|
|
91
|
+
tint: number[];
|
|
92
|
+
intensity: number;
|
|
93
|
+
};
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
export default class ResourceManager {
|
|
98
|
+
private TAG;
|
|
99
|
+
options: TOptions;
|
|
100
|
+
sdk: XmovAvatar;
|
|
101
|
+
session_id?: string;
|
|
102
|
+
mouthShapeLib: any;
|
|
103
|
+
offlineIdle: IOfflineIdle[];
|
|
104
|
+
offlineCache: Map<string, {
|
|
105
|
+
data: ArrayBuffer;
|
|
106
|
+
}>;
|
|
107
|
+
networkInfos: INetworkInfo[];
|
|
108
|
+
private bg;
|
|
109
|
+
private destroyed;
|
|
110
|
+
resource_pack: {
|
|
111
|
+
enable_robot_expression: boolean;
|
|
112
|
+
body_data_dir: string;
|
|
113
|
+
face_ani_char_data: string;
|
|
114
|
+
face_ani_preload_data: string;
|
|
115
|
+
blendshape_map?: number[][];
|
|
116
|
+
interpolate_joints: [number, number][];
|
|
117
|
+
};
|
|
118
|
+
progress: number;
|
|
119
|
+
config: {
|
|
120
|
+
background_img: string;
|
|
121
|
+
frame_rate: number;
|
|
122
|
+
look_name: string;
|
|
123
|
+
tts_vcn_id: string;
|
|
124
|
+
sta_face_id: string;
|
|
125
|
+
mp_service_id: string;
|
|
126
|
+
raw_audio: boolean;
|
|
127
|
+
resolution: {
|
|
128
|
+
width: number;
|
|
129
|
+
height: number;
|
|
130
|
+
};
|
|
131
|
+
init_events: [
|
|
132
|
+
{
|
|
133
|
+
type: string;
|
|
134
|
+
"x_location"?: number;
|
|
135
|
+
"y_location"?: number;
|
|
136
|
+
width?: number;
|
|
137
|
+
height: number;
|
|
138
|
+
speech_id: number;
|
|
139
|
+
data?: {
|
|
140
|
+
image: string;
|
|
141
|
+
axis_id: number;
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
];
|
|
145
|
+
framedata_proto_version: number;
|
|
146
|
+
layout: Layout;
|
|
147
|
+
walk_config: WalkConfig;
|
|
148
|
+
fx?: {
|
|
149
|
+
transform?: {
|
|
150
|
+
offsetX: number;
|
|
151
|
+
offsetY: number;
|
|
152
|
+
scaleX: number;
|
|
153
|
+
scaleY: number;
|
|
154
|
+
};
|
|
155
|
+
shadow?: {
|
|
156
|
+
refPos: number[];
|
|
157
|
+
light: number[];
|
|
158
|
+
lightType: string;
|
|
159
|
+
blurRadius: number;
|
|
160
|
+
tint: number[];
|
|
161
|
+
intensity: number;
|
|
162
|
+
};
|
|
163
|
+
};
|
|
164
|
+
};
|
|
165
|
+
private videoCache;
|
|
166
|
+
private maxCacheSize;
|
|
167
|
+
private maxCacheEntries;
|
|
168
|
+
private cacheCleanupInterval;
|
|
169
|
+
private isProcessingVideo;
|
|
170
|
+
private cacheServer?;
|
|
171
|
+
private startSessionTimer;
|
|
172
|
+
private downloadingVideos;
|
|
173
|
+
first_load: boolean;
|
|
174
|
+
constructor(options: TOptions);
|
|
175
|
+
getAppInfo(): {
|
|
176
|
+
appId: string;
|
|
177
|
+
};
|
|
178
|
+
/**
|
|
179
|
+
* 加载背景图片
|
|
180
|
+
* @returns Promise<void>
|
|
181
|
+
*/
|
|
182
|
+
getBackgroundImage(): Promise<void>;
|
|
183
|
+
getIsEnableRobotExpression(): boolean;
|
|
184
|
+
/**
|
|
185
|
+
* 获取背景图片
|
|
186
|
+
* @returns HTMLImageElement | null
|
|
187
|
+
*/
|
|
188
|
+
getBackgroundImageElement(): HTMLImageElement | null;
|
|
189
|
+
getConfig(): {
|
|
190
|
+
background_img: string;
|
|
191
|
+
frame_rate: number;
|
|
192
|
+
look_name: string;
|
|
193
|
+
tts_vcn_id: string;
|
|
194
|
+
sta_face_id: string;
|
|
195
|
+
mp_service_id: string;
|
|
196
|
+
raw_audio: boolean;
|
|
197
|
+
resolution: {
|
|
198
|
+
width: number;
|
|
199
|
+
height: number;
|
|
200
|
+
};
|
|
201
|
+
init_events: [{
|
|
202
|
+
type: string;
|
|
203
|
+
x_location?: number | undefined;
|
|
204
|
+
y_location?: number | undefined;
|
|
205
|
+
width?: number | undefined;
|
|
206
|
+
height: number;
|
|
207
|
+
speech_id: number;
|
|
208
|
+
data?: {
|
|
209
|
+
image: string;
|
|
210
|
+
axis_id: number;
|
|
211
|
+
} | undefined;
|
|
212
|
+
}];
|
|
213
|
+
framedata_proto_version: number;
|
|
214
|
+
layout: Layout;
|
|
215
|
+
walk_config: WalkConfig;
|
|
216
|
+
fx?: {
|
|
217
|
+
transform?: {
|
|
218
|
+
offsetX: number;
|
|
219
|
+
offsetY: number;
|
|
220
|
+
scaleX: number;
|
|
221
|
+
scaleY: number;
|
|
222
|
+
} | undefined;
|
|
223
|
+
shadow?: {
|
|
224
|
+
refPos: number[];
|
|
225
|
+
light: number[];
|
|
226
|
+
lightType: string;
|
|
227
|
+
blurRadius: number;
|
|
228
|
+
tint: number[];
|
|
229
|
+
intensity: number;
|
|
230
|
+
} | undefined;
|
|
231
|
+
} | undefined;
|
|
232
|
+
};
|
|
233
|
+
load(onDownloadProgress?: TDownloadProgress): Promise<ISessionResponse | null>;
|
|
234
|
+
startSession(): Promise<any>;
|
|
235
|
+
_startSession(): Promise<any> | null;
|
|
236
|
+
stopSession(stop_reason: string): Promise<any>;
|
|
237
|
+
/**
|
|
238
|
+
* 加载表情数据
|
|
239
|
+
*/
|
|
240
|
+
loadMouthShapeLib(onDownloadProgress?: TDownloadProgress): Promise<void>;
|
|
241
|
+
getMouthShapeLib(): any;
|
|
242
|
+
getVideoUrl(name: string): string;
|
|
243
|
+
/**
|
|
244
|
+
* 预加载视频
|
|
245
|
+
* @param name 视频名称
|
|
246
|
+
* @returns Promise<ArrayBuffer>
|
|
247
|
+
*/
|
|
248
|
+
preloadVideo(name: string): Promise<ArrayBuffer | undefined>;
|
|
249
|
+
/**
|
|
250
|
+
* 加载视频
|
|
251
|
+
* @param name 视频名称
|
|
252
|
+
* @returns Promise<ArrayBuffer>
|
|
253
|
+
*/
|
|
254
|
+
loadVideo(name: string): Promise<ArrayBuffer | undefined>;
|
|
255
|
+
/**
|
|
256
|
+
* 实际下载视频的方法
|
|
257
|
+
* @param name 视频名称
|
|
258
|
+
* @returns Promise<ArrayBuffer>
|
|
259
|
+
*/
|
|
260
|
+
private downloadVideo;
|
|
261
|
+
private _fetchVideo;
|
|
262
|
+
/**
|
|
263
|
+
* 添加数据到缓存
|
|
264
|
+
*/
|
|
265
|
+
private addToCache;
|
|
266
|
+
/**
|
|
267
|
+
* 启动缓存清理定时器
|
|
268
|
+
*/
|
|
269
|
+
private startCacheCleanup;
|
|
270
|
+
/**
|
|
271
|
+
* 清理缓存
|
|
272
|
+
*/
|
|
273
|
+
private cleanupCache;
|
|
274
|
+
/**
|
|
275
|
+
* 更新缓存访问信息
|
|
276
|
+
*/
|
|
277
|
+
private updateCacheAccess;
|
|
278
|
+
/**
|
|
279
|
+
* 清空所有缓存
|
|
280
|
+
*/
|
|
281
|
+
clearAllCache(): void;
|
|
282
|
+
/** 获取离线 idle */
|
|
283
|
+
_getOfflineIdle(): IOfflineIdle[];
|
|
284
|
+
/** 获取上一次 session_id */
|
|
285
|
+
_getSessionId(): string;
|
|
286
|
+
/** 离线重连 */
|
|
287
|
+
_reload(): Promise<ISessionResponse | null>;
|
|
288
|
+
_setOfflineCache(): Promise<void>;
|
|
289
|
+
private _runOfflineCache;
|
|
290
|
+
/**
|
|
291
|
+
* 销毁资源管理器
|
|
292
|
+
*/
|
|
293
|
+
destroy(): void;
|
|
294
|
+
}
|
|
295
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { IRawWidgetData } from '../../types/frame-data';
|
|
2
|
+
import TrackPic from './track-pic';
|
|
3
|
+
import TrackSubtitle from './track-subtitle';
|
|
4
|
+
export default class TrackRenderer {
|
|
5
|
+
private TAG;
|
|
6
|
+
tracker: TrackPic | TrackSubtitle;
|
|
7
|
+
private instance?;
|
|
8
|
+
constructor(event: IRawWidgetData, instance?: any);
|
|
9
|
+
render(): HTMLDivElement | null;
|
|
10
|
+
stop(): void;
|
|
11
|
+
destroy(): void;
|
|
12
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* widget_xx 的默认实现
|
|
3
|
+
*/
|
|
4
|
+
import { IWidgetPic, IWidgetSubtitle, IWidget } from "../../types/event";
|
|
5
|
+
import { IRawWidgetData } from "../../types/frame-data";
|
|
6
|
+
declare const WidgetDefaultRenderer: {
|
|
7
|
+
_el(data: IWidget): HTMLDivElement;
|
|
8
|
+
WIDGET_PIC(data: IWidgetPic, instance?: any): HTMLDivElement;
|
|
9
|
+
WIDGET_SUBTITLE(data: IWidgetSubtitle, instance?: any): HTMLDivElement | null;
|
|
10
|
+
CUSTOM_WIDGET?(data: IRawWidgetData): void;
|
|
11
|
+
PROXY_WIDGET?: {
|
|
12
|
+
[key: string]: (data: any) => void;
|
|
13
|
+
};
|
|
14
|
+
destroy(instance?: any): void;
|
|
15
|
+
_getWidgetKey(type: string, axisId?: number): string;
|
|
16
|
+
_replaceWidget(type: string, axisId: number, newElement: HTMLDivElement, instance?: any): void;
|
|
17
|
+
_currentInstance?: any;
|
|
18
|
+
};
|
|
19
|
+
export default WidgetDefaultRenderer;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { IWidgetPic } from "../../types/event";
|
|
2
|
+
import BaseTrack from "./base-track";
|
|
3
|
+
export default class ImageTrack extends BaseTrack {
|
|
4
|
+
data: IWidgetPic;
|
|
5
|
+
private instance?;
|
|
6
|
+
constructor(data: IWidgetPic, instance?: any);
|
|
7
|
+
render(): HTMLDivElement | null;
|
|
8
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { IWidgetSubtitle } from "../../types/event";
|
|
2
|
+
import BaseTrack from "./base-track";
|
|
3
|
+
export default class SubtitleTrack extends BaseTrack {
|
|
4
|
+
data: IWidgetSubtitle;
|
|
5
|
+
private instance?;
|
|
6
|
+
constructor(data: IWidgetSubtitle, instance?: any);
|
|
7
|
+
render(): HTMLDivElement | null;
|
|
8
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { bodyFile, IRawBodyFrameData } from "../types/frame-data";
|
|
2
|
+
import ResourceManager, { IOfflineIdle } from "./ResourceManager";
|
|
3
|
+
import SaveAndDownload from "../control/SaveAndDownload";
|
|
4
|
+
import { DataCacheQueue } from "../control/DataCacheQueue";
|
|
5
|
+
import { EErrorCode } from "../types/error";
|
|
6
|
+
export default class ParallelDecoder {
|
|
7
|
+
private tasks;
|
|
8
|
+
private queue;
|
|
9
|
+
private maxParallel;
|
|
10
|
+
private currentParallel;
|
|
11
|
+
private _locked;
|
|
12
|
+
private currentTaskId;
|
|
13
|
+
private resourceManager;
|
|
14
|
+
private onFrame;
|
|
15
|
+
private onDone;
|
|
16
|
+
private isFirstDecode;
|
|
17
|
+
private pendingAbort;
|
|
18
|
+
private abortAfterEf;
|
|
19
|
+
private pendingNewQueue;
|
|
20
|
+
private currentDecodedFrameIndex;
|
|
21
|
+
private abortAfterFrame;
|
|
22
|
+
private cacheVideoCount;
|
|
23
|
+
private saveAndDownload;
|
|
24
|
+
private dataCacheQueue;
|
|
25
|
+
private bodyFrameCountMap;
|
|
26
|
+
private maxVideoCount;
|
|
27
|
+
private hardwareAcceleration;
|
|
28
|
+
private MAX_LOAD_VIDEO_TIMEOUT_MS;
|
|
29
|
+
_offlineLastFrame: number;
|
|
30
|
+
_offlineIdle: IOfflineIdle[];
|
|
31
|
+
_offlineIdleIndex: number;
|
|
32
|
+
firstDecodeFrame: boolean;
|
|
33
|
+
reportMessage: (message: {
|
|
34
|
+
code: EErrorCode;
|
|
35
|
+
message: string;
|
|
36
|
+
e?: object;
|
|
37
|
+
}) => void;
|
|
38
|
+
constructor(options: {
|
|
39
|
+
hardwareAcceleration: string;
|
|
40
|
+
resourceManager: ResourceManager;
|
|
41
|
+
saveAndDownload: SaveAndDownload;
|
|
42
|
+
dataCacheQueue: DataCacheQueue;
|
|
43
|
+
reportMessage: (message: {
|
|
44
|
+
code: EErrorCode;
|
|
45
|
+
message: string;
|
|
46
|
+
e?: object;
|
|
47
|
+
}) => void;
|
|
48
|
+
});
|
|
49
|
+
getRandomTaskId(): string;
|
|
50
|
+
decode(files: Array<IRawBodyFrameData>, onFrame: (file: bodyFile, frame: any, index: number) => void): void;
|
|
51
|
+
clearOldQueue(frame: number): void;
|
|
52
|
+
updateQueue(files: Array<IRawBodyFrameData>): void;
|
|
53
|
+
_isIOS(): boolean;
|
|
54
|
+
getQueue(): {
|
|
55
|
+
x_offset: never[];
|
|
56
|
+
hfd: boolean;
|
|
57
|
+
aef: number;
|
|
58
|
+
asf: number;
|
|
59
|
+
id: number;
|
|
60
|
+
n: string;
|
|
61
|
+
s: string;
|
|
62
|
+
body_id: number;
|
|
63
|
+
sf: number;
|
|
64
|
+
ef: number;
|
|
65
|
+
}[];
|
|
66
|
+
timeoutPromise(ms: number, reason?: string): Promise<unknown>;
|
|
67
|
+
loadVideoWithTimeout(videoKey: string): Promise<ArrayBuffer | null>;
|
|
68
|
+
_tryStartNext(): Promise<void>;
|
|
69
|
+
_startWorker(file: bodyFile): void;
|
|
70
|
+
cacheVideo(): void;
|
|
71
|
+
abort(): void;
|
|
72
|
+
abortOne(id: string): void;
|
|
73
|
+
destroy(): void;
|
|
74
|
+
_handlePendingAbort(file: bodyFile, index: number): void;
|
|
75
|
+
private _cleanupOldWorkers;
|
|
76
|
+
syncDecode(currentFrameIndex: number): void;
|
|
77
|
+
/** 进入正常模式 */
|
|
78
|
+
_reload(): void;
|
|
79
|
+
/** 进入离线,清空剩余身体数据 */
|
|
80
|
+
_offLineMode(offlineIdle: IOfflineIdle[], currentFrame: number): void;
|
|
81
|
+
_offlineRun(): void;
|
|
82
|
+
/** 设置 idle 视频 */
|
|
83
|
+
_putOfflineBodyData(idle: IOfflineIdle): void;
|
|
84
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { EErrorCode } from "../types/error";
|
|
2
|
+
export default function Errors(params: {
|
|
3
|
+
code: EErrorCode;
|
|
4
|
+
message: string;
|
|
5
|
+
e?: any;
|
|
6
|
+
session_id?: string;
|
|
7
|
+
client_speak_id?: string;
|
|
8
|
+
}): {
|
|
9
|
+
code: EErrorCode;
|
|
10
|
+
error_code: number;
|
|
11
|
+
error_name: string;
|
|
12
|
+
message: string;
|
|
13
|
+
session_id: string;
|
|
14
|
+
client_speak_id: string | undefined;
|
|
15
|
+
timestamp: number;
|
|
16
|
+
originalError: string | null;
|
|
17
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
interface NetworkOptions {
|
|
2
|
+
offlineCallback(message?: string): void;
|
|
3
|
+
onlineCallback(message?: string): void;
|
|
4
|
+
}
|
|
5
|
+
export default class NetworkMonitor {
|
|
6
|
+
private TAG;
|
|
7
|
+
static ONLINE: boolean;
|
|
8
|
+
private readonly options;
|
|
9
|
+
private retryCount;
|
|
10
|
+
private retryTimer;
|
|
11
|
+
private bindHandleOnline;
|
|
12
|
+
private bindHandleOffline;
|
|
13
|
+
constructor(options: NetworkOptions);
|
|
14
|
+
private _initEventListeners;
|
|
15
|
+
private _handleOnline;
|
|
16
|
+
private _handleOffline;
|
|
17
|
+
private _attempt;
|
|
18
|
+
setState(isOnline: boolean): void;
|
|
19
|
+
destroy(): void;
|
|
20
|
+
}
|
|
21
|
+
export {};
|
|
File without changes
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type CapabilitySeverity = 'fatal' | 'warn';
|
|
2
|
+
export type CapabilityName = 'secureContext' | 'webgl2' | 'audio' | 'webcodecs' | 'worker';
|
|
3
|
+
export interface ICapabilityCheckItem {
|
|
4
|
+
name: CapabilityName;
|
|
5
|
+
supported: boolean;
|
|
6
|
+
severity: CapabilitySeverity;
|
|
7
|
+
reason?: string;
|
|
8
|
+
detail?: unknown;
|
|
9
|
+
}
|
|
10
|
+
export interface ICapabilityCheckReport {
|
|
11
|
+
supported: boolean;
|
|
12
|
+
fatalCount: number;
|
|
13
|
+
warnCount: number;
|
|
14
|
+
items: ICapabilityCheckItem[];
|
|
15
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file 错误码和定义
|
|
3
|
+
*/
|
|
4
|
+
export declare enum EErrorCode {
|
|
5
|
+
CONTAINER_NOT_FOUND = 10001,
|
|
6
|
+
CONNECT_SOCKET_ERROR = 10002,
|
|
7
|
+
START_SESSION_ERROR = 10003,
|
|
8
|
+
STOP_SESSION_ERROR = 10004,
|
|
9
|
+
INIT_ERROR = 10005,
|
|
10
|
+
SOCKET_QUIT = 10006,
|
|
11
|
+
SOCKET_DISCONNECT = 10007,
|
|
12
|
+
VIDEO_FRAME_EXTRACT_ERROR = 20001,
|
|
13
|
+
INIT_WORKER_ERROR = 20002,
|
|
14
|
+
PROCESS_VIDEO_STREAM_ERROR = 20003,
|
|
15
|
+
FACE_PROCESSING_ERROR = 20004,
|
|
16
|
+
RENDER_BODY_ERROR = 20005,
|
|
17
|
+
RENDER_FACE_ERROR = 20006,
|
|
18
|
+
WebGL_RENDER_ERROR = 20007,
|
|
19
|
+
RENDER_DATA_MISSING = 20008,
|
|
20
|
+
RENDER_FACE_DATA_MISSING = 20009,
|
|
21
|
+
EVENT_WITHOUT_SPEECH_ID = 20010,
|
|
22
|
+
EVENT_TRIGGERED = 20011,
|
|
23
|
+
BACKGROUND_IMAGE_LOAD_ERROR = 30001,
|
|
24
|
+
FACE_BIN_LOAD_ERROR = 30002,
|
|
25
|
+
INVALID_BODY_NAME = 30003,
|
|
26
|
+
VIDEO_DOWNLOAD_ERROR = 30004,
|
|
27
|
+
BODY_DATA_EXPIRED = 30005,
|
|
28
|
+
EVENT_SPEAK_START_EXPIRED = 30006,
|
|
29
|
+
EVENT_VOICE_START_EXPIRED = 30007,
|
|
30
|
+
AUDIO_DECODE_ERROR = 40001,
|
|
31
|
+
FACE_DECODE_ERROR = 40002,
|
|
32
|
+
VIDEO_DECODE_ERROR = 40003,
|
|
33
|
+
EVENT_DECODE_ERROR = 40004,
|
|
34
|
+
INVALID_DATA_STRUCTURE = 40005,
|
|
35
|
+
TTSA_ERROR = 40006,
|
|
36
|
+
AUDIO_DATA_EXPIRED = 40007,
|
|
37
|
+
NETWORK_DOWN = 50001,
|
|
38
|
+
NETWORK_UP = 50002,
|
|
39
|
+
NETWORK_RETRY = 50003,
|
|
40
|
+
NETWORK_BREAK = 50004,
|
|
41
|
+
WEBGL_CONTEXT_LOST = 60001,
|
|
42
|
+
WEBGL_CONTEXT_RESTORED = 60002,
|
|
43
|
+
/** @deprecated 未在任何场景实际触发,仅保留枚举值以兼容旧文档解析 */
|
|
44
|
+
WEBGL_CONTEXT_RESTORE_TIMEOUT = 60003,
|
|
45
|
+
WEBGL_CONTEXT_RECOVERED = 60004,
|
|
46
|
+
WEBGL_CONTEXT_RECOVERY_FAILED = 60005,
|
|
47
|
+
WEBGL_CONTEXT_RECOVERY_MAX_ATTEMPTS = 60006,
|
|
48
|
+
WEBGL_RESOLUTION_RESTORED = 60007,
|
|
49
|
+
WEBGL_CONTEXT_MANUAL_RESTARTED = 60008
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* 错误码新旧映射表
|
|
53
|
+
* key: 旧错误码(1xxxx-6xxxx)
|
|
54
|
+
* value: 新错误码(31xx-36xx)
|
|
55
|
+
*/
|
|
56
|
+
export declare const ERROR_CODE_MAP: Record<number, number>;
|
|
57
|
+
/**
|
|
58
|
+
* 错误码名称映射
|
|
59
|
+
*/
|
|
60
|
+
export declare const ERROR_NAME_MAP: Record<number, string>;
|
|
61
|
+
export interface SDKError {
|
|
62
|
+
code: EErrorCode;
|
|
63
|
+
error_code: number;
|
|
64
|
+
error_name: string;
|
|
65
|
+
message: string;
|
|
66
|
+
session_id: string;
|
|
67
|
+
client_speak_id?: string;
|
|
68
|
+
timestamp: number;
|
|
69
|
+
originalError?: any;
|
|
70
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type TWidgetType = 'widget_pic' | 'subtitle_on' | 'subtitle_off' | any;
|
|
2
|
+
/** UI 控件位置 */
|
|
3
|
+
export interface IWidgetCommon {
|
|
4
|
+
axis_id: number;
|
|
5
|
+
'x_location'?: number;
|
|
6
|
+
'y_location'?: number;
|
|
7
|
+
width?: number;
|
|
8
|
+
height?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface IWidgetPic extends IWidgetCommon {
|
|
11
|
+
image: string;
|
|
12
|
+
}
|
|
13
|
+
export interface IWidgetSubtitle extends IWidgetCommon {
|
|
14
|
+
text: string;
|
|
15
|
+
axis_id: number;
|
|
16
|
+
type: TWidgetType;
|
|
17
|
+
}
|
|
18
|
+
export type IWidget = IWidgetPic | IWidgetSubtitle | any;
|
|
19
|
+
export interface ISetCharacterCanvasAnchor {
|
|
20
|
+
type: string;
|
|
21
|
+
'x_location': number;
|
|
22
|
+
'y_location': number;
|
|
23
|
+
width: number;
|
|
24
|
+
height: number;
|
|
25
|
+
}
|