@xmaxai/web-sdk 1.0.10 → 1.1.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.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { R as RealtimeVideoFormat, a as RealtimeVideoTrack, C as CameraPosition, V as VideoContentMode, T as TrajectoryEffectRendering, b as VideoRenderStatistics } from './TrajectoryEffectRendering-BKKPO7Uk.js';
2
- export { c as RealtimeVideoEncoderPreference, d as RealtimeVideoFormatInit, e as TrajectoryID, f as TrajectoryPoint } from './TrajectoryEffectRendering-BKKPO7Uk.js';
1
+ import { R as RealtimeVideoFormat, a as RealtimeVideoTrack, C as CameraPosition, V as VideoContentMode, T as TrajectoryEffectRendering, b as VideoRenderStatistics, c as TrajectoryPoint, d as TrajectoryID } from './TrajectoryEffectRendering-BdSJxHQw.js';
2
+ export { e as RealtimeVideoEncoderPreference, f as RealtimeVideoFormatInit } from './TrajectoryEffectRendering-BdSJxHQw.js';
3
3
 
4
4
  /**
5
5
  * 实时媒体使用的 RTC 提供方;一个 Manager 生命周期内保持不变。
@@ -23,22 +23,40 @@ declare enum RtcProvider {
23
23
  * SDK 当前支持的实时生成模型。
24
24
  */
25
25
  declare enum RealtimeModel {
26
- x2_1_1_preview_cn = "x2.1.1-preview-cn",
27
- x2_1_1_preview_us = "x2.1.1-preview-us"
26
+ /**
27
+ * 使用 VeRTC 的 X2.0 实时生成模型。
28
+ */
29
+ x2_0 = "x2.0",
30
+ /**
31
+ * 使用 Agora 的 X2.1 实时生成模型。
32
+ */
33
+ x2_1 = "x2.1"
28
34
  }
29
- /** 内置模型或服务端新增的模型标识;自定义名称原样传给服务端。 */
35
+ /**
36
+ * 内置模型或服务端新增的模型标识;自定义名称原样传给服务端。
37
+ */
30
38
  type RealtimeModelName = RealtimeModel | (string & {});
31
39
  /**
32
40
  * 模型输入画面的像素尺寸。
33
41
  */
34
42
  interface ModelSize {
43
+ /**
44
+ * 视频宽度,单位为像素。
45
+ */
35
46
  width: number;
47
+ /**
48
+ * 视频高度,单位为像素。
49
+ */
36
50
  height: number;
37
51
  }
38
52
  /**
39
53
  * 获取模型的显示名称。
40
54
  */
41
55
  declare function modelDisplayName(model: RealtimeModelName): string;
56
+ /**
57
+ * 模型支持的固定视频规格;空列表表示按像素预算解析,帧率为推荐默认值。
58
+ */
59
+ declare function supportedVideoFormats(model: RealtimeModelName): RealtimeVideoFormat[];
42
60
  /**
43
61
  * 未指定视频规格时,各媒体来源使用的默认帧率。
44
62
  */
@@ -49,7 +67,7 @@ declare function defaultFrameRate(_model: RealtimeModelName): number;
49
67
  declare function defaultCameraVideoFormat(model: RealtimeModelName): RealtimeVideoFormat;
50
68
  /**
51
69
  * 查询 SDK 允许配置的 RTC 提供方,第一项为默认值。
52
- * 未知模型默认沿用 x2.1.1-preview-cn 的 Agora,也允许显式选择其他已接入的 RTC;
70
+ * 未知模型默认使用 Agora,也允许显式选择其他已接入的 RTC;
53
71
  * 是否被该模型的服务端支持,由服务端决定。
54
72
  */
55
73
  declare function supportedRtcProviders(model: RealtimeModelName): readonly RtcProvider[];
@@ -59,15 +77,27 @@ declare function supportedRtcProviders(model: RealtimeModelName): readonly RtcPr
59
77
  */
