@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
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { AvatarStatus, RenderState, IAvatarOptions, IInitParams, Layout, WalkConfig } from "./types/index";
|
|
2
|
+
import { ISessionResponse, TDownloadProgress } from "./modules/ResourceManager";
|
|
3
|
+
import Errors from './modules/error-handle';
|
|
4
|
+
import './utils/logger.js';
|
|
5
|
+
import { IBRAnimationGeneratorCharInfo_NN, unpackIBRAnimation, formatMJT } from './utils/DataInterface';
|
|
6
|
+
import { getVertices, getWavefrontObjFromVertices, getPCATextures } from './utils/GLPipelineDebugTools';
|
|
7
|
+
import { GLDevice } from './utils/GLDevice';
|
|
8
|
+
import { GLPipeline } from './utils/GLPipeline';
|
|
9
|
+
import { checkCapability } from './utils/capability-checker';
|
|
10
|
+
export default class XmovAvatar {
|
|
11
|
+
private options;
|
|
12
|
+
private TAG;
|
|
13
|
+
private el;
|
|
14
|
+
private status;
|
|
15
|
+
private resourceManager;
|
|
16
|
+
private renderScheduler;
|
|
17
|
+
private networkMonitor;
|
|
18
|
+
private ttsa;
|
|
19
|
+
private debugOverlay;
|
|
20
|
+
private _offlineTimer;
|
|
21
|
+
private readonly _offlineInterval;
|
|
22
|
+
private _env;
|
|
23
|
+
private avatarCanvasVisible;
|
|
24
|
+
private pendingInvisibleMode;
|
|
25
|
+
private isInitialized;
|
|
26
|
+
onStateChange: (state: string) => void;
|
|
27
|
+
onDownloadProgress: TDownloadProgress | null;
|
|
28
|
+
static IBRAnimationGeneratorCharInfo_NN: typeof IBRAnimationGeneratorCharInfo_NN;
|
|
29
|
+
static unpackIBRAnimation: typeof unpackIBRAnimation;
|
|
30
|
+
static formatMJT: typeof formatMJT;
|
|
31
|
+
static getVertices: typeof getVertices;
|
|
32
|
+
static getPCATextures: typeof getPCATextures;
|
|
33
|
+
static getWavefrontObjFromVertices: typeof getWavefrontObjFromVertices;
|
|
34
|
+
static GLDevice: typeof GLDevice;
|
|
35
|
+
static GLPipeline: typeof GLPipeline;
|
|
36
|
+
static checkCapability: typeof checkCapability;
|
|
37
|
+
private boundVisibilityChange;
|
|
38
|
+
private replayData;
|
|
39
|
+
private startConnectTime;
|
|
40
|
+
private connectSuccessTime;
|
|
41
|
+
private sessionResTime;
|
|
42
|
+
private charbinResTime;
|
|
43
|
+
private isfirstReceive;
|
|
44
|
+
private enableClientInterrupt;
|
|
45
|
+
private retryCount;
|
|
46
|
+
private retryTimer;
|
|
47
|
+
private maxRetryCount;
|
|
48
|
+
private retryRound;
|
|
49
|
+
private maxRetryRound;
|
|
50
|
+
private isRetrying;
|
|
51
|
+
private isStartRetry;
|
|
52
|
+
private destroyed;
|
|
53
|
+
private incompleteInitializationCleanupPromise;
|
|
54
|
+
private captureAudioCtx;
|
|
55
|
+
private captureWorklet;
|
|
56
|
+
private captureSource;
|
|
57
|
+
private captureSetupPromise;
|
|
58
|
+
private captureLastSpeechId;
|
|
59
|
+
private restartPlaybackCaptureImpl;
|
|
60
|
+
private captureEncodeQueue;
|
|
61
|
+
private captureGeneration;
|
|
62
|
+
private pcmCaptureLastSpeechId;
|
|
63
|
+
private pcmCaptureFirstChunk;
|
|
64
|
+
private pcmWebMEncoder;
|
|
65
|
+
private mediaRecorderEncoder;
|
|
66
|
+
private pcmCaptureMode;
|
|
67
|
+
private pcmEncodeId;
|
|
68
|
+
private reconnectDebounceTimer;
|
|
69
|
+
private networkInfo;
|
|
70
|
+
private mediaRecorder;
|
|
71
|
+
private recordedChunks;
|
|
72
|
+
private stream;
|
|
73
|
+
private _isClientMode;
|
|
74
|
+
private _streamingClient;
|
|
75
|
+
private _videoPlayer;
|
|
76
|
+
private _eventDispatcher;
|
|
77
|
+
private _apiForwarder;
|
|
78
|
+
private _clientOnDownloadProgress;
|
|
79
|
+
private _pendingInit;
|
|
80
|
+
private _pendingInitConfig;
|
|
81
|
+
private _clientSessionId;
|
|
82
|
+
constructor(options: IAvatarOptions);
|
|
83
|
+
getStatus(): AvatarStatus | -1;
|
|
84
|
+
get businessENV(): string;
|
|
85
|
+
getUniqueSpeakId(): string;
|
|
86
|
+
private initializeSDK;
|
|
87
|
+
/**
|
|
88
|
+
* 薄客户端模式初始化:创建容器、StreamingClient、VideoPlayer、EventDispatcher、APIForwarder
|
|
89
|
+
*/
|
|
90
|
+
private initializeClient;
|
|
91
|
+
private renderFrameCallback;
|
|
92
|
+
init(params: IInitParams): Promise<ISessionResponse | null | undefined>;
|
|
93
|
+
/**
|
|
94
|
+
* 初始化音频捕获(MSE 模式)
|
|
95
|
+
* 通过 AudioContext.createMediaElementSource 接管 <audio> 元素输出,
|
|
96
|
+
* 按 1600 samples 分桶后使用 WebCodecs 编码为 opus (WebM 容器),
|
|
97
|
+
* 并回调给业务侧用于 ASR 回声消除(AEC)。
|
|
98
|
+
*
|
|
99
|
+
* 架构:
|
|
100
|
+
* - AudioWorklet 负责 100ms 分桶和静音检测
|
|
101
|
+
* - WebCodecs AudioEncoder + WebMMuxer 负责 opus/WebM 编码
|
|
102
|
+
* - 每次 speak 会话的首段音频自动包含 WebM 容器头(isFirstChunk=true)
|
|
103
|
+
*
|
|
104
|
+
* 注意:
|
|
105
|
+
* - createMediaElementSource 对同一个 audio 元素只能调用一次
|
|
106
|
+
* - 接管后必须手动 connect 到 destination,否则音频不会播放
|
|
107
|
+
* - MSE 播放器 stop 时只销毁 MediaSource,audio 元素不变,捕获绑定不受影响
|
|
108
|
+
*/
|
|
109
|
+
protected setAudioPlaybackDataHandler(handler?: IAvatarOptions["onAudioPlaybackData"]): void;
|
|
110
|
+
protected restartAudioPlaybackCapture(): void;
|
|
111
|
+
protected enableAudioPlaybackCapture(): Promise<void>;
|
|
112
|
+
private setupAudioCapture;
|
|
113
|
+
/**
|
|
114
|
+
* 初始化 PCM 模式音频捕获(raw_audio=true 时使用)
|
|
115
|
+
* 通过 PCMAudioPlayer 的 capture worklet 拦截音频输出,
|
|
116
|
+
* 经 WebCodecs 或 MediaRecorder 编码为 WebM/Opus 后回调给业务侧
|
|
117
|
+
*/
|
|
118
|
+
private setupPCMCapture;
|
|
119
|
+
visibilitychange(): void;
|
|
120
|
+
setReplayData(data: any): void;
|
|
121
|
+
handleReplaySend(frame: number): void;
|
|
122
|
+
private connectTtsa;
|
|
123
|
+
protected start(): void;
|
|
124
|
+
protected onTtsaReady(_sessionInfo?: ISessionResponse): void;
|
|
125
|
+
private _reload;
|
|
126
|
+
protected onSessionReloaded(_sessionInfo: ISessionResponse): Promise<void>;
|
|
127
|
+
protected onSessionReloadExhausted(_error?: unknown): void;
|
|
128
|
+
protected restartSessionForTransport(reason: string): Promise<void>;
|
|
129
|
+
protected cancelSessionRestart(): void;
|
|
130
|
+
reloadSuccess(): void;
|
|
131
|
+
protected stop(): Promise<void>;
|
|
132
|
+
private handleBeforeUnload;
|
|
133
|
+
isDestroyed(): boolean;
|
|
134
|
+
destroyClient(): Promise<void>;
|
|
135
|
+
destroy(stop_reason?: string): Promise<void>;
|
|
136
|
+
idle(): void;
|
|
137
|
+
listen(): void;
|
|
138
|
+
think(): void;
|
|
139
|
+
interactiveidle(): void;
|
|
140
|
+
speak(ssml: string, is_start?: boolean, is_end?: boolean, extra?: {
|
|
141
|
+
client_speak_id: string;
|
|
142
|
+
client_frame: number;
|
|
143
|
+
}): string | undefined;
|
|
144
|
+
setOffsetFrame(offsetFrame: number): void;
|
|
145
|
+
syncTimestamp(): void;
|
|
146
|
+
/**
|
|
147
|
+
* 通知后端进入隐身模式
|
|
148
|
+
*/
|
|
149
|
+
private notifyEnterInvisibleMode;
|
|
150
|
+
/**
|
|
151
|
+
* 通知后端退出隐身模式
|
|
152
|
+
*/
|
|
153
|
+
private notifyExitInvisibleMode;
|
|
154
|
+
setVolume(volume: number): void;
|
|
155
|
+
getSessionId(): string | undefined;
|
|
156
|
+
showDebugInfo(): void;
|
|
157
|
+
hideDebugInfo(): void;
|
|
158
|
+
changeAvatarVisible(visible: boolean): void;
|
|
159
|
+
/**
|
|
160
|
+
* 在初始化未完成时清理所有已初始化的资源
|
|
161
|
+
* @param reason 清理原因
|
|
162
|
+
*/
|
|
163
|
+
protected cleanupBeforeInitComplete(reason: string): Promise<void>;
|
|
164
|
+
protected reportInitializationFailure(message: string, cause?: unknown): void;
|
|
165
|
+
private offlineHandle;
|
|
166
|
+
stopSessionFromSocket(reason: string): Promise<void>;
|
|
167
|
+
offlineMode(): void;
|
|
168
|
+
onlineMode(): void;
|
|
169
|
+
onMessage(params: Parameters<typeof Errors>[0]): void;
|
|
170
|
+
onStatusChange(status: AvatarStatus): void;
|
|
171
|
+
/**
|
|
172
|
+
* 切换隐身模式(暂停/恢复音视频实时渲染)
|
|
173
|
+
*/
|
|
174
|
+
switchInvisibleMode(): void;
|
|
175
|
+
private setInvisibleMode;
|
|
176
|
+
getPendingInvisibleMode(): boolean;
|
|
177
|
+
/**
|
|
178
|
+
* 获取当前渲染状态
|
|
179
|
+
*/
|
|
180
|
+
getRenderState(): RenderState;
|
|
181
|
+
changeLayout(layout: Layout): void;
|
|
182
|
+
changeWalkConfig(walkConfig: WalkConfig): void;
|
|
183
|
+
interrupt(type: string): number;
|
|
184
|
+
private triggerReconnect;
|
|
185
|
+
reStartSession(): void;
|
|
186
|
+
private _retryImpl;
|
|
187
|
+
private clearAllRetryTimers;
|
|
188
|
+
private resetRetryState;
|
|
189
|
+
seekToFrame(frame: number): void;
|
|
190
|
+
startRecoder(): Promise<void>;
|
|
191
|
+
stopRecoder(): void;
|
|
192
|
+
exportVideo(): void;
|
|
193
|
+
getOptions(): IAvatarOptions;
|
|
194
|
+
/**
|
|
195
|
+
* [测试用] 模拟 WebGL 上下文丢失
|
|
196
|
+
* 用于测试分阶段恢复策略是否正常工作
|
|
197
|
+
*
|
|
198
|
+
* @param restoreAfterMs 自动恢复上下文的延迟时间(毫秒),默认 5000ms
|
|
199
|
+
* @param forceFail 强制恢复失败(用于测试 medium/full 阶段的升级逻辑)
|
|
200
|
+
*
|
|
201
|
+
* @example
|
|
202
|
+
* // 在浏览器控制台执行:
|
|
203
|
+
* avatar.simulateContextLoss(5000); // 模拟丢失,5秒后自动恢复
|
|
204
|
+
* avatar.simulateContextLoss(0, true); // 模拟丢失,不自动恢复(测试升级逻辑)
|
|
205
|
+
*/
|
|
206
|
+
simulateContextLoss(restoreAfterMs?: number, forceFail?: boolean): void;
|
|
207
|
+
/**
|
|
208
|
+
* [测试用] 获取当前 WebGL 上下文恢复状态
|
|
209
|
+
*/
|
|
210
|
+
getRecoveryStatus(): {
|
|
211
|
+
isRecovering: boolean;
|
|
212
|
+
stage: string;
|
|
213
|
+
attempts: number;
|
|
214
|
+
maxAttempts: number;
|
|
215
|
+
isUsingReducedResolution: boolean;
|
|
216
|
+
} | null;
|
|
217
|
+
/**
|
|
218
|
+
* [测试用] 批量测试分阶段恢复
|
|
219
|
+
* 依次触发多次上下文丢失,观察各阶段的恢复情况
|
|
220
|
+
*/
|
|
221
|
+
testStagedRecovery(): Promise<void>;
|
|
222
|
+
/**
|
|
223
|
+
* 手动重启 WebGL:创建新 canvas + 新 GLDevice + 新 GLPipeline
|
|
224
|
+
* 用于分阶段恢复全部失败后的手动恢复
|
|
225
|
+
* @returns 是否成功
|
|
226
|
+
*
|
|
227
|
+
* @example
|
|
228
|
+
* const ok = avatar.restartWebGL();
|
|
229
|
+
*/
|
|
230
|
+
restartWebGL(): boolean;
|
|
231
|
+
}
|