@zeewain/3d-avatar-sdk 1.2.5 → 2.1.2
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 +249 -12
- package/dist/assets/Build/webgl.data.unityweb +0 -0
- package/dist/assets/Build/webgl.framework.js.unityweb +0 -0
- package/dist/assets/Build/webgl.wasm.unityweb +0 -0
- package/dist/examples/test-umd/index.html +2 -1
- package/dist/examples/test-vue2/package.json +1 -1
- package/dist/examples/test-vue2/src/App.vue +1 -0
- package/dist/examples/test-vue3/package.json +1 -1
- package/dist/examples/test-vue3/src/App.vue +1 -1
- package/dist/examples/test-vue3/src/components/GlobalConfig.vue +9 -6
- package/dist/examples/test-vue3/src/types.ts +1 -1
- package/dist/index.d.ts +63 -39
- package/dist/index.es5.js +180 -87
- package/dist/index.es5.umd.js +180 -87
- package/dist/index.esm.js +229 -90
- package/dist/index.umd.cjs +229 -89
- package/package.json +6 -6
package/dist/index.esm.js
CHANGED
|
@@ -107,6 +107,8 @@ var ResourceErrorCode;
|
|
|
107
107
|
ResourceErrorCode[ResourceErrorCode["NOT_FOUND"] = 3003] = "NOT_FOUND";
|
|
108
108
|
/** 资源格式不支持 */
|
|
109
109
|
ResourceErrorCode[ResourceErrorCode["UNSUPPORTED_FORMAT"] = 3004] = "UNSUPPORTED_FORMAT";
|
|
110
|
+
/** 资源版本不兼容 */
|
|
111
|
+
ResourceErrorCode[ResourceErrorCode["VERSION_INCOMPATIBLE"] = 3005] = "VERSION_INCOMPATIBLE";
|
|
110
112
|
})(ResourceErrorCode || (ResourceErrorCode = {}));
|
|
111
113
|
/**
|
|
112
114
|
* 系统错误码 (4xxx)
|
|
@@ -213,6 +215,10 @@ const ERROR_CODE_MAP = {
|
|
|
213
215
|
category: ErrorCategory.RESOURCE,
|
|
214
216
|
message: '资源格式不支持'
|
|
215
217
|
},
|
|
218
|
+
[ResourceErrorCode.VERSION_INCOMPATIBLE]: {
|
|
219
|
+
category: ErrorCategory.RESOURCE,
|
|
220
|
+
message: '资源版本不兼容'
|
|
221
|
+
},
|
|
216
222
|
// 系统错误
|
|
217
223
|
[SystemErrorCode.OUT_OF_MEMORY]: {
|
|
218
224
|
category: ErrorCategory.SYSTEM,
|
|
@@ -401,6 +407,44 @@ class SDKError extends Error {
|
|
|
401
407
|
}
|
|
402
408
|
}
|
|
403
409
|
|
|
410
|
+
/**
|
|
411
|
+
* Unity服务日志级别枚举
|
|
412
|
+
* @enum {string}
|
|
413
|
+
* @description 定义日志记录的级别
|
|
414
|
+
*/
|
|
415
|
+
var LogLevel;
|
|
416
|
+
(function (LogLevel) {
|
|
417
|
+
LogLevel["DEBUG"] = "debug";
|
|
418
|
+
LogLevel["INFO"] = "info";
|
|
419
|
+
LogLevel["WARN"] = "warn";
|
|
420
|
+
LogLevel["ERROR"] = "error";
|
|
421
|
+
})(LogLevel || (LogLevel = {}));
|
|
422
|
+
/**
|
|
423
|
+
* 简单日志记录器实现
|
|
424
|
+
* @class SimpleLogger
|
|
425
|
+
* @implements {ISimpleLogger}
|
|
426
|
+
* @description 提供基础的日志记录功能
|
|
427
|
+
*/
|
|
428
|
+
class SimpleLogger {
|
|
429
|
+
constructor(enableDebug = false) {
|
|
430
|
+
this.enableDebug = enableDebug;
|
|
431
|
+
}
|
|
432
|
+
debug(message, data) {
|
|
433
|
+
if (this.enableDebug) {
|
|
434
|
+
console.debug(`[SDK DEBUG] ${message}`, data);
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
info(message, data) {
|
|
438
|
+
console.info(`[SDK INFO] ${message}`, data);
|
|
439
|
+
}
|
|
440
|
+
warn(message, data) {
|
|
441
|
+
console.warn(`[SDK WARN] ${message}`, data);
|
|
442
|
+
}
|
|
443
|
+
error(message, error, data) {
|
|
444
|
+
console.error(`[SDK ERROR] ${message}`, error, error instanceof SDKError ? error.code : null, data);
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
|
|
404
448
|
/**
|
|
405
449
|
* @fileoverview Unity服务基础类型定义
|
|
406
450
|
* @description 定义Unity服务的通用接口和类型,为所有Unity服务提供统一的基础类型
|
|
@@ -421,18 +465,6 @@ var UnityOperationStatus;
|
|
|
421
465
|
/** 操作取消 */
|
|
422
466
|
UnityOperationStatus[UnityOperationStatus["CANCELLED"] = 3] = "CANCELLED";
|
|
423
467
|
})(UnityOperationStatus || (UnityOperationStatus = {}));
|
|
424
|
-
/**
|
|
425
|
-
* Unity服务日志级别枚举
|
|
426
|
-
* @enum {string}
|
|
427
|
-
* @description 定义日志记录的级别
|
|
428
|
-
*/
|
|
429
|
-
var LogLevel;
|
|
430
|
-
(function (LogLevel) {
|
|
431
|
-
LogLevel["DEBUG"] = "debug";
|
|
432
|
-
LogLevel["INFO"] = "info";
|
|
433
|
-
LogLevel["WARN"] = "warn";
|
|
434
|
-
LogLevel["ERROR"] = "error";
|
|
435
|
-
})(LogLevel || (LogLevel = {}));
|
|
436
468
|
|
|
437
469
|
/**
|
|
438
470
|
* @fileoverview Unity服务抽象基类
|
|
@@ -717,31 +749,6 @@ class UnityBaseService {
|
|
|
717
749
|
});
|
|
718
750
|
}
|
|
719
751
|
}
|
|
720
|
-
/**
|
|
721
|
-
* 简单日志记录器实现
|
|
722
|
-
* @class SimpleLogger
|
|
723
|
-
* @implements {IUnityLogger}
|
|
724
|
-
* @description 提供基础的日志记录功能
|
|
725
|
-
*/
|
|
726
|
-
class SimpleLogger {
|
|
727
|
-
constructor(enableDebug = false) {
|
|
728
|
-
this.enableDebug = enableDebug;
|
|
729
|
-
}
|
|
730
|
-
debug(message, data) {
|
|
731
|
-
if (this.enableDebug) {
|
|
732
|
-
console.debug(`[Unity Debug] ${message}`, data);
|
|
733
|
-
}
|
|
734
|
-
}
|
|
735
|
-
info(message, data) {
|
|
736
|
-
console.info(`[Unity Info] ${message}`, data);
|
|
737
|
-
}
|
|
738
|
-
warn(message, data) {
|
|
739
|
-
console.warn(`[Unity Warning] ${message}`, data);
|
|
740
|
-
}
|
|
741
|
-
error(message, error, data) {
|
|
742
|
-
console.error(`[Unity Error] ${message}`, error, error instanceof SDKError ? error.code : null, data);
|
|
743
|
-
}
|
|
744
|
-
}
|
|
745
752
|
|
|
746
753
|
/**
|
|
747
754
|
* @fileoverview Avatar API接口定义
|
|
@@ -836,6 +843,9 @@ class AvatarService extends UnityBaseService {
|
|
|
836
843
|
}
|
|
837
844
|
});
|
|
838
845
|
}
|
|
846
|
+
handleCallback(operation, code, message, data) {
|
|
847
|
+
super.handleCallback(operation, code, message, data);
|
|
848
|
+
}
|
|
839
849
|
/**
|
|
840
850
|
* 播放数字人动作
|
|
841
851
|
* @param clipCode - 动作编码
|
|
@@ -1073,6 +1083,16 @@ class ConfigManager {
|
|
|
1073
1083
|
setConfig(config) {
|
|
1074
1084
|
this.config = Object.assign(Object.assign({}, config), { env: config.env || 'prod', containerId: config.containerId || 'unity-container' });
|
|
1075
1085
|
}
|
|
1086
|
+
/**
|
|
1087
|
+
* 更新SDK配置
|
|
1088
|
+
* @param config - SDK配置对象
|
|
1089
|
+
* @description 更新全局SDK配置
|
|
1090
|
+
*/
|
|
1091
|
+
updateConfig(config) {
|
|
1092
|
+
if (this.config) {
|
|
1093
|
+
this.config = Object.assign(Object.assign({}, this.config), config);
|
|
1094
|
+
}
|
|
1095
|
+
}
|
|
1076
1096
|
/**
|
|
1077
1097
|
* 获取SDK配置
|
|
1078
1098
|
* @returns IAvatarSDKConfig | null SDK配置对象或null
|
|
@@ -1081,24 +1101,6 @@ class ConfigManager {
|
|
|
1081
1101
|
getConfig() {
|
|
1082
1102
|
return this.config;
|
|
1083
1103
|
}
|
|
1084
|
-
/**
|
|
1085
|
-
* 获取认证token
|
|
1086
|
-
* @returns string 认证token
|
|
1087
|
-
* @description 获取当前配置的认证token
|
|
1088
|
-
*/
|
|
1089
|
-
getToken() {
|
|
1090
|
-
var _a;
|
|
1091
|
-
return ((_a = this.config) === null || _a === void 0 ? void 0 : _a.token) || '';
|
|
1092
|
-
}
|
|
1093
|
-
/**
|
|
1094
|
-
* 获取环境类型
|
|
1095
|
-
* @returns string 环境类型
|
|
1096
|
-
* @description 获取当前配置的环境类型
|
|
1097
|
-
*/
|
|
1098
|
-
getEnv() {
|
|
1099
|
-
var _a;
|
|
1100
|
-
return ((_a = this.config) === null || _a === void 0 ? void 0 : _a.env) || 'prod';
|
|
1101
|
-
}
|
|
1102
1104
|
/**
|
|
1103
1105
|
* 获取API基础URL
|
|
1104
1106
|
* @param withApiModule 是否包含模块路径
|
|
@@ -1113,15 +1115,6 @@ class ConfigManager {
|
|
|
1113
1115
|
}
|
|
1114
1116
|
return ((_d = getEnvConfig(((_c = this.config) === null || _c === void 0 ? void 0 : _c.env) || 'prod', withApiModule)) === null || _d === void 0 ? void 0 : _d.apiBaseUrl) || '';
|
|
1115
1117
|
}
|
|
1116
|
-
/**
|
|
1117
|
-
* 获取自定义API URL
|
|
1118
|
-
* @returns string | undefined 自定义API URL
|
|
1119
|
-
* @description 获取自定义API URL配置
|
|
1120
|
-
*/
|
|
1121
|
-
getCustomApiUrl() {
|
|
1122
|
-
var _a;
|
|
1123
|
-
return (_a = this.config) === null || _a === void 0 ? void 0 : _a.apiUrl;
|
|
1124
|
-
}
|
|
1125
1118
|
/**
|
|
1126
1119
|
* 重置配置
|
|
1127
1120
|
* @description 清空当前配置
|
|
@@ -1891,6 +1884,7 @@ class BroadcastService extends UnityBaseService {
|
|
|
1891
1884
|
*/
|
|
1892
1885
|
startTaskRequest(task) {
|
|
1893
1886
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1887
|
+
var _a;
|
|
1894
1888
|
task.status = BroadcastTaskStatus.REQUESTING;
|
|
1895
1889
|
this.logger.debug('Starting task request', { taskId: task.id });
|
|
1896
1890
|
try {
|
|
@@ -1899,7 +1893,8 @@ class BroadcastService extends UnityBaseService {
|
|
|
1899
1893
|
humanCode: task.params.humanCode,
|
|
1900
1894
|
speed: task.params.speed,
|
|
1901
1895
|
volume: task.params.volume >= 0 ? task.params.volume * 100 : undefined,
|
|
1902
|
-
isSubtitle: task.params.isSubtitle
|
|
1896
|
+
isSubtitle: task.params.isSubtitle,
|
|
1897
|
+
audioDrivenVersion: ConfigManager.getInstance().getConfig().audioDrivenVersion
|
|
1903
1898
|
};
|
|
1904
1899
|
// 根据播报类型设置特定参数
|
|
1905
1900
|
if (task.params.type === BroadcastType.TEXT) {
|
|
@@ -1915,11 +1910,24 @@ class BroadcastService extends UnityBaseService {
|
|
|
1915
1910
|
method: 'POST',
|
|
1916
1911
|
headers: {
|
|
1917
1912
|
'Content-Type': 'application/json',
|
|
1918
|
-
'x_auth_token': ConfigManager.getInstance().
|
|
1913
|
+
'x_auth_token': ((_a = ConfigManager.getInstance().getConfig()) === null || _a === void 0 ? void 0 : _a.token) || ''
|
|
1919
1914
|
},
|
|
1920
1915
|
body: JSON.stringify(requestBody),
|
|
1921
1916
|
signal: task.controller.signal,
|
|
1922
1917
|
openWhenHidden: true,
|
|
1918
|
+
/**
|
|
1919
|
+
* 连接建立时的回调,用于检查 HTTP 状态码
|
|
1920
|
+
* @param response - HTTP 响应对象
|
|
1921
|
+
* @throws {SDKError} 当 HTTP 状态码异常时抛出对应的 SDKError
|
|
1922
|
+
*/
|
|
1923
|
+
onopen: (response) => __awaiter(this, void 0, void 0, function* () {
|
|
1924
|
+
// 检查 HTTP 状态码,处理 401 token 过期等异常
|
|
1925
|
+
if (!response.ok) {
|
|
1926
|
+
const error = this.createHttpError(response.status, response.statusText, task.id);
|
|
1927
|
+
this.handleTaskError(task, error);
|
|
1928
|
+
throw error;
|
|
1929
|
+
}
|
|
1930
|
+
}),
|
|
1923
1931
|
onmessage: (event) => {
|
|
1924
1932
|
this.handleTaskResponse(task, event.data);
|
|
1925
1933
|
},
|
|
@@ -1927,13 +1935,17 @@ class BroadcastService extends UnityBaseService {
|
|
|
1927
1935
|
this.handleTaskClose(task);
|
|
1928
1936
|
},
|
|
1929
1937
|
onerror: (error) => {
|
|
1930
|
-
|
|
1931
|
-
|
|
1938
|
+
// 将所有异常统一转换为 SDKError
|
|
1939
|
+
const sdkError = this.convertToSDKError(error, task.id);
|
|
1940
|
+
this.handleTaskError(task, sdkError);
|
|
1941
|
+
throw sdkError;
|
|
1932
1942
|
}
|
|
1933
1943
|
});
|
|
1934
1944
|
}
|
|
1935
1945
|
catch (error) {
|
|
1936
|
-
|
|
1946
|
+
// 将所有异常统一转换为 SDKError
|
|
1947
|
+
const sdkError = this.convertToSDKError(error, task.id);
|
|
1948
|
+
this.handleTaskError(task, sdkError);
|
|
1937
1949
|
}
|
|
1938
1950
|
});
|
|
1939
1951
|
}
|
|
@@ -2021,15 +2033,19 @@ class BroadcastService extends UnityBaseService {
|
|
|
2021
2033
|
* 处理任务错误
|
|
2022
2034
|
* @param task - 播报任务
|
|
2023
2035
|
* @param error - 错误对象
|
|
2024
|
-
* @description
|
|
2036
|
+
* @description 处理任务执行过程中的错误,防止重复触发错误回调
|
|
2025
2037
|
* @private
|
|
2026
2038
|
*/
|
|
2027
2039
|
handleTaskError(task, error) {
|
|
2028
2040
|
var _a, _b;
|
|
2041
|
+
// 如果任务已经是失败或取消状态,不再重复处理,防止回调被多次触发
|
|
2042
|
+
if (task.status === BroadcastTaskStatus.FAILED || task.status === BroadcastTaskStatus.CANCELLED) {
|
|
2043
|
+
return;
|
|
2044
|
+
}
|
|
2029
2045
|
task.status = BroadcastTaskStatus.FAILED;
|
|
2030
2046
|
task.error = error;
|
|
2031
2047
|
this.logger.error(`Task failed - ${task.id}`, error);
|
|
2032
|
-
//
|
|
2048
|
+
// 触发错误回调(只触发一次)
|
|
2033
2049
|
(_b = (_a = this.callbacks).onError) === null || _b === void 0 ? void 0 : _b.call(_a, error);
|
|
2034
2050
|
}
|
|
2035
2051
|
/**
|
|
@@ -2077,7 +2093,6 @@ class BroadcastService extends UnityBaseService {
|
|
|
2077
2093
|
* @private
|
|
2078
2094
|
*/
|
|
2079
2095
|
getBroadcastApiPath(type) {
|
|
2080
|
-
ConfigManager.getInstance().getEnv();
|
|
2081
2096
|
switch (type) {
|
|
2082
2097
|
case BroadcastType.TEXT:
|
|
2083
2098
|
return '/aiep-openapi/avatar-interaction/v1/broadcast/text';
|
|
@@ -2154,6 +2169,71 @@ class BroadcastService extends UnityBaseService {
|
|
|
2154
2169
|
this.queueProcessTimer = null;
|
|
2155
2170
|
}
|
|
2156
2171
|
}
|
|
2172
|
+
/**
|
|
2173
|
+
* 根据 HTTP 状态码创建对应的 SDKError
|
|
2174
|
+
* @param status - HTTP 状态码
|
|
2175
|
+
* @param statusText - HTTP 状态文本
|
|
2176
|
+
* @param taskId - 任务 ID(用于日志记录)
|
|
2177
|
+
* @returns SDKError 实例
|
|
2178
|
+
* @description 将 HTTP 错误状态码映射为对应的 SDKError
|
|
2179
|
+
* @private
|
|
2180
|
+
*/
|
|
2181
|
+
createHttpError(status, statusText, taskId) {
|
|
2182
|
+
this.logger.warn(`HTTP error occurred - Task: ${taskId}, Status: ${status}`, { status, statusText });
|
|
2183
|
+
switch (status) {
|
|
2184
|
+
case 401:
|
|
2185
|
+
// Token 过期或未授权
|
|
2186
|
+
return new SDKError(NetworkErrorCode.UNAUTHORIZED, `Token 已过期或无效,请重新授权 (HTTP ${status})`);
|
|
2187
|
+
case 403:
|
|
2188
|
+
// 禁止访问
|
|
2189
|
+
return new SDKError(NetworkErrorCode.UNAUTHORIZED, `无权限访问该资源 (HTTP ${status})`);
|
|
2190
|
+
case 404:
|
|
2191
|
+
// 资源不存在
|
|
2192
|
+
return new SDKError(NetworkErrorCode.SERVER_ERROR, `请求的资源不存在 (HTTP ${status})`);
|
|
2193
|
+
case 500:
|
|
2194
|
+
case 502:
|
|
2195
|
+
case 503:
|
|
2196
|
+
case 504:
|
|
2197
|
+
// 服务器错误
|
|
2198
|
+
return new SDKError(NetworkErrorCode.SERVER_ERROR, `服务器错误,请稍后重试 (HTTP ${status})`);
|
|
2199
|
+
default:
|
|
2200
|
+
// 其他 HTTP 错误
|
|
2201
|
+
return new SDKError(NetworkErrorCode.CONNECTION_FAILED, `网络请求失败: ${statusText || 'Unknown Error'} (HTTP ${status})`);
|
|
2202
|
+
}
|
|
2203
|
+
}
|
|
2204
|
+
/**
|
|
2205
|
+
* 将任意错误转换为 SDKError
|
|
2206
|
+
* @param error - 原始错误对象
|
|
2207
|
+
* @param taskId - 任务 ID(用于日志记录)
|
|
2208
|
+
* @returns SDKError 实例
|
|
2209
|
+
* @description 统一将各种类型的错误转换为 SDKError,便于上层统一处理
|
|
2210
|
+
* @private
|
|
2211
|
+
*/
|
|
2212
|
+
convertToSDKError(error, taskId) {
|
|
2213
|
+
// 如果已经是 SDKError,直接返回
|
|
2214
|
+
if (error instanceof SDKError) {
|
|
2215
|
+
return error;
|
|
2216
|
+
}
|
|
2217
|
+
// 如果是普通 Error 对象
|
|
2218
|
+
if (error instanceof Error) {
|
|
2219
|
+
// 检查是否是网络相关的错误
|
|
2220
|
+
const errorMessage = error.message.toLowerCase();
|
|
2221
|
+
if (errorMessage.includes('timeout') || errorMessage.includes('timed out')) {
|
|
2222
|
+
return new SDKError(NetworkErrorCode.REQUEST_TIMEOUT, `请求超时 - Task: ${taskId}`, error);
|
|
2223
|
+
}
|
|
2224
|
+
if (errorMessage.includes('network') || errorMessage.includes('fetch') || errorMessage.includes('connection')) {
|
|
2225
|
+
return new SDKError(NetworkErrorCode.CONNECTION_FAILED, `网络连接失败 - Task: ${taskId}: ${error.message}`, error);
|
|
2226
|
+
}
|
|
2227
|
+
if (errorMessage.includes('abort') || errorMessage.includes('cancel')) {
|
|
2228
|
+
return new SDKError(OperationErrorCode.OPERATION_CANCELLED, `操作已取消 - Task: ${taskId}`, error);
|
|
2229
|
+
}
|
|
2230
|
+
// 默认作为操作失败处理
|
|
2231
|
+
return new SDKError(OperationErrorCode.OPERATION_FAILED, `播报任务执行失败 - Task: ${taskId}: ${error.message}`, error);
|
|
2232
|
+
}
|
|
2233
|
+
// 如果是字符串或其他类型
|
|
2234
|
+
const errorMessage = String(error);
|
|
2235
|
+
return new SDKError(OperationErrorCode.OPERATION_FAILED, `播报任务执行失败 - Task: ${taskId}: ${errorMessage}`);
|
|
2236
|
+
}
|
|
2157
2237
|
}
|
|
2158
2238
|
|
|
2159
2239
|
/**
|
|
@@ -2171,13 +2251,11 @@ class ZEEAvatarLoader {
|
|
|
2171
2251
|
* @param config - Unity配置对象
|
|
2172
2252
|
* @description 初始化数字人加载器,创建Unity加载器实例
|
|
2173
2253
|
*/
|
|
2174
|
-
constructor(
|
|
2254
|
+
constructor() {
|
|
2175
2255
|
/** Avatar API实例 */
|
|
2176
2256
|
this.apiService = null;
|
|
2177
2257
|
/** Unity实例 */
|
|
2178
2258
|
this.unityInstance = null;
|
|
2179
|
-
// 同时设置到配置管理器中
|
|
2180
|
-
ConfigManager.getInstance().setConfig(config);
|
|
2181
2259
|
this.loader = new UnityLoader();
|
|
2182
2260
|
}
|
|
2183
2261
|
/**
|
|
@@ -2280,17 +2358,61 @@ class ZEEAvatarLoader {
|
|
|
2280
2358
|
* @protected
|
|
2281
2359
|
*/
|
|
2282
2360
|
initGlobalConfig() {
|
|
2283
|
-
const
|
|
2284
|
-
|
|
2361
|
+
const config = ConfigManager.getInstance().getConfig();
|
|
2362
|
+
const globalParams = {
|
|
2363
|
+
token: config === null || config === void 0 ? void 0 : config.token,
|
|
2285
2364
|
apiBaseUrl: ConfigManager.getInstance().getApiBaseUrl(false),
|
|
2286
|
-
idleMotionList:
|
|
2287
|
-
|
|
2365
|
+
idleMotionList: config === null || config === void 0 ? void 0 : config.idleMotionList
|
|
2366
|
+
// 純AB包方案在SDK 2.1.0 中已弃用
|
|
2367
|
+
// assetsUrl: config?.assetsUrl
|
|
2288
2368
|
};
|
|
2289
|
-
|
|
2290
|
-
|
|
2369
|
+
const assetModuleParams = {
|
|
2370
|
+
isZip: true,
|
|
2371
|
+
assetBundlePath: config === null || config === void 0 ? void 0 : config.assetsUrl
|
|
2372
|
+
};
|
|
2373
|
+
this.unityInstance.SendMessage('AvatarSDK', 'InitializeConfig', JSON.stringify(globalParams));
|
|
2374
|
+
this.unityInstance.SendMessage('AvatarSDK', 'InitAssetBundleModule', JSON.stringify(assetModuleParams));
|
|
2375
|
+
console.warn('[ Send Unity message ]: AvatarSDK.InitializeConfig', globalParams);
|
|
2376
|
+
console.warn('[ Send Unity message ]: AvatarSDK.InitAssetBundleModule', assetModuleParams);
|
|
2291
2377
|
}
|
|
2292
2378
|
}
|
|
2293
2379
|
|
|
2380
|
+
// 深拷贝
|
|
2381
|
+
/**
|
|
2382
|
+
* 比较两个版本号的前两位(major.minor)是否一致
|
|
2383
|
+
* @param version1 版本号1,格式:x.x.x
|
|
2384
|
+
* @param version2 版本号2,格式:x.x.x
|
|
2385
|
+
* @returns boolean 如果前两位一致返回 true,否则返回 false
|
|
2386
|
+
* @description 用于检查 SDK 版本与资源版本是否兼容
|
|
2387
|
+
* @example
|
|
2388
|
+
* compareVersionCompatibility('2.1.0', '2.1.5') // true
|
|
2389
|
+
* compareVersionCompatibility('2.1.0', '2.2.0') // false
|
|
2390
|
+
* compareVersionCompatibility('2.1.0', '3.0.0') // false
|
|
2391
|
+
*/
|
|
2392
|
+
function compareVersionCompatibility(version1, version2) {
|
|
2393
|
+
// 提取版本号的前两位(major.minor)
|
|
2394
|
+
const getMajorMinor = (version) => {
|
|
2395
|
+
const parts = version.split('.');
|
|
2396
|
+
if (parts.length < 2) {
|
|
2397
|
+
return version;
|
|
2398
|
+
}
|
|
2399
|
+
return `${parts[0]}.${parts[1]}`;
|
|
2400
|
+
};
|
|
2401
|
+
const v1MajorMinor = getMajorMinor(version1);
|
|
2402
|
+
const v2MajorMinor = getMajorMinor(version2);
|
|
2403
|
+
return v1MajorMinor === v2MajorMinor;
|
|
2404
|
+
}
|
|
2405
|
+
|
|
2406
|
+
/**
|
|
2407
|
+
* @fileoverview SDK 版本号常量
|
|
2408
|
+
* @description 此文件由构建脚本自动生成,请勿手动修改
|
|
2409
|
+
*/
|
|
2410
|
+
/**
|
|
2411
|
+
* SDK 版本号
|
|
2412
|
+
* @const {string} SDK_VERSION
|
|
2413
|
+
*/
|
|
2414
|
+
const SDK_VERSION = '2.1.2';
|
|
2415
|
+
|
|
2294
2416
|
/**
|
|
2295
2417
|
* @fileoverview 统一的3D数字人SDK入口类
|
|
2296
2418
|
* @description 提供统一的SDK接口,内部通过组合模式调用各个服务模块
|
|
@@ -2323,10 +2445,12 @@ class ZEEAvatarSDK {
|
|
|
2323
2445
|
this.unityInstance = null;
|
|
2324
2446
|
/** SDK初始化状态 */
|
|
2325
2447
|
this.isInitialized = false;
|
|
2326
|
-
this.config = config;
|
|
2327
2448
|
this.instanceId = generateUniqueId();
|
|
2328
2449
|
// 设置全局配置
|
|
2329
2450
|
ConfigManager.getInstance().setConfig(config);
|
|
2451
|
+
// 设置日志
|
|
2452
|
+
this.logger = new SimpleLogger(ConfigManager.getInstance().getConfig().enableDebugLog);
|
|
2453
|
+
this.logger.info('SDK版本', SDK_VERSION);
|
|
2330
2454
|
}
|
|
2331
2455
|
/**
|
|
2332
2456
|
* 初始化数字人
|
|
@@ -2337,12 +2461,14 @@ class ZEEAvatarSDK {
|
|
|
2337
2461
|
*/
|
|
2338
2462
|
initializeAvatar(avatarCode_1) {
|
|
2339
2463
|
return __awaiter(this, arguments, void 0, function* (avatarCode, cameraType = AvatarCameraType.WHOLE) {
|
|
2464
|
+
var _a;
|
|
2340
2465
|
if (this.isInitialized) {
|
|
2341
2466
|
throw new SDKError(OperationErrorCode.OPERATION_FAILED, 'SDK已经初始化,请勿重复初始化');
|
|
2342
2467
|
}
|
|
2343
2468
|
try {
|
|
2469
|
+
const config = ConfigManager.getInstance().getConfig();
|
|
2344
2470
|
// 1. 创建Unity加载器
|
|
2345
|
-
this.loader = new ZEEAvatarLoader(
|
|
2471
|
+
this.loader = new ZEEAvatarLoader();
|
|
2346
2472
|
// 2. 初始化Unity实例
|
|
2347
2473
|
yield this.loader.init();
|
|
2348
2474
|
// 3. 获取Unity实例
|
|
@@ -2351,18 +2477,31 @@ class ZEEAvatarSDK {
|
|
|
2351
2477
|
this.avatarService = new AvatarService({
|
|
2352
2478
|
unityInstance: this.unityInstance,
|
|
2353
2479
|
instanceId: this.instanceId,
|
|
2354
|
-
enableDebugLog:
|
|
2480
|
+
enableDebugLog: config.enableDebugLog
|
|
2355
2481
|
});
|
|
2356
2482
|
// 5. 创建带有唯一标识符的播报服务
|
|
2357
2483
|
this.broadcastService = new BroadcastService({
|
|
2358
2484
|
unityInstance: this.unityInstance,
|
|
2359
2485
|
instanceId: this.instanceId,
|
|
2360
|
-
callbacks:
|
|
2361
|
-
enableDebugLog:
|
|
2486
|
+
callbacks: config.broadcastCallbacks,
|
|
2487
|
+
enableDebugLog: config.enableDebugLog
|
|
2362
2488
|
});
|
|
2363
2489
|
// 6. 初始化数字人
|
|
2364
2490
|
const result = yield this.avatarService.initializeAvatar(avatarCode, cameraType);
|
|
2365
2491
|
if (result.success) {
|
|
2492
|
+
const audioDrivenVersion = (_a = result.data) === null || _a === void 0 ? void 0 : _a.audioDrivenVersion;
|
|
2493
|
+
config.audioDrivenVersion = audioDrivenVersion;
|
|
2494
|
+
this.logger.info('AudioDrivenVersion', audioDrivenVersion);
|
|
2495
|
+
// 7. 检查资源版本兼容性
|
|
2496
|
+
if (audioDrivenVersion) {
|
|
2497
|
+
const isCompatible = compareVersionCompatibility(SDK_VERSION, audioDrivenVersion);
|
|
2498
|
+
if (!isCompatible) {
|
|
2499
|
+
// 销毁SDK实例
|
|
2500
|
+
this.destroy();
|
|
2501
|
+
throw new SDKError(ResourceErrorCode.VERSION_INCOMPATIBLE, `资源版本不兼容: SDK版本为 ${SDK_VERSION},WebGL资源版本为 ${audioDrivenVersion},前两位版本号必须一致`);
|
|
2502
|
+
}
|
|
2503
|
+
this.logger.info('版本兼容性检查通过', `SDK: ${SDK_VERSION}, 资源: ${audioDrivenVersion}`);
|
|
2504
|
+
}
|
|
2366
2505
|
this.isInitialized = true;
|
|
2367
2506
|
}
|
|
2368
2507
|
return result;
|
|
@@ -2378,8 +2517,7 @@ class ZEEAvatarSDK {
|
|
|
2378
2517
|
* @description 更新全局Token配置
|
|
2379
2518
|
*/
|
|
2380
2519
|
updateToken(token) {
|
|
2381
|
-
|
|
2382
|
-
ConfigManager.getInstance().setConfig(this.config);
|
|
2520
|
+
ConfigManager.getInstance().updateConfig({ token });
|
|
2383
2521
|
// 如果loader已经初始化,也更新loader的token
|
|
2384
2522
|
if (this.loader) {
|
|
2385
2523
|
this.loader.updateToken(token);
|
|
@@ -2563,7 +2701,8 @@ class ZEEAvatarSDK {
|
|
|
2563
2701
|
* @returns IAvatarSDKConfig 当前配置
|
|
2564
2702
|
*/
|
|
2565
2703
|
getConfig() {
|
|
2566
|
-
|
|
2704
|
+
const config = ConfigManager.getInstance().getConfig();
|
|
2705
|
+
return config ? Object.assign({}, config) : null;
|
|
2567
2706
|
}
|
|
2568
2707
|
// ===========================================
|
|
2569
2708
|
// 私有方法
|
|
@@ -2579,4 +2718,4 @@ class ZEEAvatarSDK {
|
|
|
2579
2718
|
}
|
|
2580
2719
|
}
|
|
2581
2720
|
|
|
2582
|
-
export { AvatarCameraType, AvatarOperationType, AvatarService, BroadcastOperationType, BroadcastService, BroadcastType, ConfigErrorCode, ERROR_CODE_MAP, ErrorCategory,
|
|
2721
|
+
export { AvatarCameraType, AvatarOperationType, AvatarService, BroadcastOperationType, BroadcastService, BroadcastType, ConfigErrorCode, ERROR_CODE_MAP, ErrorCategory, NetworkErrorCode, OperationErrorCode, ResourceErrorCode, SDKError, SDK_VERSION, SystemErrorCode, UnityOperationStatus, ZEEAvatarLoader, ZEEAvatarSDK, getErrorInfo };
|