60
78
  interface MediaServicing {
61
79
  /**
62
- * 校验并保留原始尺寸;Web 插帧不降低回传分辨率。
80
+ * 当前媒体规则使用的模型。
63
81
  */
64
- resolveFrameInterpolationSize(size: ModelSize): ModelSize;
82
+ readonly model: RealtimeModelName;
65
83
  /**
66
- * 异步判断平台是否支持指定尺寸的插帧;不代表运行期性能保证。
84
+ * 解析原始媒体尺寸,不放大、限制像素面积并按 4 对齐;仅摄像头校验模型桶。
85
+ *
86
+ * @param sourceMediaSize 原始媒体尺寸。
87
+ * @param source 媒体来源,文件媒体和外部轨道接受任意比例。
88
+ * @returns 用于固定媒体基准和初始上行编码的尺寸。
67
89
  */
68
- supportsFrameInterpolation(size: ModelSize): Promise<boolean>;
90
+ resolveMediaSize(sourceMediaSize: ModelSize, source: "camera" | "image" | "video" | "external"): ModelSize;
69
91
  /**
70
- * 按模型输入规则解析目标尺寸。
92
+ * 为处理后的媒体选择模型生成画布,不改变本地媒体规格。
93
+ */
94
+ resolveGenerationSize(resolvedMediaSize: ModelSize): ModelSize;
95
+ /**
96
+ * 根据固定媒体基准和下行尺寸上限计算 4 对齐回传尺寸。
97
+ */
98
+ resolveTargetSize(resolvedMediaSize: ModelSize, maximumSize: ModelSize): ModelSize;
99
+ /**
100
+ * 解析模型支持的采集规格或生成画布,不处理媒体像素。
71
101
  *
72
102
  * 分辨率桶非空时必须精确匹配;否则按像素面积上下限等比缩放并对齐到
73
103
  * 模型要求的像素倍数。
@@ -81,9 +111,6 @@ interface MediaServicing {
81
111
  * 上传完成后返回的已存储文件信息。
82
112
  */
83
113
  declare class StoredFile {
84
- /**
85
- * 存储结果
86
- */
87
114
  /**
88
115
  * 文件的访问地址。
89
116
  */
@@ -98,10 +125,6 @@ declare class StoredFile {
98
125
  readonly etag?: string;
99
126
  /**
100
127
  * 创建已存储文件信息。
101
- *
102
- * @param init.url 文件访问地址。
103
- * @param init.objectKey 对象键。
104
- * @param init.etag 对象存储返回的 ETag。
105
128
  */
106
129
  constructor(init: {
107
130
  url: string;
@@ -175,87 +198,87 @@ interface StorageServicing {
175
198
  */
176
199
  declare class RealtimeConfiguration {
177
200
  /**
178
- * 实时生成业务使用的模型。
201
+ * 实时生成使用的模型;未知名称原样透传到测试环境,媒体与 RTC 默认配置同 X2.1。
179
202
  */
180
203
  readonly model: RealtimeModelName;
181
204
  /**
182
- * 实时连接使用的 RTC 提供方。
205
+ * 实时连接使用的 RTC 提供方,默认取模型支持列表的首项,创建后不可切换。
183
206
  */
184
207
  readonly provider: RtcProvider;
185
208
  /**
186
- * 是否默认请求开启远端生成画面的插帧。
209
+ * 是否自动调整上下行档位,默认 true。关闭时从 L1 启动且不读写历史档位,仍支持手动调档。
187
210
  */
188
- readonly isFrameInterpolationEnabled: boolean;
211
+ readonly isAdaptiveQualityEnabled: boolean;
189
212
  /**
190
- * 创建实时业务配置。
191
- *
192
- * @param init.model 实时生成业务使用的模型;未知名称原样透传,默认配置同 x2.1.1-preview-cn。
193
- * @param init.provider RTC 提供方,默认按模型定义选择;必须受模型支持,创建后不可切换。
194
- * @param init.isFrameInterpolationEnabled 是否默认开启远端生成画面的插帧,默认 false。
213
+ * 补全 RTC 和自动调档默认值,并校验模型名称与 RTC 提供方配置。
195
214
  */
196
215
  constructor(init: {
197
216
  model: RealtimeModelName;
198
217
  provider?: RtcProvider;
199
- isFrameInterpolationEnabled?: boolean;
218
+ isAdaptiveQualityEnabled?: boolean;
200
219
  });
201
220
  }
202
221
 
203
- /** 输入帧顺时针旋转角度;与前置摄像头的水平镜像独立。 */
204
- type CameraRotation = 0 | 90 | 180 | 270;
205
-
206
222
  /**
207
- * RTC 网络质量等级:未知、极好、良好、一般、差、极差、断网。
223
+ * 输入帧顺时针旋转角度;与前置摄像头的水平镜像独立。
208
224
  */
209
- type NetworkQualityLevel = 0 | 1 | 2 | 3 | 4 | 5 | 6;
225
+ type CameraRotation = 0 | 90 | 180 | 270;
226
+
210
227
  /**
211
- * 本端 RTC 连接的网络统计,不依赖远端生成流是否已经到达。
228
+ * 实时连接的网络质量等级。
212
229
  */
213
- interface NetworkStatistics {
214
- readonly uplinkQuality?: NetworkQualityLevel;
230
+ declare enum RealtimeNetworkQualityLevel {
215
231
  /**
216
- * 所有下行连接的平均网络质量。
232
+ * 尚无有效的质量评估。
217
233
  */
218
- readonly downlinkQuality?: NetworkQualityLevel;
234
+ unknown = "Unknown",
219
235
  /**
220
- * 上行连接到 RTC 云端的往返延迟,单位 ms,不是单程延迟;Agora 未提供时为空。
236
+ * 网络质量极好。
221
237
  */
222
- readonly uplinkRttMs?: number;
238
+ excellent = "Excellent",
223
239
  /**
224
- * 所有下行连接到 RTC 云端的平均往返延迟,单位 ms;Agora 未提供时为空。
240
+ * 网络质量良好。
225
241
  */
226
- readonly downlinkRttMs?: number;
227
- }
228
- /**
229
- * undefined 表示尚无采样或连接已清理。
230
- */
231
- type NetworkStatisticsListener = (statistics: NetworkStatistics | undefined) => void;
232
-
233
- /**
234
- * 服务端读取网络视频时使用的采样方式。
235
- */
236
- declare enum RealtimeVideoSampleMethod {
237
- time = "time",
238
- fps = "fps"
242
+ good = "Good",
243
+ /**
244
+ * 网络质量一般,可能影响实时播放。
245
+ */
246
+ poor = "Poor",
247
+ /**
248
+ * 网络质量差,影响实时播放。
249
+ */
250
+ bad = "Bad",
251
+ /**
252
+ * 网络质量极差,可能严重中断媒体传输。
253
+ */
254
+ veryBad = "VeryBad",
255
+ /**
256
+ * 网络连接已断开。
257
+ */
258
+ down = "Down"
239
259
  }
240
260
  /**
241
- * 服务端可直接访问的网络视频及采样配置。
261
+ * 本端 RTC 连接的网络统计,不依赖远端生成流是否已经到达。
242
262
  */
243
- interface RealtimeReferenceVideo {
263
+ interface RealtimeNetworkQuality {
244
264
  /**
245
- * HTTP 或 HTTPS 视频地址。
265
+ * 上行网络质量等级,沿用 RTC 厂商的评估结果。
246
266
  */
247
- readonly path: string;
267
+ readonly uplink: RealtimeNetworkQualityLevel;
248
268
  /**
249
- * 服务端采样方式。
269
+ * 所有下行连接的平均网络质量。
250
270
  */
251
- readonly sampleMethod: RealtimeVideoSampleMethod;
271
+ readonly downlink: RealtimeNetworkQualityLevel;
252
272
  }
273
+ /**
274
+ * undefined 表示尚无采样或连接已清理。
275
+ */
276
+ type RealtimeNetworkQualityListener = (statistics: RealtimeNetworkQuality | undefined) => void;
253
277
 
278
+ /**
279
+ * 实时生成指令和参考资源。
280
+ */
254
281
  interface RealtimeContextInit {
255
- /**
256
- * 服务端直接读取的网络视频。
257
- */
258
- referenceVideo?: RealtimeReferenceVideo;
259
282
  /**
260
283
  * 实时生成使用的文本条件。
261
284
  */
@@ -269,13 +292,6 @@ interface RealtimeContextInit {
269
292
  * 单次实时生成任务的文本和参考资源上下文。
270
293
  */
271
294
  declare class RealtimeContext {
272
- /**
273
- * 服务端直接读取的网络视频。
274
- */
275
- readonly referenceVideo?: RealtimeReferenceVideo;
276
- /**
277
- * 生成条件
278
- */
279
295
  /**
280
296
  * 实时生成使用的文本条件。
281
297
  */
@@ -290,13 +306,143 @@ declare class RealtimeContext {
290
306
  constructor(init: RealtimeContextInit);
291
307
  }
292
308
 
293
- /** 可通过生成信令传递的 JSON 数据。 */
309
+ /**
310
+ * 可通过生成信令传递的 JSON 数据。
311
+ */
294
312
  type JsonValue = string | number | boolean | null | JsonValue[] | {
295
313
  [key: string]: JsonValue;
296
314
  };
297
- /** 合并到本次 start 或 change_condition 的 params;不缓存,不允许覆盖 SDK 字段。 */
315
+ /**
316
+ * 合并到本次 start 或 change_condition 的 params;不缓存,不允许覆盖 SDK 字段。
317
+ */
298
318
  type RealtimeExtraParams = Record<string, JsonValue>;
299
319
 
320
+ /**
321
+ * 已复制的远端 PCM 音频包,格式为有符号、小端、交错排列的 16 位样本。
322
+ */
323
+ interface RealtimeAudioFrame {
324
+ /**
325
+ * 音频字节;回调返回后仍可持有。
326
+ */
327
+ readonly data: Uint8Array;
328
+ /**
329
+ * 每个声道每秒的样本数。
330
+ */
331
+ readonly sampleRate: number;
332
+ /**
333
+ * 交错排列的声道数。
334
+ */
335
+ readonly channels: number;
336
+ /**
337
+ * 本包每个声道的样本数。
338
+ */
339
+ readonly samplesPerChannel: number;
340
+ /**
341
+ * 首个样本在接收端呈现时间轴上的时间,单位为微秒,不保证从零开始。
342
+ */
343
+ readonly presentationTimeStamp: number;
344
+ /**
345
+ * 按样本数和采样率计算的时长,单位为微秒。
346
+ */
347
+ readonly duration: number;
348
+ }
349
+ /**
350
+ * 原始远端解码视频帧,不包含镜像、裁剪或界面叠层。
351
+ */
352
+ interface RealtimeVideoFrame {
353
+ /**
354
+ * 由接入方持有的只读帧;使用或异步编码完成后必须调用 close()。
355
+ */
356
+ readonly frame: VideoFrame;
357
+ /**
358
+ * 接收端呈现时间轴上的时间,单位为微秒,与音频使用相同时间基准。
359
+ */
360
+ readonly presentationTimeStamp: number;
361
+ /**
362
+ * 建议呈现时长,单位为微秒;无法确定时为空。
363
+ */
364
+ readonly duration?: number;
365
+ }
366
+ /**
367
+ * 一包远端媒体,不表示一对音视频帧;按同一个录制起点和时间戳进行同步。
368
+ */
369
+ interface RealtimeMediaFrame {
370
+ /**
371
+ * 同一结果流绑定的音视频共享标识;换流或重连后更新。
372
+ */
373
+ readonly streamID: string;
374
+ /**
375
+ * 当前轨首次输出、格式/时钟变化或丢弃输出后为 true;SDK 不压缩时间轴。
376
+ */
377
+ readonly isDiscontinuous: boolean;
378
+ /**
379
+ * 音频包或视频帧。
380
+ */
381
+ readonly content: {
382
+ readonly type: "audio";
383
+ readonly frame: RealtimeAudioFrame;
384
+ } | {
385
+ readonly type: "video";
386
+ readonly frame: RealtimeVideoFrame;
387
+ };
388
+ /**
389
+ * 媒体时间戳,单位为微秒,与 content.frame.presentationTimeStamp 一致。
390
+ */
391
+ readonly presentationTimeStamp: number;
392
+ /**
393
+ * 包时长,单位为微秒;视频无法确定时为空。
394
+ */
395
+ readonly duration?: number;
396
+ }
397
+ /**
398
+ * 按交付顺序接收媒体,不保证跨音视频轨的时间戳顺序。
399
+ * 回调须保持轻量,异步处理请自行排队;视频帧所有权转移给接入方,音频可直接保留。
400
+ */
401
+ type RealtimeMediaFrameListener = (frame: RealtimeMediaFrame) => void;
402
+
403
+ /**
404
+ * 当前结果流的原始媒体轨,仅借用,不转移 RTC 轨道所有权。
405
+ */
406
+ interface RemoteMediaTracks {
407
+ /**
408
+ * 生成任务的绑定标识,用于隔离同一 RTC 轨上的不同任务。
409
+ */
410
+ readonly bindingID: string;
411
+ /**
412
+ * 实际结果流的 RTC 用户。
413
+ */
414
+ readonly userID: string;
415
+ /**
416
+ * 订阅到的远端原始视频轨。
417
+ */
418
+ readonly videoTrack: MediaStreamTrack;
419
+ /**
420
+ * 播放音量处理前的远端音轨;音频尚未发布或没有音轨时为空。
421
+ */
422
+ readonly audioTrack?: MediaStreamTrack;
423
+ }
424
+
425
+ /**
426
+ * 实时生成输入/输出的媒体流。
427
+ */
428
+ declare class RealtimeMediaStream {
429
+ /**
430
+ * 媒体流标识。
431
+ */
432
+ readonly id: string;
433
+ /**
434
+ * 媒体流包含的视频轨道。
435
+ */
436
+ readonly videoTrack?: RealtimeVideoTrack;
437
+ /**
438
+ * 创建实时媒体流。
439
+ */
440
+ constructor(init: {
441
+ id: string;
442
+ videoTrack?: RealtimeVideoTrack;
443
+ });
444
+ }
445
+
300
446
  /**
301
447
  * SDK 向接入方暴露的统一错误码。
302
448
  */
@@ -333,10 +479,6 @@ declare enum XmaxErrorCode {
333
479
  * 本地媒体读取、解码、同步或帧处理发生错误。
334
480
  */
335
481
  mediaError = "MEDIA_ERROR",
336
- /**
337
- * 当前系统、设备或视频规格不支持远端视频插帧。
338
- */
339
- frameInterpolationUnsupported = "FRAME_INTERPOLATION_UNSUPPORTED",
340
482
  /**
341
483
  * 接入方未授予相机权限。
342
484
  */
@@ -378,9 +520,6 @@ type XmaxErrorListener = (error: XmaxError) => void;
378
520
  * 表示 SDK 抛出或回调给接入方的统一错误。
379
521
  */
380
522
  declare class XmaxError extends Error {
381
- /**
382
- * 错误信息
383
- */
384
523
  /**
385
524
  * SDK 统一错误码。
386
525
  */
@@ -413,84 +552,6 @@ declare class XmaxError extends Error {
413
552
  static from(error: unknown): XmaxError;
414
553
  }
415
554
 
416
- /**
417
- * 单次录制的最终事件类型。
418
- */
419
- declare enum RealtimeRecordingEventType {
420
- completed = "completed",
421
- interrupted = "interrupted",
422
- failed = "failed"
423
- }
424
- /**
425
- * 已完成文件封装的录制结束原因。
426
- */
427
- declare enum RealtimeRecordingFinishReason {
428
- durationLimit = "durationLimit",
429
- generationEnded = "generationEnded",
430
- restarted = "restarted",
431
- mediaInterrupted = "mediaInterrupted"
432
- }
433
- /**
434
- * 已封装的录制文件;格式由 blob.type 指示,不保证为 MP4。
435
- */
436
- interface RealtimeRecordingResult {
437
- /**
438
- * 可供保存、上传或预览的完整文件;成功裁去长帧等待时,时长短于实际录制时间。
439
- */
440
- readonly blob: Blob;
441
- /**
442
- * 录制期间是否接入过未静音的远端音频轨;不表示内容一定有声音。
443
- */
444
- readonly hasAudio: boolean;
445
- /**
446
- * 录制结束原因。
447
- */
448
- readonly reason: RealtimeRecordingFinishReason;
449
- }
450
- /**
451
- * 录制终态;成功封装的提前结束返回 interrupted,无法提供有效文件返回 failed。
452
- */
453
- type RealtimeRecordingEvent = {
454
- type: RealtimeRecordingEventType.completed | RealtimeRecordingEventType.interrupted;
455
- taskID: string;
456
- result: RealtimeRecordingResult;
457
- } | {
458
- type: RealtimeRecordingEventType.failed;
459
- taskID: string;
460
- error: XmaxError;
461
- };
462
- /**
463
- * 每次录制交付一次最终事件,监听器异常不影响实时生成。
464
- */
465
- type RealtimeRecordingListener = (event: RealtimeRecordingEvent) => void;
466
-
467
- /**
468
- * 实时生成输入/输出的媒体流。
469
- */
470
- declare class RealtimeMediaStream {
471
- /**
472
- * 流标识与轨道
473
- */
474
- /**
475
- * 媒体流标识。
476
- */
477
- readonly id: string;
478
- /**
479
- * 媒体流包含的视频轨道。
480
- */
481
- readonly videoTrack?: RealtimeVideoTrack;
482
- /**
483
- * 创建实时媒体流。
484
- *
485
- * @param init.id 媒体流标识。
486
- * @param init.videoTrack 媒体流包含的视频轨道。
487
- */
488
- constructor(init: {
489
- id: string;
490
- videoTrack?: RealtimeVideoTrack;
491
- });
492
- }
493
-
494
555
  /**
495
556
  * 实时业务连接状态。
496
557
  */
@@ -540,6 +601,9 @@ type RealtimeReason = {
540
601
  kind: "failure";
541
602
  error: XmaxError;
542
603
  };
604
+ /**
605
+ * 正常操作、画面方向变化和错误对应的状态原因。
606
+ */
543
607
  declare const RealtimeReason: {
544
608
  normal: RealtimeReason;
545
609
  orientationChanged: RealtimeReason;
@@ -548,26 +612,35 @@ declare const RealtimeReason: {
548
612
  */
549
613
  failure(error: XmaxError): RealtimeReason;
550
614
  };
615
+ /**
616
+ * 实时状态快照的生命周期、业务标识和变化原因。
617
+ */
551
618
  interface RealtimeStateInit {
619
+ /**
620
+ * 当前实时连接生命周期状态。
621
+ */
552
622
  connectionState: RealtimeConnectionState;
623
+ /**
624
+ * 业务会话标识。
625
+ */
553
626
  sessionID?: string;
627
+ /**
628
+ * 当前生成任务标识。
629
+ */
554
630
  taskID?: string;
631
+ /**
632
+ * 当前操作的结束或变更原因。
633
+ */
555
634
  reason?: RealtimeReason;
556
635
  }
557
636
  /**
558
637
  * 实时业务当前状态快照。
559
638
  */
560
639
  declare class RealtimeState {
561
- /**
562
- * 连接生命周期
563
- */
564
640
  /**
565
641
  * 当前连接生命周期状态。
566
642
  */
567
643
  readonly connectionState: RealtimeConnectionState;
568
- /**
569
- * 业务标识
570
- */
571
644
  /**
572
645
  * 当前或最近一次实时 Session 标识。
573
646
  */
@@ -576,20 +649,12 @@ declare class RealtimeState {
576
649
  * 当前生成任务标识。
577
650
  */
578
651
  readonly taskID?: string;
579
- /**
580
- * 状态变化原因
581
- */
582
652
  /**
583
653
  * 进入当前状态的原因;正常开始新的操作时清空。
584
654
  */
585
655
  readonly reason?: RealtimeReason;
586
656
  /**
587
657
  * 创建实时状态快照。
588
- *
589
- * @param init.connectionState 当前连接生命周期状态。
590
- * @param init.sessionID 当前或最近一次实时 Session 标识。
591
- * @param init.taskID 当前生成任务标识。
592
- * @param init.reason 状态变化原因,默认无。
593
658
  */
594
659
  constructor(init: RealtimeStateInit);
595
660
  /**
@@ -605,11 +670,11 @@ declare class RealtimeState {
605
670
  type RealtimeStateListener = (state: RealtimeState) => void;
606
671
 
607
672
  /**
608
- * 一次相机启动的耗时快照,单位为毫秒;undefined 表示该阶段尚未完成或未启用。
609
- * 新一轮打开摄像头时重置;失败、关闭或断开后保留已完成的值。
673
+ * 一次媒体启动的耗时快照,单位为毫秒;undefined 表示该阶段尚未完成或未启用。
674
+ * 新一轮创建媒体源时重置;失败、关闭或断开后保留已完成的值。
610
675
  * 仅预览时不产生首帧和总耗时;预览后手动启动生成的等待计入总耗时。
611
676
  */
612
- interface RealtimeLaunchTiming {
677
+ interface RealtimeTiming {
613
678
  /**
614
679
  * 开始打开摄像头到相机流创建完成(包含权限等待)。
615
680
  */
@@ -647,52 +712,70 @@ interface RealtimeLaunchTiming {
647
712
  /**
648
713
  * 阶段完成时提供完整快照;不支持帧回调的浏览器以 playing 近似首帧。
649
714
  */
650
- type RealtimeLaunchTimingListener = (timing: RealtimeLaunchTiming) => void;
715
+ type RealtimeTimingListener = (timing: RealtimeTiming) => void;
651
716
 
652
717
  /**
653
- * 视频流实际运行统计;缺失或无效指标为 undefined。
718
+ * 上下行视频统计共用的媒体指标;缺失或无效指标为 undefined。
654
719
  */
655
720
  interface VideoStatistics {
656
721
  /**
657
- * 本端视频上行丢包率,单位 %;厂商未提供时为空。
722
+ * 视频实际宽度,单位为像素;本地为发送尺寸,远端为接收尺寸。
658
723
  */
659
- readonly uplinkLossPercent?: number;
660
724
  readonly width?: number;
661
- readonly height?: number;
662
725
  /**
663
- * 实际帧率,单位 fps。
726
+ * 视频实际高度,单位为像素;本地为发送尺寸,远端为接收尺寸。
664
727
  */
665
- readonly frameRate?: number;
728
+ readonly height?: number;
666
729
  /**
667
730
  * 实际码率,单位 kbps。
668
731
  */
669
732
  readonly bitrateKbps?: number;
670
733
  }
734
+ /**
735
+ * 本地视频流的上行运行统计。
736
+ */
737
+ interface UplinkVideoStatistics extends VideoStatistics {
738
+ /**
739
+ * 实际采集帧率,单位 fps。
740
+ */
741
+ readonly captureFrameRate?: number;
742
+ /**
743
+ * 实际编码帧率,单位 fps;厂商未提供时为空,不以发送帧率替代。
744
+ */
745
+ readonly encodeFrameRate?: number;
746
+ /**
747
+ * 实际发送帧率,单位 fps。
748
+ */
749
+ readonly sendFrameRate?: number;
750
+ /**
751
+ * 本端到 RTC 云端的视频上行丢包率,范围为 0~100,单位 %。
752
+ */
753
+ readonly packetLossPercent?: number;
754
+ }
671
755
  /**
672
756
  * undefined 表示当前没有可用统计(尚未发布、断开或停止)。
673
757
  */
674
- type VideoStatisticsListener = (statistics: VideoStatistics | undefined) => void;
758
+ type UplinkVideoStatisticsListener = (statistics: UplinkVideoStatistics | undefined) => void;
675
759
  /**
676
760
  * 一路远端主视频流的接收统计。
677
761
  */
678
- interface RemoteVideoStatistics extends VideoStatistics {
679
- readonly userID: string;
762
+ interface DownlinkVideoStatistics extends VideoStatistics {
680
763
  /**
681
- * 本端 SDK 到 RTC 云端的往返延迟,单位 ms;不是与远端用户之间的 RTT。
764
+ * RTC 用户标识。
682
765
  */
683
- readonly rttMs?: number;
766
+ readonly userID: string;
684
767
  /**
685
- * 本端 SDK 到 RTC 云端的上行丢包率,单位 %,不是结果流的发送端丢包率。
768
+ * 实际解码帧率,单位 fps。
686
769
  */
687
- readonly uplinkLossPercent?: number;
770
+ readonly decodeFrameRate?: number;
688
771
  /**
689
- * RTC 云端到本端 SDK 的下行丢包率,单位 %。
772
+ * RTC 渲染帧率,单位 fps。
690
773
  */
691
- readonly downlinkLossPercent?: number;
774
+ readonly renderFrameRate?: number;
692
775
  /**
693
- * 当前远端视频流的播放缓冲延迟,单位 ms;Agora 未提供时为空。
776
+ * RTC 云端到本端 SDK 的视频下行丢包率,范围为 0~100,单位 %。
694
777
  */
695
- readonly jitterBufferDelayMs?: number;
778
+ readonly packetLossPercent?: number;
696
779
  /**
697
780
  * RTC 媒体端到端延迟估算值,单位 ms;不代表完整 AI 处理链路耗时。
698
781
  * 采用各厂商原生口径,Agora end2EndDelay 不包含编码与解码耗时。
@@ -702,42 +785,222 @@ interface RemoteVideoStatistics extends VideoStatistics {
702
785
  /**
703
786
  * undefined 表示当前结果流没有统计或已被清理。
704
787
  */
705
- type RemoteVideoStatisticsListener = (statistics: RemoteVideoStatistics | undefined) => void;
788
+ type DownlinkVideoStatisticsListener = (statistics: DownlinkVideoStatistics | undefined) => void;
789
+
790
+ /**
791
+ * 摄像头分辨率快捷选项;实际支持范围由模型决定。
792
+ */
793
+ declare enum RealtimeCameraPreset {
794
+ /**
795
+ * 16:9 横向画面。
796
+ */
797
+ resolution1920x1080 = "1920x1080",
798
+ /**
799
+ * 9:16 竖向画面。
800
+ */
801
+ resolution1080x1920 = "1080x1920",
802
+ /**
803
+ * 1:1 正方形画面。
804
+ */
805
+ resolution1408x1408 = "1408x1408",
806
+ /**
807
+ * 3:4 竖向画面。
808
+ */
809
+ resolution1152x1536 = "1152x1536",
810
+ /**
811
+ * 4:3 横向画面。
812
+ */
813
+ resolution1536x1152 = "1536x1152"
814
+ }
815
+ /**
816
+ * 读取预设的像素宽高,不包含帧率和码率配置。
817
+ */
818
+ declare function cameraPresetSize(preset: RealtimeCameraPreset): ModelSize;
819
+
820
+ /**
821
+ * 实时传输档位;L1 质量最高,L5 最节省带宽,与网络质量评级无关。
822
+ */
823
+ declare enum RealtimeQualityLevel {
824
+ /**
825
+ * 保留媒体基准尺寸。
826
+ */
827
+ l1 = 1,
828
+ /**
829
+ * 目标宽高为媒体基准的 90%。
830
+ */
831
+ l2 = 2,
832
+ /**
833
+ * 目标宽高为媒体基准的 75%。
834
+ */
835
+ l3 = 3,
836
+ /**
837
+ * 目标宽高为媒体基准的 60%。
838
+ */
839
+ l4 = 4,
840
+ /**
841
+ * 目标宽高为媒体基准的 50%,上行帧率上限为 16 fps。
842
+ */
843
+ l5 = 5
844
+ }
845
+
846
+ /**
847
+ * 外部 PCM 帧的只读输入契约,浏览器 AudioData 可直接传入。
848
+ * 使用结构类型,避免要求接入方额外安装 WebCodecs 全局类型。
849
+ */
850
+ interface RealtimeExternalAudioFrame {
851
+ /**
852
+ * 共用源时间轴上的微秒时间戳及固定 PCM 规格。
853
+ */
854
+ readonly timestamp: number;
855
+ readonly sampleRate: number;
856
+ readonly numberOfChannels: number;
857
+ readonly numberOfFrames: number;
858
+ readonly format: string | null;
859
+ /**
860
+ * 将指定声道复制为平面浮点 PCM;返回后 SDK 不再访问原始样本。
861
+ */
862
+ copyTo(destination: Float32Array, options: {
863
+ planeIndex: number;
864
+ format: "f32-planar";
865
+ }): void;
866
+ }
867
+
868
+ /**
869
+ * 外部帧源与兼容视频轨入口二选一,禁止混用两套所有权和生命周期。
870
+ */
871
+ type RealtimeExternalVideoStreamOptions = {
872
+ source: RealtimeExternalVideoSource;
873
+ videoTrack?: never;
874
+ videoFormat?: never;
875
+ } | {
876
+ videoTrack: MediaStreamTrack;
877
+ videoFormat: RealtimeVideoFormat;
878
+ source?: never;
879
+ };
880
+ /**
881
+ * 接入方拥有的外部采集、解码或处理源;SDK 不申请设备权限,也不播放输入音频。
882
+ * videoFormat 和 hasAudio 在一次绑定内保持不变,音视频时间戳使用同一单调时间轴。
883
+ */
884
+ interface RealtimeExternalVideoSource {
885
+ /**
886
+ * 原始视频尺寸、帧率及编码配置;方向和镜像由接入方处理到像素中。
887
+ */
888
+ readonly videoFormat: RealtimeVideoFormat;
889
+ /**
890
+ * 是否通过 sink 提交音频,默认 false。
891
+ */
892
+ readonly hasAudio?: boolean;
893
+ /**
894
+ * 安装帧回调并在源可交付后返回;不要等待首帧或生成开始。
895
+ * 接入方按实时节奏提交,断开连接时可继续送视频以维持预览。
896
+ */
897
+ start(sink: RealtimeExternalFrameSink): Promise<void>;
898
+ /**
899
+ * 停止交付并解除 sink 引用,须可重复调用;采集设备及播放器仍归接入方管理。
900
+ */
901
+ stop(): Promise<void>;
902
+ }
903
+ /**
904
+ * 一次外部源绑定的输入端;可在提交返回后 close 原帧,SDK 不接管原帧所有权。
905
+ * VideoFrame.timestamp 和 AudioData.timestamp 均为非负微秒时间,不能跨循环或 seek 回退。
906
+ */
907
+ interface RealtimeExternalFrameSink {
908
+ /**
909
+ * 经过像素面积约束和 4 对齐的固定媒体规格;提交时仍使用 source.videoFormat 的尺寸。
910
+ */
911
+ readonly videoFormat: RealtimeVideoFormat;
912
+ /**
913
+ * 是否接受输入;断开时仍为 true,解绑或源失败后永久变为 false。
914
+ */
915
+ readonly isRequestingFrames: boolean;
916
+ /**
917
+ * 提交原始尺寸的视频帧;SDK 保留副本并缩放到媒体规格,不保证交付每个输入帧。
918
+ * 重复、回退或无效时间戳被忽略。输入需按实时节奏送达,提前量不得超过两秒。
919
+ */
920
+ pushVideo(frame: VideoFrame): void;
921
+ /**
922
+ * 提交解码后的 PCM,仅 hasAudio=true 时接受;不接收压缩音频。
923
+ * 支持 8–192 kHz、1–8 声道,单包不超过一秒;格式在一次绑定内保持不变。
924
+ * SDK 复制并混成单声道,经 AudioWorklet 重采样和调度;仅发布期间上传,不缓存待重连。
925
+ * 音频重叠或无效时间戳被忽略,间断在浏览器连续音轨中输出静音,不压缩时间轴。
926
+ */
927
+ pushAudio(frame: RealtimeExternalAudioFrame): void;
928
+ /**
929
+ * 上报不可恢复的采集或处理错误;SDK 结束连接并释放本地流。
930
+ */
931
+ reportError(error: Error): void;
932
+ }
706
933
 
707
934
  /**
708
935
  * 定义 SDK 对接入方提供的实时媒体与生成控制能力。
709
936
  */
710
937
  interface XmaxRealtimeManaging {
711
938
  /**
712
- * 监听录制完成、中断或失败;传入 undefined 清除监听,不停止正在进行的录制。
939
+ * 观察当前生成结果的原始 Web 音视频轨道,立即回放当前绑定。
940
+ * 不依赖 WebCodecs;适用于 MediaRecorder 等原生媒体流处理。
941
+ * 轨道仅借用;需要停止或修改时应先 clone(),不得停止 SDK 的原始轨道。
942
+ * 无结果流时回调 undefined;传 undefined 取消监听,不影响订阅、音量或生成。
943
+ * 可与原始帧监听并存,close() 时自动清除。
713
944
  */
714
- setRecordingListener(listener?: RealtimeRecordingListener): void;
945
+ setRemoteMediaTracksListener(listener?: (tracks?: RemoteMediaTracks) => void): void;
946
+ /**
947
+ * 监听当前结果流的原始解码视频和播放音量处理前的 PCM 音频。
948
+ * 两轨共用接收端呈现时间轴,单位为微秒;按时间戳同步,不按回调到达时间配对。
949
+ * 视频帧交付后由接入方 close();回调须保持轻量,队列超限或换流会标记不连续。
950
+ * 从用户手势调用并等待准备完成;不支持的浏览器或 RTC 平台会拒绝,不终止生成。
951
+ * 可在生成前或生成中设置;undefined 取消并释放资源,不改变音量、订阅和生成任务。
952
+ * 浏览器呈现回调可能漏帧,不保证交付全部接收或解码帧;没有音轨时不补静音包。
953
+ */
954
+ setRemoteMediaFrameListener(listener?: RealtimeMediaFrameListener): Promise<void>;
715
955
  /**
716
956
  * 实时能力配置。
717
957
  */
718
958
  readonly options: RealtimeConfiguration;
719
959
  /**
720
- * 当前实时连接与生成状态。
960
+ * 当前实时连接与生成状态。
961
+ */
962
+ readonly currentState: RealtimeState;
963
+ /**
964
+ * 当前摄像头媒体规格,不随上行调档变化;没有摄像头流时为空。
965
+ */
966
+ readonly currentCameraVideoFormat?: RealtimeVideoFormat;
967
+ /**
968
+ * 当前摄像头尺寸匹配的预设;没有摄像头或尺寸未匹配预设时为空。
969
+ */
970
+ readonly currentCameraPreset?: RealtimeCameraPreset;
971
+ /**
972
+ * 更新预览就绪且未连接的摄像头规格,保留 SDK 轨道与视图绑定。
973
+ * 传入预设时保留当前帧率、码率和编码偏好,尺寸仍按模型规则解析。
974
+ */
975
+ updateCameraFormat(format: RealtimeVideoFormat | RealtimeCameraPreset): Promise<void>;
976
+ /**
977
+ * 当前连接成功应用的上行档位;未连接、断开或没有本地上行时为空。
978
+ */
979
+ readonly uplinkQualityLevel?: RealtimeQualityLevel;
980
+ /**
981
+ * 当前连接成功提交的下行档位;尚未开始生成、未连接或断开时为空,实际回传可能稍晚生效。
721
982
  */
722
- readonly currentState: RealtimeState;
983
+ readonly downlinkQualityLevel?: RealtimeQualityLevel;
723
984
  /**
724
- * 插帧功能开关;不随首帧等待、跳帧或视图挂载变化,不支持或故障降级时关闭。
985
+ * 在生成中指定上行编码档位,不改变媒体采集规格和生成画布。
986
+ * Agora、TRTC 的自动调档从新档位继续;VeRTC 仅应用手动档位。
725
987
  */
726
- readonly isFrameInterpolationEnabled: boolean;
988
+ setUplinkQualityLevel(level: RealtimeQualityLevel): Promise<void>;
727
989
  /**
728
- * 切换客户端插帧,不改变回传分辨率或重启任务。不支持时抛错且保留配置。
990
+ * 在生成中指定下行回传档位;已启用自动调档时,从新档位继续判断。
991
+ * 发送成功表示请求已提交,不代表服务端已经返回新尺寸。
729
992
  */
730
- setFrameInterpolationEnabled(enabled: boolean): Promise<void>;
993
+ setDownlinkQualityLevel(level: RealtimeQualityLevel): Promise<void>;
731
994
  /**
732
- * 手动升/降一档上行配置;仅支持正在生成的 Agora、TRTC 会话。
733
- * Agora 调整分辨率、帧率和编码码率;TRTC 临时只调整帧率,保留尺寸和码率配置。
734
- * 保留原始 L1 基准,不改变下行尺寸;自动调档仍保持开启。
995
+ * 手动升/降一档上行配置,需要正在生成且存在本地上行。
996
+ * Agora、VeRTC 调整分辨率、帧率和编码码率;TRTC 只调整帧率,保留尺寸和码率配置。
997
+ * 保留原始 L1 基准,不改变下行尺寸;已启用的自动调档保持开启。
735
998
  * @param direction 升一档或降一档;到达 L1/L5 边界时不重复应用。
736
999
  */
737
1000
  adjustUplinkQuality(direction: "upgrade" | "downgrade"): Promise<void>;
738
1001
  /**
739
- * 手动升/降一档下行输出尺寸,便于调试 change_target_size;仅支持正在生成的 Agora、TRTC 会话。
740
- * 仅改变分辨率,成功发送后同步目标档位与插帧尺寸;自动调档仍保持开启。
1002
+ * 手动升/降一档下行输出尺寸,需要正在生成。
1003
+ * 仅改变分辨率,成功发送后同步目标档位;已启用的自动调档保持开启。
741
1004
  * 到达 L1/L5 边界时不重复发送;发送成功不代表服务端已生效。
742
1005
  */
743
1006
  adjustDownlinkQuality(direction: "upgrade" | "downgrade"): Promise<void>;
@@ -755,29 +1018,30 @@ interface XmaxRealtimeManaging {
755
1018
  */
756
1019
  setStateListener(listener?: RealtimeStateListener): Promise<void>;
757
1020
  /**
758
- * 监听 TRTC 上下行网络质量和 RTT;立即回放最新快照,断开后回调 undefined。
1021
+ * 监听上下行网络质量;立即回放最新快照,尚无采样或断开后回调 undefined。
759
1022
  * 独立于日志和远端生成流;传入 undefined 取消监听,监听器异常不影响主流程。
760
1023
  */
761
- setNetworkStatisticsListener(listener?: NetworkStatisticsListener): Promise<void>;
1024
+ setNetworkQualityListener(listener?: RealtimeNetworkQualityListener): Promise<void>;
762
1025
  /**
763
1026
  * 监听启动耗时;立即回放当前快照,每完成一个阶段再次回调。
764
- * 新一轮打开摄像头时重置;失败或终止后冻结,更新生成条件不重置。
1027
+ * 新一轮创建媒体源时重置;失败或终止后冻结,更新生成条件不重置。
765
1028
  * 首帧统计需要将远端轨道绑定到 SDK 视频视图,且不会阻塞 startGeneration。
766
1029
  * 传入 undefined 清除监听器;监听器异常不影响生成流程。
1030
+ * 开启 performance 日志后,渲染预热完成时另向 console.info 输出启动汇总,不依赖监听器。
767
1031
  */
768
- setLaunchTimingListener(listener?: RealtimeLaunchTimingListener): Promise<void>;
1032
+ setTimingListener(listener?: RealtimeTimingListener): Promise<void>;
769
1033
  /**
770
- * 监听本地主视频流实际分辨率、帧率及码率(kbps),独立于日志开关。
1034
+ * 监听上行分辨率、采集/编码/发送帧率、码率和丢包率,独立于日志开关。
771
1035
  * 设置后立即回放最新快照;未取得数据或停止/断开时回调 undefined。
772
1036
  * 传入 undefined 取消监听;监听器异常不影响生成流程。
773
1037
  */
774
- setLocalVideoStatisticsListener(listener?: VideoStatisticsListener): Promise<void>;
1038
+ setUplinkVideoStatisticsListener(listener?: UplinkVideoStatisticsListener): Promise<void>;
775
1039
  /**
776
- * 监听当前生成结果流的分辨率、帧率、码率、云端 RTT 和媒体 E2E 估算值。
1040
+ * 监听下行分辨率、解码/RTC 渲染帧率、码率、丢包率和媒体 E2E 估算值。
777
1041
  * 独立于日志开关;立即回放最新快照,流消失或断开时回调 undefined。
778
1042
  * 传入 undefined 取消监听;监听器异常不影响生成流程。
779
1043
  */
780
- setRemoteVideoStatisticsListener(listener?: RemoteVideoStatisticsListener): Promise<void>;
1044
+ setDownlinkVideoStatisticsListener(listener?: DownlinkVideoStatisticsListener): Promise<void>;
781
1045
  /**
782
1046
  * 设置本地媒体预览音量。
783
1047
  * @throws 音量超出有效范围时抛出错误。
@@ -795,6 +1059,7 @@ interface XmaxRealtimeManaging {
795
1059
  * 将返回的轨道绑定到预览视图;收到有效帧且视图已绑定后进入 `ready`。
796
1060
  *
797
1061
  * @param options.videoFormat 旋转后的目标规格,尺寸按模型规则解析。
1062
+ * @param options.preset 替代 videoFormat,使用模型支持的摄像头预设和推荐帧率;两者必须且只能提供一个。
798
1063
  * @param options.position 前置或后置摄像头。
799
1064
  * @param options.useMicrophone 是否采集并发布麦克风音频。
800
1065
  * @param options.rotation 输入帧顺时针旋转角度,默认 0;非零角度目前仅支持 Agora,预览和上传均校正方向,镜像保持独立。
@@ -803,34 +1068,24 @@ interface XmaxRealtimeManaging {
803
1068
  * @throws 模型不支持相机输入、配置无效、权限或采集启动失败时抛出错误。
804
1069
  */
805
1070
  createLocalCameraStream(options: {
806
- videoFormat: RealtimeVideoFormat;
807
1071
  position: CameraPosition;
808
1072
  useMicrophone: boolean;
809
1073
  rotation?: CameraRotation;
810
1074
  enableFrameValidation?: boolean;
811
- }): Promise<RealtimeMediaStream>;
812
- /**
813
- * 创建服务端直接读取的 HTTP/HTTPS 网络视频源,不采集或发布本地音视频。
814
- * 本地预览静音播放一次,独立于服务端进度;创建源不会开始生成。
815
- * 地址必须可由服务端直接访问,不转发浏览器 Cookie 或自定义鉴权头。
816
- * @param options.url 服务端可直接访问的 HTTP/HTTPS 视频地址。
817
- * @param options.videoFormat 模型输入及生成画面规格,不是上行编码参数。
818
- * @param options.sampleMethod 服务端采样方式,默认 time。
819
- * @param options.onFinish 当前任务收到服务端完成消息且生成就绪后调用一次,不代表尾帧已播放完。
820
- * @throws 地址、格式无效或已有活动媒体源时抛错;close 释放源,disconnect 保留预览。
821
- */
822
- createNetworkVideoStream(options: {
823
- url: string;
1075
+ } & ({
824
1076
  videoFormat: RealtimeVideoFormat;
825
- sampleMethod?: RealtimeVideoSampleMethod;
826
- onFinish?: () => void;
827
- }): Promise<RealtimeMediaStream>;
1077
+ preset?: never;
1078
+ } | {
1079
+ preset: RealtimeCameraPreset;
1080
+ videoFormat?: never;
1081
+ })): Promise<RealtimeMediaStream>;
828
1082
  /**
829
1083
  * 从本地 File/Blob 创建文件视频源,支持 TRTC、Agora 和 VeRTC,不访问摄像头或麦克风。
830
- * 通过 Canvas 等比缩放补黑边,文件音频独立上行,本地预览始终静音。
1084
+ * Canvas 保留完整内容并按媒体尺寸规则缩放,文件音频独立上行,本地预览始终静音。
1085
+ * SDK 单独选择模型生成画布,仅在媒体与画布比例不一致时启用服务端 contain 补边。
831
1086
  * 应从用户点击事件直接调用以解锁播放;创建后停在首帧,startGeneration 时开始播放。
832
1087
  * @param options.file 包含可解码视频的本地 File 或 Blob。
833
- * @param options.videoFormat 期望的视频规格;尺寸自动匹配最接近宽高比的模型档位,等距时优先横屏。
1088
+ * @param options.videoFormat 帧率及编码配置;宽高保留兼容入参,实际媒体尺寸从文件读取。
834
1089
  * @param options.loop 是否循环播放文件音视频,默认 true。
835
1090
  * @param options.includeAudio 是否发送文件音频,默认 true;无音轨文件输出静音,false 不创建音频轨。
836
1091
  * @throws 提供方不支持、文件/格式无效、浏览器无法解码或播放受限时抛错。
@@ -843,10 +1098,11 @@ interface XmaxRealtimeManaging {
843
1098
  }): Promise<RealtimeMediaStream>;
844
1099
  /**
845
1100
  * 从本地 File/Blob 创建图片视频流,支持 TRTC、Agora 和 VeRTC。
846
- * 等比缩放并居中补黑边,持续发送同一静止画面,不上传文件、不采集摄像头或麦克风。
1101
+ * 保留完整内容并按媒体尺寸规则缩放,持续发送同一静止画面,不上传文件、不采集摄像头或麦克风。
1102
+ * SDK 单独选择模型生成画布,仅在媒体与画布比例不一致时启用服务端 contain 补边。
847
1103
  * 创建后可直接预览,仍需调用 startGeneration 开始生成;disconnect 保留图片源,close 释放全部资源。
848
1104
  * @param options.file 包含浏览器可解码图片的本地 File 或 Blob;动图仅取解码时的静止快照。
849
- * @param options.videoFormat 期望的视频规格;尺寸自动匹配最接近宽高比的模型档位,等距时优先横屏。
1105
+ * @param options.videoFormat 帧率及编码配置;宽高保留兼容入参,实际媒体尺寸从图片读取。
850
1106
  * @throws 文件或格式无效、浏览器无法解码、Canvas 采集不可用或已有活动源时抛错。
851
1107
  */
852
1108
  createLocalImageStream(options: {
@@ -854,25 +1110,31 @@ interface XmaxRealtimeManaging {
854
1110
  videoFormat: RealtimeVideoFormat;
855
1111
  }): Promise<RealtimeMediaStream>;
856
1112
  /**
857
- * 接收用户自行采集或处理的实时视频轨,仅视频,不采集或发送音频。
858
- * 不要求绑定 SDK 预览;旋转、裁剪及本地预览由调用方负责,后端 mirror 固定 false。
859
- * SDK 持有轨道副本:disconnect 保留输入,close 释放副本,不停止调用方原始轨道。
860
- * 副本共享底层媒体源;调用方仍负责停止原始采集。设备源结束时 SDK 上报错误并关闭。
861
- * @param options.videoTrack 用户自行采集或处理的 live 视频轨,原始轨道归调用方所有。
862
- * @param options.videoFormat 期望的上传及生成规格,须符合模型规则;不代表修改输入像素。
863
- * @throws 非 live 视频轨、不支持的格式、已有活动媒体源或 RTC 初始化失败时抛错。
1113
+ * 接收外部帧源,或兼容仅视频的原生轨入口;不申请设备权限,不播放输入音频。
1114
+ * 传 source 时调用 start(sink),支持可选 PCM;创建完成即 ready,不等待首帧。
1115
+ * 外部帧按媒体规则限制面积并按 4 对齐,SDK 缩放并提供预览;方向和镜像由接入方负责。
1116
+ * 传 videoTrack/videoFormat 时仅克隆视频轨,保持原有行为,不处理其像素或创建预览绑定。
1117
+ * disconnect 保留源和预览,但丢弃音频;stopExternalVideoStream 或 close 使旧 sink 失效并调用 source.stop。
1118
+ * 有音频时需从用户手势调用以解锁 AudioContext,要求安全上下文及 AudioWorklet。
1119
+ * @param options.source 接入方拥有的外部音视频帧源,与 videoTrack/videoFormat 二选一。
1120
+ * @param options.videoTrack 兼容入口:接入方拥有的 live 视频轨。
1121
+ * @param options.videoFormat 兼容入口:原视频轨的尺寸、帧率及编码配置。
1122
+ * @throws 配置无效、已有活动媒体、源启动或 RTC 准备失败时抛错并清理本次绑定。
864
1123
  */
865
- createExternalVideoStream(options: {
866
- videoTrack: MediaStreamTrack;
867
- videoFormat: RealtimeVideoFormat;
868
- }): Promise<RealtimeMediaStream>;
1124
+ createExternalVideoStream(options: RealtimeExternalVideoStreamOptions): Promise<RealtimeMediaStream>;
1125
+ /**
1126
+ * 未连接时解绑外部源,清空预览并释放 SDK 输出,不接管接入方采集设备。
1127
+ * 已连接时请先 disconnect;对其他媒体源不做操作。
1128
+ */
1129
+ stopExternalVideoStream(): Promise<void>;
869
1130
  /**
870
1131
  * 更新当前本地流的上行视频格式,立即应用于 RTC 编码器,不重连或重启生成。
871
1132
  * 传入完整格式;未指定的码率和编码偏好按 RealtimeVideoFormat 默认规则解析。
872
- * 成功后更新本地轨道的 videoFormat,后续重连继续使用该格式。
873
- * 模型生成及远端插帧仍使用创建本地流时的格式;此接口不改变生成尺寸。
1133
+ * 尺寸向下做 4 对齐,优先保持精确比例;帧率、码率及编码偏好保持传入配置。
1134
+ * 成功后本地轨道的 videoFormat 记录对齐后的格式,后续重连继续使用该格式。
1135
+ * 模型生成仍使用创建本地流时的格式;此接口不改变生成尺寸。
874
1136
  * 实际发送规格受设备、浏览器和网络影响,应通过统计回调确认。
875
- * 上行自适应以本次成功应用的完整格式作为新的 L1 基准;Agora 按档位缩放尺寸和帧率,TRTC 临时仅调帧率。
1137
+ * 上行自适应以本次成功应用的完整格式作为新的 L1 基准;Agora 按档位缩放尺寸和帧率,TRTC 仅调帧率。
876
1138
  *
877
1139
  * @param videoFormat 本次完整的上行尺寸、帧率和编码配置。
878
1140
  * @throws 无本地相机、外部、图片或文件视频流、其他操作进行中、参数无效或 RTC 更新失败时抛错。
@@ -901,11 +1163,11 @@ interface XmaxRealtimeManaging {
901
1163
  /**
902
1164
  * 使用当前 Manager 创建的本地流建立实时连接。
903
1165
  *
904
- * 创建实时会话、加入 RTC 房间并启动会话心跳;摄像头源发布本地流,网络视频源仅接收。
1166
+ * 创建实时会话、加入 RTC 房间、发布本地媒体并启动会话心跳。
905
1167
  * 启用帧检测时,发布前并行等待相机预热(固定 200ms),避免把黑帧推给 RTC。
906
1168
  * 返回的远端媒体流在生成开始后承载远端生成画面。
907
1169
  *
908
- * @param localStream 由当前 Manager 创建的摄像头、外部视频轨、本地图片、本地视频文件或网络视频源。
1170
+ * @param localStream 由当前 Manager 创建的摄像头、外部视频轨、本地图片或本地视频文件。
909
1171
  * @returns 远端生成结果占位的媒体流。
910
1172
  * @throws 本地流不属于当前 Manager、已有活动连接、会话创建或进房
911
1173
  * 发布失败时抛出错误;失败时自动释放连接资源并恢复本地预览。
@@ -927,12 +1189,11 @@ interface XmaxRealtimeManaging {
927
1189
  * 首次生成必须提供条件上下文,之后缺省时复用最近一次缓存的上下文。
928
1190
  * 返回后请将远端流挂载到 SDK 视频视图;首帧及渲染预热完成后状态才进入 generating。
929
1191
  *
930
- * @param options.localStream 由当前 Manager 创建的摄像头、外部视频轨、本地文件或网络视频源。
1192
+ * @param options.localStream 由当前 Manager 创建的摄像头、外部视频轨或本地文件。
931
1193
  * @param options.context 本次生成使用的条件上下文;缺省时复用缓存。
932
1194
  * @param options.restart 是否保留 RTC 连接并创建新任务发送 start,默认 false;不预先发送 stop。
933
1195
  * @param options.faceRestoration 是否启用原始人脸回贴,默认 false;正在生成时通过 change_condition 更新。
934
1196
  * @param options.extraParams 合并到本次 start 或 change_condition 的 params;不缓存,自动恢复时不携带,不允许覆盖 SDK 字段。
935
- * @param options.record 是否录制远端原始音视频约 20 秒,默认 false;仅 start 有效,条件更新时忽略,重启录制暂不支持。
936
1197
  * @returns 可挂载的远端媒体流,不等待渲染预热;展示就绪以 generating 状态为准。
937
1198
  * @throws extraParams 包含非 JSON 数据、循环引用或 SDK 保留字段时,在连接或更新前抛出 invalidConfiguration。
938
1199
  * @throws 本地流不属于当前 Manager、缺少可用的条件上下文、信令发送
@@ -944,7 +1205,6 @@ interface XmaxRealtimeManaging {
944
1205
  restart?: boolean;
945
1206
  faceRestoration?: boolean;
946
1207
  extraParams?: RealtimeExtraParams;
947
- record?: boolean;
948
1208
  }): Promise<RealtimeMediaStream>;
949
1209
  }
950
1210
 
@@ -965,18 +1225,25 @@ declare enum XmaxEnvironment {
965
1225
  * 环境对应的 Xmax API Base URL。
966
1226
  */
967
1227
  declare function apiBaseURL(environment: XmaxEnvironment): string;
1228
+ /**
1229
+ * 环境对应的实时会话 API 地址。
1230
+ */
1231
+ declare function realtimeApiBaseURL(environment: XmaxEnvironment): string;
968
1232
 
969
1233
  /**
970
1234
  * 控制 XmaxSDK 输出的日志类型(位掩码,可组合)。
971
1235
  */
972
1236
  declare enum XmaxLoggerOption {
1237
+ /**
1238
+ * 关闭全部 SDK 日志输出。
1239
+ */
973
1240
  none = 0,
974
1241
  /**
975
1242
  * Room、API、Realtime、Storage 等业务运行日志。
976
1243
  */
977
1244
  business = 1,
978
1245
  /**
979
- * RTC 网络质量和音视频运行统计,输出到 console.info。
1246
+ * 启动耗时、RTC 网络质量和音视频运行统计,输出到 console.info。
980
1247
  */
981
1248
  performance = 2,
982
1249
  /**
@@ -994,14 +1261,41 @@ declare class XmaxLogger {
994
1261
  * 分类日志
995
1262
  */
996
1263
  static readonly realtime: XmaxLogger;
1264
+ /**
1265
+ * RTC 引擎、进退房和媒体传输日志。
1266
+ */
997
1267
  static readonly rtc: XmaxLogger;
1268
+ /**
1269
+ * 本地媒体准备与释放日志。
1270
+ */
998
1271
  static readonly media: XmaxLogger;
1272
+ /**
1273
+ * API 请求及响应日志。
1274
+ */
999
1275
  static readonly api: XmaxLogger;
1276
+ /**
1277
+ * 文件上传与下载日志。
1278
+ */
1000
1279
  static readonly storage: XmaxLogger;
1280
+ /**
1281
+ * 房间消息和心跳日志。
1282
+ */
1001
1283
  static readonly room: XmaxLogger;
1284
+ /**
1285
+ * 流发布、订阅及生成控制日志。
1286
+ */
1002
1287
  static readonly stream: XmaxLogger;
1288
+ /**
1289
+ * 视频视图与渲染管线日志。
1290
+ */
1003
1291
  static readonly render: XmaxLogger;
1292
+ /**
1293
+ * 触点采样和轨迹交互日志。
1294
+ */
1004
1295
  static readonly interaction: XmaxLogger;
1296
+ /**
1297
+ * 摄像头和麦克风权限日志。
1298
+ */
1005
1299
  static readonly permission: XmaxLogger;
1006
1300
  /**
1007
1301
  * 日志类别
@@ -1048,6 +1342,9 @@ declare class XmaxLogger {
1048
1342
  private log;
1049
1343
  }
1050
1344
 
1345
+ /**
1346
+ * SDK 的身份、环境和日志选项。
1347
+ */
1051
1348
  interface XmaxConfigurationInit {
1052
1349
  /**
1053
1350
  * 调用 Xmax 服务使用的 API Key。
@@ -1066,9 +1363,6 @@ interface XmaxConfigurationInit {
1066
1363
  * SDK 全局配置。
1067
1364
  */
1068
1365
  declare class XmaxConfiguration {
1069
- /**
1070
- * 服务身份与环境
1071
- */
1072
1366
  /**
1073
1367
  * 调用 Xmax 服务使用的 API Key。
1074
1368
  */
@@ -1077,19 +1371,12 @@ declare class XmaxConfiguration {
1077
1371
  * SDK 连接的服务环境,同时决定日志细项语言:国内为中文,海外为英文。
1078
1372
  */
1079
1373
  readonly environment: XmaxEnvironment;
1080
- /**
1081
- * 日志配置
1082
- */
1083
1374
  /**
1084
1375
  * SDK 输出的日志类型;默认为不输出日志。
1085
1376
  */
1086
1377
  readonly loggerOptions: XmaxLoggerOption;
1087
1378
  /**
1088
- * 创建 SDK 全局配置。
1089
- *
1090
- * @param init.apiKey 调用 Xmax 服务使用的 API Key。
1091
- * @param init.environment SDK 连接的服务环境;默认为国内环境。
1092
- * @param init.loggerOptions SDK 输出的日志类型;默认为空。
1379
+ * 清理 API Key 首尾空白并补全环境和日志默认值;有效性检查由 validate 执行。
1093
1380
  */
1094
1381
  constructor(init: XmaxConfigurationInit);
1095
1382
  /**
@@ -1103,16 +1390,34 @@ declare class XmaxConfiguration {
1103
1390
  * 非实时视频的输出质量。
1104
1391
  */
1105
1392
  declare enum NonRealtimeQuality {
1393
+ /**
1394
+ * 标准清晰度输出。
1395
+ */
1106
1396
  sd = "sd",
1397
+ /**
1398
+ * 高清输出。
1399
+ */
1107
1400
  hd = "hd"
1108
1401
  }
1109
1402
  /**
1110
1403
  * 服务端任务状态;上传进度不属于任务状态。
1111
1404
  */
1112
1405
  declare enum NonRealtimeTaskStatus {
1406
+ /**
1407
+ * 任务已提交,等待服务端处理。
1408
+ */
1113
1409
  submitted = "submitted",
1410
+ /**
1411
+ * 服务端正在处理任务。
1412
+ */
1114
1413
  processing = "processing",
1414
+ /**
1415
+ * 任务处理完成。
1416
+ */
1115
1417
  completed = "completed",
1418
+ /**
1419
+ * 任务处理失败。
1420
+ */
1116
1421
  error = "error"
1117
1422
  }
1118
1423
  /**
@@ -1148,16 +1453,49 @@ interface NonRealtimeTaskOptions {
1148
1453
  * 非实时生成结果;缺失或 null 的服务端字段规范化为 undefined。
1149
1454
  */
1150
1455
  interface NonRealtimeResult {
1456
+ /**
1457
+ * 生成结果文件的访问 URL。
1458
+ */
1151
1459
  readonly url?: string;
1460
+ /**
1461
+ * 服务端上传生成结果时返回的错误说明。
1462
+ */
1152
1463
  readonly uploadError?: string;
1464
+ /**
1465
+ * 生成结果的上传状态。
1466
+ */
1153
1467
  readonly uploadStatus?: string;
1468
+ /**
1469
+ * 服务端结果收尾耗时,单位为毫秒。
1470
+ */
1154
1471
  readonly finalizeDurationMs?: number;
1472
+ /**
1473
+ * 服务端使用的压缩等级。
1474
+ */
1155
1475
  readonly compressionLevel?: string;
1476
+ /**
1477
+ * 结果视频的帧数。
1478
+ */
1156
1479
  readonly frameCount?: number;
1480
+ /**
1481
+ * 结果视频帧率,单位为 fps。
1482
+ */
1157
1483
  readonly fps?: number;
1484
+ /**
1485
+ * 结果视频时长,单位为毫秒。
1486
+ */
1158
1487
  readonly durationMs?: number;
1488
+ /**
1489
+ * 结果文件大小,单位为字节。
1490
+ */
1159
1491
  readonly fileSizeBytes?: number;
1492
+ /**
1493
+ * 服务端处理时丢弃的帧数。
1494
+ */
1160
1495
  readonly droppedFrameCount?: number;
1496
+ /**
1497
+ * 结果压缩前的文件大小,单位为字节。
1498
+ */
1161
1499
  readonly originalFileSizeBytes?: number;
1162
1500
  }
1163
1501
  /**
@@ -1165,23 +1503,77 @@ interface NonRealtimeResult {
1165
1503
  * 时间戳保持服务端原始字符串,不推断时区。
1166
1504
  */
1167
1505
  interface NonRealtimeTask {
1506
+ /**
1507
+ * 非实时任务标识,用于查询和恢复任务。
1508
+ */
1168
1509
  readonly uid: string;
1510
+ /**
1511
+ * 服务端返回的运行状态。
1512
+ */
1169
1513
  readonly status: NonRealtimeTaskStatus;
1514
+ /**
1515
+ * 业务用户标识。
1516
+ */
1170
1517
  readonly userUid?: string;
1518
+ /**
1519
+ * 本次视频生成使用的文字指令。
1520
+ */
1171
1521
  readonly prompt?: string;
1522
+ /**
1523
+ * 已上传源视频的 URL。
1524
+ */
1172
1525
  readonly videoPath?: string;
1526
+ /**
1527
+ * 已上传参考图片的 URL。
1528
+ */
1173
1529
  readonly referencePath?: string;
1530
+ /**
1531
+ * 服务端任务处理器标识。
1532
+ */
1174
1533
  readonly processorId?: string;
1534
+ /**
1535
+ * 生成结果使用的输出质量。
1536
+ */
1175
1537
  readonly quality?: NonRealtimeQuality;
1538
+ /**
1539
+ * 提交任务时指定的处理帧率,单位为 fps。
1540
+ */
1176
1541
  readonly requestedFps?: number;
1542
+ /**
1543
+ * 服务端最终使用的处理帧率,单位为 fps。
1544
+ */
1177
1545
  readonly resolvedFps?: number;
1546
+ /**
1547
+ * 服务端已执行的重试次数。
1548
+ */
1178
1549
  readonly retryCount?: number;
1550
+ /**
1551
+ * 源视频时长,单位为秒。
1552
+ */
1179
1553
  readonly videoDurationSeconds?: number;
1554
+ /**
1555
+ * 服务端报告的计费时长,单位为秒。
1556
+ */
1180
1557
  readonly billableDurationSeconds?: number;
1558
+ /**
1559
+ * 服务端报告的任务消耗点数。
1560
+ */
1181
1561
  readonly chargePoints?: number;
1562
+ /**
1563
+ * 生成结果的文件和处理信息。
1564
+ */
1182
1565
  readonly result?: NonRealtimeResult;
1566
+ /**
1567
+ * 服务端开始处理任务的时间。
1568
+ */
1183
1569
  readonly processStartTime?: string;
1570
+ /**
1571
+ * 任务创建时间。
1572
+ */
1184
1573
  readonly createTimestamp?: string;
1574
+ /**
1575
+ * 任务最近更新时间。
1576
+ */
1185
1577
  readonly updateTimestamp?: string;
1186
1578
  }
1187
1579
  /**
@@ -1205,9 +1597,21 @@ interface NonRealtimeTaskListOptions {
1205
1597
  * 按创建时间从新到旧排列的任务页。
1206
1598
  */
1207
1599
  interface NonRealtimeTaskPage {
1600
+ /**
1601
+ * 当前页码,从 1 开始。
1602
+ */
1208
1603
  readonly pageNumber: number;
1604
+ /**
1605
+ * 当前页的容量。
1606
+ */
1209
1607
  readonly pageSize: number;
1608
+ /**
1609
+ * 符合查询条件的任务总数。
1610
+ */
1210
1611
  readonly total: number;
1612
+ /**
1613
+ * 当前页中的任务,按创建时间从新到旧排列。
1614
+ */
1211
1615
  readonly list: readonly NonRealtimeTask[];
1212
1616
  }
1213
1617
 
@@ -1270,9 +1674,6 @@ interface XmaxNonRealtimeManaging {
1270
1674
  * SDK 的统一入口,负责创建实时、非实时和媒体服务组件。
1271
1675
  */
1272
1676
  declare class XmaxClient {
1273
- /**
1274
- * 客户端配置
1275
- */
1276
1677
  /**
1277
1678
  * 客户端使用的全局配置。
1278
1679
  */
@@ -1290,7 +1691,7 @@ declare class XmaxClient {
1290
1691
  constructor(configuration: XmaxConfiguration);
1291
1692
  /**
1292
1693
  * 创建实时媒体 Manager。
1293
- * 模型专用地址优先于环境默认地址,并用于该 Manager 的整个会话生命周期。
1694
+ * 已知模型按环境选择实时会话地址;自定义模型使用测试地址,覆盖整个会话生命周期。
1294
1695
  *
1295
1696
  * @param options 实时生成模型等业务配置。
1296
1697
  * @returns 可用于本地相机预览、实时连接与生成的实时 Manager。
@@ -1304,7 +1705,7 @@ declare class XmaxClient {
1304
1705
  /**
1305
1706
  * 创建媒体处理与能力查询 Service。
1306
1707
  *
1307
- * @param model 媒体输入规则使用的模型,默认为 `x2.1.1-preview-cn`。
1708
+ * @param model 媒体输入规则使用的模型,默认为 `x2.1`。
1308
1709
  */
1309
1710
  createMediaService(model?: RealtimeModelName): MediaServicing;
1310
1711
  /**
@@ -1330,8 +1731,7 @@ declare class NonRealtimeTaskError extends XmaxError {
1330
1731
  }
1331
1732
 
1332
1733
  /**
1333
- * 提供模型输入尺寸和平台媒体能力相关的业务规则。
1334
- * 模型输入尺寸与远端插帧能力。
1734
+ * 统一计算本地媒体、生成画布及回传尺寸,并查询平台媒体能力。
1335
1735
  */
1336
1736
  declare class MediaService implements MediaServicing {
1337
1737
  /**
@@ -1340,18 +1740,29 @@ declare class MediaService implements MediaServicing {
1340
1740
  readonly model: RealtimeModelName;
1341
1741
  /**
1342
1742
  * 创建媒体服务。
1343
- *
1344
- * @param model 媒体输入规则使用的模型,默认为 `x2.1.1-preview-cn`。
1345
1743
  */
1346
1744
  constructor(model?: RealtimeModelName);
1347
1745
  /**
1348
- * Web 插帧保留原始尺寸;/16 对齐由 GPU 内部补边处理,不缩小回传视频。
1746
+ * 解析固定媒体基准:保留完整内容、不放大、限制面积并按 4 对齐。
1747
+ * 摄像头请求尺寸须先匹配模型桶;文件媒体和外部轨道不受模型桶比例限制。
1748
+ *
1749
+ * @param sourceMediaSize 原始媒体尺寸。
1750
+ * @param source 媒体来源,仅摄像头需要校验采集分辨率桶。
1751
+ * @returns 用于固定媒体基准和初始上行编码的尺寸。
1752
+ */
1753
+ resolveMediaSize(sourceMediaSize: ModelSize, source: "camera" | "image" | "video" | "external"): ModelSize;
1754
+ /**
1755
+ * 选择比例最接近的模型生成画布;无固定桶时按模型像素预算和对齐规则计算。
1756
+ */
1757
+ resolveGenerationSize(resolvedMediaSize: ModelSize): ModelSize;
1758
+ /**
1759
+ * 综合下行宽高上限计算回传尺寸,不放大、优先保持比例并按 4 对齐。
1349
1760
  */
1350
- resolveFrameInterpolationSize(size: ModelSize): ModelSize;
1761
+ resolveTargetSize(resolvedMediaSize: ModelSize, maximumSize: ModelSize): ModelSize;
1351
1762
  /**
1352
- * WebGPU 适配器探测是异步的;实际性能和运行状态由渲染管线判断。
1763
+ * 拒绝无效或不能安全参与面积计算的媒体像素尺寸。
1353
1764
  */
1354
- supportsFrameInterpolation(size: ModelSize): Promise<boolean>;
1765
+ private validateIntegralSize;
1355
1766
  /**
1356
1767
  * 按模型分辨率档位或像素预算解析输入尺寸,保持宽高比例并对齐;不支持的规格抛错。
1357
1768
  */
@@ -1370,16 +1781,34 @@ declare class MediaService implements MediaServicing {
1370
1781
  * Xmax API 支持的 HTTP 请求方法。
1371
1782
  */
1372
1783
  declare enum ApiMethod {
1784
+ /**
1785
+ * 读取服务端资源。
1786
+ */
1373
1787
  get = "GET",
1788
+ /**
1789
+ * 提交数据或创建资源。
1790
+ */
1374
1791
  post = "POST",
1792
+ /**
1793
+ * 更新服务端资源。
1794
+ */
1375
1795
  put = "PUT",
1796
+ /**
1797
+ * 删除服务端资源。
1798
+ */
1376
1799
  delete = "DELETE"
1377
1800
  }
1378
1801
  /**
1379
1802
  * 请求控制选项;signal 仅取消本地 HTTP 请求,不撤销服务端已执行的操作。
1380
1803
  */
1381
1804
  interface ApiRequestOptions {
1805
+ /**
1806
+ * 取消请求及后续等待的信号。
1807
+ */
1382
1808
  signal?: AbortSignal;
1809
+ /**
1810
+ * 允许页面退出后继续完成符合浏览器限制的请求。
1811
+ */
1383
1812
  keepalive?: boolean;
1384
1813
  }
1385
1814
  /**
@@ -1426,10 +1855,25 @@ interface ApiServicing {
1426
1855
  * 解析后的临时存储配置。
1427
1856
  */
1428
1857
  interface TemporaryStorageConfiguration {
1858
+ /**
1859
+ * 对象存储桶名称。
1860
+ */
1429
1861
  bucket: string;
1862
+ /**
1863
+ * 对象存储桶所在区域。
1864
+ */
1430
1865
  region: string;
1866
+ /**
1867
+ * 对象存储访问域名。
1868
+ */
1431
1869
  endpoint?: string;
1870
+ /**
1871
+ * 上传对象的键名前缀。
1872
+ */
1432
1873
  prefix: string;
1874
+ /**
1875
+ * 对象存储临时鉴权凭据。
1876
+ */
1433
1877
  credentials: {
1434
1878
  accessKeyID: string;
1435
1879
  secretAccessKey: string;
@@ -1464,6 +1908,9 @@ interface StorageObjectClient {
1464
1908
  * 对象存储客户端工厂;生产实现按临时凭证创建 COS 客户端。
1465
1909
  */
1466
1910
  type StorageObjectClientFactory = (configuration: TemporaryStorageConfiguration) => Promise<StorageObjectClient>;
1911
+ /**
1912
+ * 对象存储上传所需的接口与客户端依赖。
1913
+ */
1467
1914
  interface StorageServiceOptions {
1468
1915
  /**
1469
1916
  * Xmax API 请求组件。
@@ -1502,6 +1949,9 @@ declare class StorageService implements StorageServicing {
1502
1949
  * 标识生成
1503
1950
  */
1504
1951
  private readonly dateGenerator;
1952
+ /**
1953
+ * 生成上传对象键名中的唯一标识。
1954
+ */
1505
1955
  private readonly identifierGenerator;
1506
1956
  /**
1507
1957
  * 创建存储 Service。
@@ -1571,27 +2021,14 @@ declare class StorageService implements StorageServicing {
1571
2021
  private static nonEmpty;
1572
2022
  }
1573
2023
 
1574
- interface RemoteFrameInterpolationOptions {
1575
- size: ModelSize;
1576
- onActiveChange?: (active: boolean) => void;
1577
- /**
1578
- * 实际提交画布呈现时通知,参数表示是否为插值帧。
1579
- */
1580
- onFramePresented?: (interpolated: boolean) => void;
1581
- onFailure: (error: unknown) => void;
1582
- }
1583
-
1584
2024
  /**
1585
- * 单轨视频视图(框架无关)。
2025
+ * 显示一路本地或远端视频轨道的实时视频视图(框架无关)。
1586
2026
  *
1587
2027
  * 通过 `attach(to:)` 挂载到任意容器元素;设置 `track` 后自动渲染。
1588
2028
  * 轨道注册了渲染绑定时走绑定管线,否则按 `mediaStreamTrack` 直接渲染。
1589
- * SDK 远端轨道在首帧后预热 1000 ms,再用 300 ms 渐入;本地预览不延迟。
2029
+ * SDK 远端轨道在首帧后按绑定配置预热,再按视图配置渐入;本地预览不延迟。
1590
2030
  */
1591
- declare class XmaxVideoView {
1592
- /**
1593
- * 视图元素
1594
- */
2031
+ declare class XmaxRealtimeVideoView {
1595
2032
  /**
1596
2033
  * 视图根元素(div,内含一个 video 元素)。
1597
2034
  */
@@ -1601,8 +2038,17 @@ declare class XmaxVideoView {
1601
2038
  */
1602
2039
  readonly videoElement: HTMLVideoElement;
1603
2040
  /**
1604
- * 公共配置
2041
+ * 视频显示层,与触控轨迹层独立。
2042
+ */
2043
+ private readonly videoLayer;
2044
+ /**
2045
+ * 首帧预热只影响媒体内容,不影响轨迹交互层。
1605
2046
  */
2047
+ private readonly warmupLayer;
2048
+ /**
2049
+ * 视频画面是否可见。
2050
+ */
2051
+ private videoVisible;
1606
2052
  /**
1607
2053
  * 首帧实际提交显示时调用(一次性;换轨后重新武装)。
1608
2054
  */
@@ -1611,21 +2057,30 @@ declare class XmaxVideoView {
1611
2057
  * 渲染状态
1612
2058
  */
1613
2059
  private currentTrack?;
2060
+ /**
2061
+ * 画面在视口中的缩放与裁剪方式。
2062
+ */
1614
2063
  private contentMode;
2064
+ /**
2065
+ * 是否对显示画面应用水平镜像。
2066
+ */
1615
2067
  private mirrored;
1616
2068
  /**
1617
2069
  * 首帧显示通知与异步回调版本
1618
2070
  */
1619
2071
  private hasNotifiedFrameDisplay;
2072
+ /**
2073
+ * 视频开始播放时尝试通知首帧就绪。
2074
+ */
1620
2075
  private onPlaying?;
2076
+ /**
2077
+ * 首帧观察回调的取消句柄。
2078
+ */
1621
2079
  private videoFrameCallbackID?;
1622
- private frameNotificationSequence;
1623
2080
  /**
1624
- * 远端插帧配置与渲染资源
2081
+ * 首帧通知版本,避免旧流回调影响新流。
1625
2082
  */
1626
- private interpolationOptions?;
1627
- private interpolationPipeline?;
1628
- private interpolationCanvas?;
2083
+ private frameNotificationSequence;
1629
2084
  /**
1630
2085
  * 呈现统计组件
1631
2086
  */
@@ -1642,17 +2097,46 @@ declare class XmaxVideoView {
1642
2097
  * 轨迹交互配置与懒加载视图
1643
2098
  */
1644
2099
  private interactionEnabled;
2100
+ /**
2101
+ * 接入方提供的轨迹视觉效果实现。
2102
+ */
1645
2103
  private customTrajectoryRenderer?;
2104
+ /**
2105
+ * 视口触点采样与轨迹效果覆盖层。
2106
+ */
1646
2107
  private trajectoryOverlay?;
1647
2108
  /**
1648
2109
  * 创建单轨视频视图。
1649
2110
  *
1650
2111
  * @param options.videoContentMode 视频内容显示模式,默认 fill。
2112
+ * @param options.isInteractionEnabled 是否允许远端轨迹交互,默认 true。
2113
+ * @param options.fadeInDurationMs 远端画面预热完成后的渐入时长,单位为毫秒,默认 300;0 表示直接显示,不跳过预热。
2114
+ * @throws 渐入时长为负数或非有限数值时抛出 invalidConfiguration。
1651
2115
  */
1652
2116
  constructor(options?: {
1653
2117
  videoContentMode?: VideoContentMode;
1654
2118
  isInteractionEnabled?: boolean;
2119
+ /**
2120
+ * 远端画面的渐入时长,单位为毫秒,默认 300;0 表示预热完成后直接显示。
2121
+ */
2122
+ fadeInDurationMs?: number;
1655
2123
  });
2124
+ /**
2125
+ * 远端画面预热完成后的渐入时长,单位为毫秒。
2126
+ */
2127
+ get fadeInDurationMs(): number;
2128
+ /**
2129
+ * 更新下一次渐入时长,0 表示直接显示,不跳过渲染预热。
2130
+ */
2131
+ set fadeInDurationMs(durationMs: number);
2132
+ /**
2133
+ * 是否显示视频画面,默认 true;隐藏时保留播放、解码和触控轨迹。
2134
+ */
2135
+ get isVideoVisible(): boolean;
2136
+ /**
2137
+ * 即时切换视频的显隐,不改变触控配置或媒体流。
2138
+ */
2139
+ set isVideoVisible(visible: boolean);
1656
2140
  /**
1657
2141
  * 是否允许远端轨迹交互;本地轨道没有交互绑定,不受此开关影响。
1658
2142
  */
@@ -1690,7 +2174,7 @@ declare class XmaxVideoView {
1690
2174
  */
1691
2175
  get videoContentMode(): VideoContentMode;
1692
2176
  /**
1693
- * 更新视频及插帧画布的内容缩放方式;相同配置不重复应用。
2177
+ * 更新视频的内容缩放方式;相同配置不重复应用。
1694
2178
  */
1695
2179
  set videoContentMode(mode: VideoContentMode);
1696
2180
  /**
@@ -1709,10 +2193,6 @@ declare class XmaxVideoView {
1709
2193
  * 从容器元素移除。
1710
2194
  */
1711
2195
  detach(): void;
1712
- /**
1713
- * 设置网络视频预览;静音播放一次,不捕获或发布媒体轨道。 @internal
1714
- */
1715
- setVideoURL(url: string | null): void;
1716
2196
  /**
1717
2197
  * 直接设置渲染用的媒体流(绑定管线和直接渲染共用)。 @internal
1718
2198
  */
@@ -1721,18 +2201,6 @@ declare class XmaxVideoView {
1721
2201
  * 新生成任务重新等待首帧和预热,不替换正在播放的媒体流。 @internal
1722
2202
  */
1723
2203
  prepareForGeneration(): void;
1724
- /**
1725
- * 由远端绑定注入配置;本地预览不走此管线。 @internal
1726
- */
1727
- setFrameInterpolation(options?: RemoteFrameInterpolationOptions): void;
1728
- /**
1729
- * 视图已挂载且媒体与配置就绪时创建插帧画布和管线,避免重复启动。
1730
- */
1731
- private startInterpolation;
1732
- /**
1733
- * 停止并释放插帧管线,移除辅助画布,保留原始视频元素。
1734
- */
1735
- private stopInterpolation;
1736
2204
  /**
1737
2205
  * 接入轨道画面:优先走注册的渲染绑定,否则按媒体轨直接渲染。
1738
2206
  */
@@ -1772,15 +2240,12 @@ declare class XmaxVideoView {
1772
2240
  }
1773
2241
 
1774
2242
  /**
1775
- * 在本地预览和远端生成画面之间自动切换的视频容器(框架无关)。
2243
+ * 双轨视频容器:在本地预览和远端生成画面之间自动切换(框架无关)。
1776
2244
  *
1777
2245
  * 设置 SDK 远端轨道后,等待首帧及渲染预热结束再渐入远端画面;
1778
2246
  * 远端轨道置空时立即恢复本地预览。
1779
2247
  */
1780
- declare class XmaxRealtimeVideoView {
1781
- /**
1782
- * 视图元素
1783
- */
2248
+ declare class XmaxRealtimeDualVideoView {
1784
2249
  /**
1785
2250
  * 视图根元素。
1786
2251
  */
@@ -1789,26 +2254,49 @@ declare class XmaxRealtimeVideoView {
1789
2254
  * 视频视图
1790
2255
  */
1791
2256
  private readonly localVideoView;
2257
+ /**
2258
+ * 展示生成结果流的远端视频视图。
2259
+ */
1792
2260
  private readonly remoteVideoView;
1793
2261
  /**
1794
2262
  * 公共配置
1795
2263
  */
1796
2264
  private currentLocalTrack?;
2265
+ /**
2266
+ * 当前绑定的远端视频轨。
2267
+ */
1797
2268
  private currentRemoteTrack?;
2269
+ /**
2270
+ * 画面在视口中的缩放与裁剪方式。
2271
+ */
1798
2272
  private contentMode;
2273
+ /**
2274
+ * 远端画面渐入时长,单位为秒。
2275
+ */
2276
+ private fadeInDuration;
1799
2277
  /**
1800
2278
  * 创建实时视频容器。
1801
2279
  *
1802
2280
  * @param options.localTrack 需要持续预览的本地视频轨道。
1803
2281
  * @param options.remoteTrack 需要覆盖显示的远端生成视频轨道。
1804
2282
  * @param options.videoContentMode 本地与远端视频的内容显示模式,默认 fill。
2283
+ * @param options.remoteVideoFadeInDuration 远端渐入时长,单位为秒,默认 0.3;非正数或非有限值关闭动画。
1805
2284
  */
1806
2285
  constructor(options?: {
1807
2286
  localTrack?: RealtimeVideoTrack;
1808
2287
  remoteTrack?: RealtimeVideoTrack;
1809
2288
  videoContentMode?: VideoContentMode;
2289
+ remoteVideoFadeInDuration?: number;
1810
2290
  isInteractionEnabled?: boolean;
1811
2291
  });
2292
+ /**
2293
+ * 远端画面的渐入时长,单位为秒,默认 0.3。
2294
+ */
2295
+ get remoteVideoFadeInDuration(): number;
2296
+ /**
2297
+ * 配置下一次渐入;非正数或非有限值关闭动画,不跳过首帧等待及渲染预热。
2298
+ */
2299
+ set remoteVideoFadeInDuration(duration: number);
1812
2300
  /**
1813
2301
  * 当前显示的本地视频轨道。
1814
2302
  */
@@ -1876,4 +2364,90 @@ declare class XmaxRealtimeVideoView {
1876
2364
  private showRemoteVideo;
1877
2365
  }
1878
2366
 
1879
- export { CameraPosition, type CameraRotation, type JsonValue, MediaService, type MediaServicing, type NetworkQualityLevel, type NetworkStatistics, type NetworkStatisticsListener, NonRealtimeQuality, type NonRealtimeResult, type NonRealtimeTask, NonRealtimeTaskError, type NonRealtimeTaskListOptions, type NonRealtimeTaskOptions, type NonRealtimeTaskPage, NonRealtimeTaskStatus, type NonRealtimeWaitOptions, RealtimeConfiguration, RealtimeConnectionState, RealtimeContext, type RealtimeContextInit, type RealtimeExtraParams, type RealtimeLaunchTiming, type RealtimeLaunchTimingListener, RealtimeMediaStream, RealtimeModel, type RealtimeModelName, RealtimeReason, type RealtimeRecordingEvent, RealtimeRecordingEventType, RealtimeRecordingFinishReason, type RealtimeRecordingListener, type RealtimeRecordingResult, type RealtimeReferenceVideo, RealtimeState, type RealtimeStateListener, RealtimeVideoFormat, RealtimeVideoSampleMethod, RealtimeVideoTrack, type RemoteVideoStatistics, type RemoteVideoStatisticsListener, RtcProvider, StorageService, type StorageServicing, type StorageUploadOptions, StoredFile, TrajectoryEffectRendering, VideoContentMode, VideoRenderStatistics, type VideoStatistics, type VideoStatisticsListener, XmaxClient, XmaxConfiguration, type XmaxConfigurationInit, XmaxEnvironment, XmaxError, XmaxErrorCode, type XmaxErrorListener, XmaxLogger, XmaxLoggerOption, type XmaxNonRealtimeManaging, type XmaxRealtimeManaging, XmaxRealtimeVideoView, XmaxVideoView, apiBaseURL, defaultCameraVideoFormat, defaultFrameRate, modelDisplayName, supportedRtcProviders };
2367
+ /**
2368
+ * 绿色发光尾迹与触点装饰;仅负责绘制,不参与采样或信令发送。
2369
+ */
2370
+ declare class DefaultTrajectoryEffectRenderer implements TrajectoryEffectRendering {
2371
+ /**
2372
+ * 画布与动画资源;尾迹保留像素渐隐,触点装饰每帧重绘。
2373
+ */
2374
+ readonly element: HTMLDivElement;
2375
+ /**
2376
+ * 绘制轨迹线条的画布。
2377
+ */
2378
+ private readonly trailCanvas;
2379
+ /**
2380
+ * 绘制触点光圈的画布。
2381
+ */
2382
+ private readonly effectCanvas;
2383
+ /**
2384
+ * 下一次动画刷新任务的句柄。
2385
+ */
2386
+ private animation?;
2387
+ /**
2388
+ * 轨迹画布中是否仍有待淡出的像素。
2389
+ */
2390
+ private hasTrailPixels;
2391
+ /**
2392
+ * 无活动触点后已经执行的淡出帧数。
2393
+ */
2394
+ private idleFadeFrames;
2395
+ /**
2396
+ * 活动触点和等待下一帧绘制的线段。
2397
+ */
2398
+ private readonly pointers;
2399
+ /**
2400
+ * 等待绘制的轨迹线段。
2401
+ */
2402
+ private readonly segments;
2403
+ /**
2404
+ * 安装独立视觉图层,不注册指针事件。
2405
+ */
2406
+ constructor();
2407
+ /**
2408
+ * 开始触点装饰,脉冲动画以本次按下时间为起点。
2409
+ */
2410
+ renderBegan(points: readonly TrajectoryPoint[]): void;
2411
+ /**
2412
+ * 只绘制新线段,旧像素自然衰减,不反复加亮整条历史轨迹。
2413
+ */
2414
+ renderMoved(points: readonly TrajectoryPoint[]): void;
2415
+ /**
2416
+ * 释放触点后移除装饰,仅保留尾迹的渐隐动画。
2417
+ */
2418
+ renderEnded(identifiers: readonly TrajectoryID[]): void;
2419
+ /**
2420
+ * 清除画面、待绘制数据及动画,允许同一 Renderer 再次挂载。
2421
+ */
2422
+ reset(): void;
2423
+ /**
2424
+ * 仅在触点、待绘制线段或残留尾迹存在时申请下一帧。
2425
+ */
2426
+ private schedule;
2427
+ /**
2428
+ * 同步画布分辨率,分别更新尾迹和触点视觉图层。
2429
+ */
2430
+ private draw;
2431
+ /**
2432
+ * 叠加绿色外晕、中层和白色线芯;多指时省略阴影降低绘制开销。
2433
+ */
2434
+ private drawSegments;
2435
+ /**
2436
+ * 绘制触点周围两层不同相位的脉冲圆环。
2437
+ */
2438
+ private drawRings;
2439
+ /**
2440
+ * 绘制四个反向交错运动的柔和环绕粒子。
2441
+ */
2442
+ private drawParticles;
2443
+ /**
2444
+ * 绘制径向绿色光晕,触点核心增加中间色阶。
2445
+ */
2446
+ private drawGlow;
2447
+ /**
2448
+ * 统一轨迹主题色,透明度由各视觉层指定。
2449
+ */
2450
+ private green;
2451
+ }
2452
+
2453
+ export { CameraPosition, type CameraRotation, DefaultTrajectoryEffectRenderer, type DownlinkVideoStatistics, type DownlinkVideoStatisticsListener, type JsonValue, MediaService, type MediaServicing, NonRealtimeQuality, type NonRealtimeResult, type NonRealtimeTask, NonRealtimeTaskError, type NonRealtimeTaskListOptions, type NonRealtimeTaskOptions, type NonRealtimeTaskPage, NonRealtimeTaskStatus, type NonRealtimeWaitOptions, type RealtimeAudioFrame, RealtimeCameraPreset, RealtimeConfiguration, RealtimeConnectionState, RealtimeContext, type RealtimeContextInit, type RealtimeExternalAudioFrame, type RealtimeExternalFrameSink, type RealtimeExternalVideoSource, type RealtimeExternalVideoStreamOptions, type RealtimeExtraParams, type RealtimeMediaFrame, type RealtimeMediaFrameListener, RealtimeMediaStream, RealtimeModel, type RealtimeModelName, type RealtimeNetworkQuality, RealtimeNetworkQualityLevel, type RealtimeNetworkQualityListener, RealtimeQualityLevel, RealtimeReason, RealtimeState, type RealtimeStateListener, type RealtimeTiming, type RealtimeTimingListener, RealtimeVideoFormat, type RealtimeVideoFrame, RealtimeVideoTrack, type RemoteMediaTracks, RtcProvider, StorageService, type StorageServicing, type StorageUploadOptions, StoredFile, TrajectoryEffectRendering, TrajectoryID, TrajectoryPoint, type UplinkVideoStatistics, type UplinkVideoStatisticsListener, VideoContentMode, VideoRenderStatistics, XmaxClient, XmaxConfiguration, type XmaxConfigurationInit, XmaxEnvironment, XmaxError, XmaxErrorCode, type XmaxErrorListener, XmaxLogger, XmaxLoggerOption, type XmaxNonRealtimeManaging, XmaxRealtimeDualVideoView, type XmaxRealtimeManaging, XmaxRealtimeVideoView, apiBaseURL, cameraPresetSize, defaultCameraVideoFormat, defaultFrameRate, modelDisplayName, realtimeApiBaseURL, supportedRtcProviders, supportedVideoFormats };