@xmaxai/web-sdk 1.0.9 → 1.0.10

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.cjs CHANGED
@@ -35,7 +35,7 @@
35
35
 
36
36
 
37
37
 
38
- var _chunkKROY2O4Acjs = require('./chunk-KROY2O4A.cjs');
38
+ var _chunkUF2RD42Gcjs = require('./chunk-UF2RD42G.cjs');
39
39
  require('./chunk-4DE2IREA.cjs');
40
40
 
41
41
 
@@ -74,5 +74,5 @@ require('./chunk-4DE2IREA.cjs');
74
74
 
75
75
 
76
76
 
77
- exports.CameraPosition = _chunkKROY2O4Acjs.CameraPosition; exports.MediaService = _chunkKROY2O4Acjs.MediaService; exports.NonRealtimeQuality = _chunkKROY2O4Acjs.NonRealtimeQuality; exports.NonRealtimeTaskError = _chunkKROY2O4Acjs.NonRealtimeTaskError; exports.NonRealtimeTaskStatus = _chunkKROY2O4Acjs.NonRealtimeTaskStatus; exports.RealtimeConfiguration = _chunkKROY2O4Acjs.RealtimeConfiguration; exports.RealtimeConnectionState = _chunkKROY2O4Acjs.RealtimeConnectionState; exports.RealtimeContext = _chunkKROY2O4Acjs.RealtimeContext; exports.RealtimeMediaStream = _chunkKROY2O4Acjs.RealtimeMediaStream; exports.RealtimeModel = _chunkKROY2O4Acjs.RealtimeModel; exports.RealtimeReason = _chunkKROY2O4Acjs.RealtimeReason; exports.RealtimeRecordingEventType = _chunkKROY2O4Acjs.RealtimeRecordingEventType; exports.RealtimeRecordingFinishReason = _chunkKROY2O4Acjs.RealtimeRecordingFinishReason; exports.RealtimeState = _chunkKROY2O4Acjs.RealtimeState; exports.RealtimeVideoEncoderPreference = _chunkKROY2O4Acjs.RealtimeVideoEncoderPreference; exports.RealtimeVideoFormat = _chunkKROY2O4Acjs.RealtimeVideoFormat; exports.RealtimeVideoSampleMethod = _chunkKROY2O4Acjs.RealtimeVideoSampleMethod; exports.RealtimeVideoTrack = _chunkKROY2O4Acjs.RealtimeVideoTrack; exports.RtcProvider = _chunkKROY2O4Acjs.RtcProvider; exports.StorageService = _chunkKROY2O4Acjs.StorageService; exports.StoredFile = _chunkKROY2O4Acjs.StoredFile; exports.VideoContentMode = _chunkKROY2O4Acjs.VideoContentMode; exports.XmaxClient = _chunkKROY2O4Acjs.XmaxClient; exports.XmaxConfiguration = _chunkKROY2O4Acjs.XmaxConfiguration; exports.XmaxEnvironment = _chunkKROY2O4Acjs.XmaxEnvironment; exports.XmaxError = _chunkKROY2O4Acjs.XmaxError; exports.XmaxErrorCode = _chunkKROY2O4Acjs.XmaxErrorCode; exports.XmaxLogger = _chunkKROY2O4Acjs.XmaxLogger; exports.XmaxLoggerOption = _chunkKROY2O4Acjs.XmaxLoggerOption; exports.XmaxRealtimeVideoView = _chunkKROY2O4Acjs.XmaxRealtimeVideoView; exports.XmaxVideoView = _chunkKROY2O4Acjs.XmaxVideoView; exports.apiBaseURL = _chunkKROY2O4Acjs.apiBaseURL; exports.defaultCameraVideoFormat = _chunkKROY2O4Acjs.defaultCameraVideoFormat; exports.defaultFrameRate = _chunkKROY2O4Acjs.defaultFrameRate; exports.modelDisplayName = _chunkKROY2O4Acjs.modelDisplayName; exports.supportedRtcProviders = _chunkKROY2O4Acjs.supportedRtcProviders;
77
+ exports.CameraPosition = _chunkUF2RD42Gcjs.CameraPosition; exports.MediaService = _chunkUF2RD42Gcjs.MediaService; exports.NonRealtimeQuality = _chunkUF2RD42Gcjs.NonRealtimeQuality; exports.NonRealtimeTaskError = _chunkUF2RD42Gcjs.NonRealtimeTaskError; exports.NonRealtimeTaskStatus = _chunkUF2RD42Gcjs.NonRealtimeTaskStatus; exports.RealtimeConfiguration = _chunkUF2RD42Gcjs.RealtimeConfiguration; exports.RealtimeConnectionState = _chunkUF2RD42Gcjs.RealtimeConnectionState; exports.RealtimeContext = _chunkUF2RD42Gcjs.RealtimeContext; exports.RealtimeMediaStream = _chunkUF2RD42Gcjs.RealtimeMediaStream; exports.RealtimeModel = _chunkUF2RD42Gcjs.RealtimeModel; exports.RealtimeReason = _chunkUF2RD42Gcjs.RealtimeReason; exports.RealtimeRecordingEventType = _chunkUF2RD42Gcjs.RealtimeRecordingEventType; exports.RealtimeRecordingFinishReason = _chunkUF2RD42Gcjs.RealtimeRecordingFinishReason; exports.RealtimeState = _chunkUF2RD42Gcjs.RealtimeState; exports.RealtimeVideoEncoderPreference = _chunkUF2RD42Gcjs.RealtimeVideoEncoderPreference; exports.RealtimeVideoFormat = _chunkUF2RD42Gcjs.RealtimeVideoFormat; exports.RealtimeVideoSampleMethod = _chunkUF2RD42Gcjs.RealtimeVideoSampleMethod; exports.RealtimeVideoTrack = _chunkUF2RD42Gcjs.RealtimeVideoTrack; exports.RtcProvider = _chunkUF2RD42Gcjs.RtcProvider; exports.StorageService = _chunkUF2RD42Gcjs.StorageService; exports.StoredFile = _chunkUF2RD42Gcjs.StoredFile; exports.VideoContentMode = _chunkUF2RD42Gcjs.VideoContentMode; exports.XmaxClient = _chunkUF2RD42Gcjs.XmaxClient; exports.XmaxConfiguration = _chunkUF2RD42Gcjs.XmaxConfiguration; exports.XmaxEnvironment = _chunkUF2RD42Gcjs.XmaxEnvironment; exports.XmaxError = _chunkUF2RD42Gcjs.XmaxError; exports.XmaxErrorCode = _chunkUF2RD42Gcjs.XmaxErrorCode; exports.XmaxLogger = _chunkUF2RD42Gcjs.XmaxLogger; exports.XmaxLoggerOption = _chunkUF2RD42Gcjs.XmaxLoggerOption; exports.XmaxRealtimeVideoView = _chunkUF2RD42Gcjs.XmaxRealtimeVideoView; exports.XmaxVideoView = _chunkUF2RD42Gcjs.XmaxVideoView; exports.apiBaseURL = _chunkUF2RD42Gcjs.apiBaseURL; exports.defaultCameraVideoFormat = _chunkUF2RD42Gcjs.defaultCameraVideoFormat; exports.defaultFrameRate = _chunkUF2RD42Gcjs.defaultFrameRate; exports.modelDisplayName = _chunkUF2RD42Gcjs.modelDisplayName; exports.supportedRtcProviders = _chunkUF2RD42Gcjs.supportedRtcProviders;
78
78
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/private/var/folders/5j/p3g3j18x2w3byrl5wtnk94tc0000gn/T/xmax-web-release-Zggzaq/source/packages/xmax-sdk/dist/index.cjs"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,myEAAC","file":"/private/var/folders/5j/p3g3j18x2w3byrl5wtnk94tc0000gn/T/xmax-web-release-Zggzaq/source/packages/xmax-sdk/dist/index.cjs"}
1
+ {"version":3,"sources":["/private/var/folders/5j/p3g3j18x2w3byrl5wtnk94tc0000gn/T/xmax-web-release-ox16QE/source/packages/xmax-sdk/dist/index.cjs"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,myEAAC","file":"/private/var/folders/5j/p3g3j18x2w3byrl5wtnk94tc0000gn/T/xmax-web-release-ox16QE/source/packages/xmax-sdk/dist/index.cjs"}
package/dist/index.d.cts 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-C7E2KJbV.cjs';
2
- export { c as RealtimeVideoEncoderPreference, d as RealtimeVideoFormatInit, e as TrajectoryID, f as TrajectoryPoint } from './TrajectoryEffectRendering-C7E2KJbV.cjs';
1
+ import { R as RealtimeVideoFormat, a as RealtimeVideoTrack, C as CameraPosition, V as VideoContentMode, T as TrajectoryEffectRendering, b as VideoRenderStatistics } from './TrajectoryEffectRendering-BKKPO7Uk.cjs';
2
+ export { c as RealtimeVideoEncoderPreference, d as RealtimeVideoFormatInit, e as TrajectoryID, f as TrajectoryPoint } from './TrajectoryEffectRendering-BKKPO7Uk.cjs';
3
3
 
4
4
  /**
5
5
  * 实时媒体使用的 RTC 提供方;一个 Manager 生命周期内保持不变。
@@ -23,10 +23,6 @@ declare enum RtcProvider {
23
23
  * SDK 当前支持的实时生成模型。
24
24
  */
25
25
  declare enum RealtimeModel {
26
- x2_0 = "x2.0",
27
- x2_0_trtc = "x2.0-trtc",
28
- x2_1_preview = "x2.1-preview",
29
- x2_1_preview_1014 = "x2.1-preview-1014",
30
26
  x2_1_1_preview_cn = "x2.1.1-preview-cn",
31
27
  x2_1_1_preview_us = "x2.1.1-preview-us"
32
28
  }
@@ -53,7 +49,7 @@ declare function defaultFrameRate(_model: RealtimeModelName): number;
53
49
  declare function defaultCameraVideoFormat(model: RealtimeModelName): RealtimeVideoFormat;
54
50
  /**
55
51
  * 查询 SDK 允许配置的 RTC 提供方,第一项为默认值。
56
- * 未知模型默认沿用 x2.1-preview 的 Agora,也允许显式选择其他已接入的 RTC;
52
+ * 未知模型默认沿用 x2.1.1-preview-cn 的 Agora,也允许显式选择其他已接入的 RTC;
57
53
  * 是否被该模型的服务端支持,由服务端决定。
58
54
  */
59
55
  declare function supportedRtcProviders(model: RealtimeModelName): readonly RtcProvider[];
@@ -193,7 +189,7 @@ declare class RealtimeConfiguration {
193
189
  /**
194
190
  * 创建实时业务配置。
195
191
  *
196
- * @param init.model 实时生成业务使用的模型;未知名称原样透传,默认配置同 x2.1-preview。
192
+ * @param init.model 实时生成业务使用的模型;未知名称原样透传,默认配置同 x2.1.1-preview-cn。
197
193
  * @param init.provider RTC 提供方,默认按模型定义选择;必须受模型支持,创建后不可切换。
198
194
  * @param init.isFrameInterpolationEnabled 是否默认开启远端生成画面的插帧,默认 false。
199
195
  */
@@ -520,7 +516,12 @@ declare enum RealtimeConnectionState {
520
516
  */
521
517
  connected = "Connected",
522
518
  /**
523
- * 实时连接已建立且生成任务正在运行。
519
+ * 正在启动生成或等待 SDK 视频视图完成首帧及渲染预热。
520
+ * startGeneration 返回远端流后仍可能保持此状态,接入方需挂载视频视图。
521
+ */
522
+ starting = "Starting",
523
+ /**
524
+ * 生成任务正在运行,SDK 视频视图已完成渲染预热并开始展示画面。
524
525
  */
525
526
  generating = "Generating",
526
527
  /**
@@ -619,19 +620,27 @@ interface RealtimeLaunchTiming {
619
620
  */
620
621
  readonly permissionMs?: number;
621
622
  /**
622
- * 开始创建会话到 RTC 进房配置与相机预热等待完成;不含发布本地流。
623
+ * 创建业务会话的耗时。
624
+ */
625
+ readonly sessionMs?: number;
626
+ /**
627
+ * RTC 适配器进房调用的耗时,不含房间消息配置、心跳启动、预热等待和本地流发布。
623
628
  */
624
- readonly connectionMs?: number;
629
+ readonly rtcJoinMs?: number;
625
630
  /**
626
631
  * 发布本地流到 RTC 房间的耗时。
627
632
  */
628
633
  readonly publishMs?: number;
629
634
  /**
630
- * 开始发送生成信令到 SDK 远端视图首次呈现视频帧。
635
+ * 开始发送生成信令到远端视频首帧提交合成器,不包含渲染预热。
631
636
  */
632
637
  readonly firstFrameMs?: number;
633
638
  /**
634
- * 开始打开摄像头到 SDK 远端视图首次呈现视频帧的实际总耗时,并非各项之和。
639
+ * 远端首帧就绪到渲染预热结束的实际等待时间,不含渐入动画。
640
+ */
641
+ readonly renderWarmupMs?: number;
642
+ /**
643
+ * 开始打开摄像头到远端渲染预热结束、开始渐入的实际总耗时,并非各项之和。
635
644
  */
636
645
  readonly totalMs?: number;
637
646
  }
@@ -916,6 +925,7 @@ interface XmaxRealtimeManaging {
916
925
  *
917
926
  * 尚未连接时先建立实时连接;已在生成时默认更新条件,restart 为 true 时重新开始生成。
918
927
  * 首次生成必须提供条件上下文,之后缺省时复用最近一次缓存的上下文。
928
+ * 返回后请将远端流挂载到 SDK 视频视图;首帧及渲染预热完成后状态才进入 generating。
919
929
  *
920
930
  * @param options.localStream 由当前 Manager 创建的摄像头、外部视频轨、本地文件或网络视频源。
921
931
  * @param options.context 本次生成使用的条件上下文;缺省时复用缓存。
@@ -923,7 +933,7 @@ interface XmaxRealtimeManaging {
923
933
  * @param options.faceRestoration 是否启用原始人脸回贴,默认 false;正在生成时通过 change_condition 更新。
924
934
  * @param options.extraParams 合并到本次 start 或 change_condition 的 params;不缓存,自动恢复时不携带,不允许覆盖 SDK 字段。
925
935
  * @param options.record 是否录制远端原始音视频约 20 秒,默认 false;仅 start 有效,条件更新时忽略,重启录制暂不支持。
926
- * @returns 承载远端生成画面的媒体流。
936
+ * @returns 可挂载的远端媒体流,不等待渲染预热;展示就绪以 generating 状态为准。
927
937
  * @throws extraParams 包含非 JSON 数据、循环引用或 SDK 保留字段时,在连接或更新前抛出 invalidConfiguration。
928
938
  * @throws 本地流不属于当前 Manager、缺少可用的条件上下文、信令发送
929
939
  * 或生成确认失败时抛出错误;失败时自动停止生成任务并释放连接资源。
@@ -1294,7 +1304,7 @@ declare class XmaxClient {
1294
1304
  /**
1295
1305
  * 创建媒体处理与能力查询 Service。
1296
1306
  *
1297
- * @param model 媒体输入规则使用的模型,默认为 `x2.0-trtc`。
1307
+ * @param model 媒体输入规则使用的模型,默认为 `x2.1.1-preview-cn`。
1298
1308
  */
1299
1309
  createMediaService(model?: RealtimeModelName): MediaServicing;
1300
1310
  /**
@@ -1331,7 +1341,7 @@ declare class MediaService implements MediaServicing {
1331
1341
  /**
1332
1342
  * 创建媒体服务。
1333
1343
  *
1334
- * @param model 媒体输入规则使用的模型,默认为 `x2.0-trtc`。
1344
+ * @param model 媒体输入规则使用的模型,默认为 `x2.1.1-preview-cn`。
1335
1345
  */
1336
1346
  constructor(model?: RealtimeModelName);
1337
1347
  /**
@@ -1576,6 +1586,7 @@ interface RemoteFrameInterpolationOptions {
1576
1586
  *
1577
1587
  * 通过 `attach(to:)` 挂载到任意容器元素;设置 `track` 后自动渲染。
1578
1588
  * 轨道注册了渲染绑定时走绑定管线,否则按 `mediaStreamTrack` 直接渲染。
1589
+ * SDK 远端轨道在首帧后预热 1000 ms,再用 300 ms 渐入;本地预览不延迟。
1579
1590
  */
1580
1591
  declare class XmaxVideoView {
1581
1592
  /**
@@ -1619,6 +1630,10 @@ declare class XmaxVideoView {
1619
1630
  * 呈现统计组件
1620
1631
  */
1621
1632
  private readonly statisticsController;
1633
+ /**
1634
+ * 远端画面预热与渐入组件
1635
+ */
1636
+ private readonly warmupController;
1622
1637
  /**
1623
1638
  * DOM 挂载状态
1624
1639
  */
@@ -1702,6 +1717,10 @@ declare class XmaxVideoView {
1702
1717
  * 直接设置渲染用的媒体流(绑定管线和直接渲染共用)。 @internal
1703
1718
  */
1704
1719
  setMediaStream(stream: MediaStream | null): void;
1720
+ /**
1721
+ * 新生成任务重新等待首帧和预热,不替换正在播放的媒体流。 @internal
1722
+ */
1723
+ prepareForGeneration(): void;
1705
1724
  /**
1706
1725
  * 由远端绑定注入配置;本地预览不走此管线。 @internal
1707
1726
  */
@@ -1730,6 +1749,10 @@ declare class XmaxVideoView {
1730
1749
  * 换流、解绑或卸载时取消观察,防止迟到的首帧归入下一条流。
1731
1750
  */
1732
1751
  private cancelFrameDisplayNotification;
1752
+ /**
1753
+ * 仅远端渲染绑定启用预热,本地预览和普通媒体直接显示。
1754
+ */
1755
+ private prepareRenderWarmup;
1733
1756
  /**
1734
1757
  * 应用显示模式与镜像样式。
1735
1758
  */
@@ -1751,7 +1774,7 @@ declare class XmaxVideoView {
1751
1774
  /**
1752
1775
  * 在本地预览和远端生成画面之间自动切换的视频容器(框架无关)。
1753
1776
  *
1754
- * 设置远端轨道后,容器等待首帧实际提交显示再渐入远端画面;
1777
+ * 设置 SDK 远端轨道后,等待首帧及渲染预热结束再渐入远端画面;
1755
1778
  * 远端轨道置空时立即恢复本地预览。
1756
1779
  */
1757
1780
  declare class XmaxRealtimeVideoView {
@@ -1812,7 +1835,7 @@ declare class XmaxRealtimeVideoView {
1812
1835
  set localTrack(track: RealtimeVideoTrack | undefined);
1813
1836
  /**
1814
1837
  * 当前显示的远端生成视频轨道。
1815
- * 设置新轨道后等待首帧提交显示再渐入;置空时立即恢复本地预览。
1838
+ * SDK 远端轨道等待首帧及预热后渐入;置空时立即恢复本地预览。
1816
1839
  */
1817
1840
  get remoteTrack(): RealtimeVideoTrack | undefined;
1818
1841
  /**
@@ -1844,7 +1867,7 @@ declare class XmaxRealtimeVideoView {
1844
1867
  */
1845
1868
  detach(): void;
1846
1869
  /**
1847
- * 更新远端轨道绑定:重置渐入状态,等待首帧提交后再显示远端画面。
1870
+ * 更新远端轨道绑定;SDK 轨道共用单轨视图的预热,普通轨道等待首帧后渐入。
1848
1871
  */
1849
1872
  private updateRemoteTrack;
1850
1873
  /**
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-C7E2KJbV.js';
2
- export { c as RealtimeVideoEncoderPreference, d as RealtimeVideoFormatInit, e as TrajectoryID, f as TrajectoryPoint } from './TrajectoryEffectRendering-C7E2KJbV.js';
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';
3
3
 
4
4
  /**
5
5
  * 实时媒体使用的 RTC 提供方;一个 Manager 生命周期内保持不变。
@@ -23,10 +23,6 @@ declare enum RtcProvider {
23
23
  * SDK 当前支持的实时生成模型。
24
24
  */
25
25
  declare enum RealtimeModel {
26
- x2_0 = "x2.0",
27
- x2_0_trtc = "x2.0-trtc",
28
- x2_1_preview = "x2.1-preview",
29
- x2_1_preview_1014 = "x2.1-preview-1014",
30
26
  x2_1_1_preview_cn = "x2.1.1-preview-cn",
31
27
  x2_1_1_preview_us = "x2.1.1-preview-us"
32
28
  }
@@ -53,7 +49,7 @@ declare function defaultFrameRate(_model: RealtimeModelName): number;
53
49
  declare function defaultCameraVideoFormat(model: RealtimeModelName): RealtimeVideoFormat;
54
50
  /**
55
51
  * 查询 SDK 允许配置的 RTC 提供方,第一项为默认值。
56
- * 未知模型默认沿用 x2.1-preview 的 Agora,也允许显式选择其他已接入的 RTC;
52
+ * 未知模型默认沿用 x2.1.1-preview-cn 的 Agora,也允许显式选择其他已接入的 RTC;
57
53
  * 是否被该模型的服务端支持,由服务端决定。
58
54
  */
59
55
  declare function supportedRtcProviders(model: RealtimeModelName): readonly RtcProvider[];
@@ -193,7 +189,7 @@ declare class RealtimeConfiguration {
193
189
  /**
194
190
  * 创建实时业务配置。
195
191
  *
196
- * @param init.model 实时生成业务使用的模型;未知名称原样透传,默认配置同 x2.1-preview。
192
+ * @param init.model 实时生成业务使用的模型;未知名称原样透传,默认配置同 x2.1.1-preview-cn。
197
193
  * @param init.provider RTC 提供方,默认按模型定义选择;必须受模型支持,创建后不可切换。
198
194
  * @param init.isFrameInterpolationEnabled 是否默认开启远端生成画面的插帧,默认 false。
199
195
  */
@@ -520,7 +516,12 @@ declare enum RealtimeConnectionState {
520
516
  */
521
517
  connected = "Connected",
522
518
  /**
523
- * 实时连接已建立且生成任务正在运行。
519
+ * 正在启动生成或等待 SDK 视频视图完成首帧及渲染预热。
520
+ * startGeneration 返回远端流后仍可能保持此状态,接入方需挂载视频视图。
521
+ */
522
+ starting = "Starting",
523
+ /**
524
+ * 生成任务正在运行,SDK 视频视图已完成渲染预热并开始展示画面。
524
525
  */
525
526
  generating = "Generating",
526
527
  /**
@@ -619,19 +620,27 @@ interface RealtimeLaunchTiming {
619
620
  */
620
621
  readonly permissionMs?: number;
621
622
  /**
622
- * 开始创建会话到 RTC 进房配置与相机预热等待完成;不含发布本地流。
623
+ * 创建业务会话的耗时。
624
+ */
625
+ readonly sessionMs?: number;
626
+ /**
627
+ * RTC 适配器进房调用的耗时,不含房间消息配置、心跳启动、预热等待和本地流发布。
623
628
  */
624
- readonly connectionMs?: number;
629
+ readonly rtcJoinMs?: number;
625
630
  /**
626
631
  * 发布本地流到 RTC 房间的耗时。
627
632
  */
628
633
  readonly publishMs?: number;
629
634
  /**
630
- * 开始发送生成信令到 SDK 远端视图首次呈现视频帧。
635
+ * 开始发送生成信令到远端视频首帧提交合成器,不包含渲染预热。
631
636
  */
632
637
  readonly firstFrameMs?: number;
633
638
  /**
634
- * 开始打开摄像头到 SDK 远端视图首次呈现视频帧的实际总耗时,并非各项之和。
639
+ * 远端首帧就绪到渲染预热结束的实际等待时间,不含渐入动画。
640
+ */
641
+ readonly renderWarmupMs?: number;
642
+ /**
643
+ * 开始打开摄像头到远端渲染预热结束、开始渐入的实际总耗时,并非各项之和。
635
644
  */
636
645
  readonly totalMs?: number;
637
646
  }
@@ -916,6 +925,7 @@ interface XmaxRealtimeManaging {
916
925
  *
917
926
  * 尚未连接时先建立实时连接;已在生成时默认更新条件,restart 为 true 时重新开始生成。
918
927
  * 首次生成必须提供条件上下文,之后缺省时复用最近一次缓存的上下文。
928
+ * 返回后请将远端流挂载到 SDK 视频视图;首帧及渲染预热完成后状态才进入 generating。
919
929
  *
920
930
  * @param options.localStream 由当前 Manager 创建的摄像头、外部视频轨、本地文件或网络视频源。
921
931
  * @param options.context 本次生成使用的条件上下文;缺省时复用缓存。
@@ -923,7 +933,7 @@ interface XmaxRealtimeManaging {
923
933
  * @param options.faceRestoration 是否启用原始人脸回贴,默认 false;正在生成时通过 change_condition 更新。
924
934
  * @param options.extraParams 合并到本次 start 或 change_condition 的 params;不缓存,自动恢复时不携带,不允许覆盖 SDK 字段。
925
935
  * @param options.record 是否录制远端原始音视频约 20 秒,默认 false;仅 start 有效,条件更新时忽略,重启录制暂不支持。
926
- * @returns 承载远端生成画面的媒体流。
936
+ * @returns 可挂载的远端媒体流,不等待渲染预热;展示就绪以 generating 状态为准。
927
937
  * @throws extraParams 包含非 JSON 数据、循环引用或 SDK 保留字段时,在连接或更新前抛出 invalidConfiguration。
928
938
  * @throws 本地流不属于当前 Manager、缺少可用的条件上下文、信令发送
929
939
  * 或生成确认失败时抛出错误;失败时自动停止生成任务并释放连接资源。
@@ -1294,7 +1304,7 @@ declare class XmaxClient {
1294
1304
  /**
1295
1305
  * 创建媒体处理与能力查询 Service。
1296
1306
  *
1297
- * @param model 媒体输入规则使用的模型,默认为 `x2.0-trtc`。
1307
+ * @param model 媒体输入规则使用的模型,默认为 `x2.1.1-preview-cn`。
1298
1308
  */
1299
1309
  createMediaService(model?: RealtimeModelName): MediaServicing;
1300
1310
  /**
@@ -1331,7 +1341,7 @@ declare class MediaService implements MediaServicing {
1331
1341
  /**
1332
1342
  * 创建媒体服务。
1333
1343
  *
1334
- * @param model 媒体输入规则使用的模型,默认为 `x2.0-trtc`。
1344
+ * @param model 媒体输入规则使用的模型,默认为 `x2.1.1-preview-cn`。
1335
1345
  */
1336
1346
  constructor(model?: RealtimeModelName);
1337
1347
  /**
@@ -1576,6 +1586,7 @@ interface RemoteFrameInterpolationOptions {
1576
1586
  *
1577
1587
  * 通过 `attach(to:)` 挂载到任意容器元素;设置 `track` 后自动渲染。
1578
1588
  * 轨道注册了渲染绑定时走绑定管线,否则按 `mediaStreamTrack` 直接渲染。
1589
+ * SDK 远端轨道在首帧后预热 1000 ms,再用 300 ms 渐入;本地预览不延迟。
1579
1590
  */
1580
1591
  declare class XmaxVideoView {
1581
1592
  /**
@@ -1619,6 +1630,10 @@ declare class XmaxVideoView {
1619
1630
  * 呈现统计组件
1620
1631
  */
1621
1632
  private readonly statisticsController;
1633
+ /**
1634
+ * 远端画面预热与渐入组件
1635
+ */
1636
+ private readonly warmupController;
1622
1637
  /**
1623
1638
  * DOM 挂载状态
1624
1639
  */
@@ -1702,6 +1717,10 @@ declare class XmaxVideoView {
1702
1717
  * 直接设置渲染用的媒体流(绑定管线和直接渲染共用)。 @internal
1703
1718
  */
1704
1719
  setMediaStream(stream: MediaStream | null): void;
1720
+ /**
1721
+ * 新生成任务重新等待首帧和预热,不替换正在播放的媒体流。 @internal
1722
+ */
1723
+ prepareForGeneration(): void;
1705
1724
  /**
1706
1725
  * 由远端绑定注入配置;本地预览不走此管线。 @internal
1707
1726
  */
@@ -1730,6 +1749,10 @@ declare class XmaxVideoView {
1730
1749
  * 换流、解绑或卸载时取消观察,防止迟到的首帧归入下一条流。
1731
1750
  */
1732
1751
  private cancelFrameDisplayNotification;
1752
+ /**
1753
+ * 仅远端渲染绑定启用预热,本地预览和普通媒体直接显示。
1754
+ */
1755
+ private prepareRenderWarmup;
1733
1756
  /**
1734
1757
  * 应用显示模式与镜像样式。
1735
1758
  */
@@ -1751,7 +1774,7 @@ declare class XmaxVideoView {
1751
1774
  /**
1752
1775
  * 在本地预览和远端生成画面之间自动切换的视频容器(框架无关)。
1753
1776
  *
1754
- * 设置远端轨道后,容器等待首帧实际提交显示再渐入远端画面;
1777
+ * 设置 SDK 远端轨道后,等待首帧及渲染预热结束再渐入远端画面;
1755
1778
  * 远端轨道置空时立即恢复本地预览。
1756
1779
  */
1757
1780
  declare class XmaxRealtimeVideoView {
@@ -1812,7 +1835,7 @@ declare class XmaxRealtimeVideoView {
1812
1835
  set localTrack(track: RealtimeVideoTrack | undefined);
1813
1836
  /**
1814
1837
  * 当前显示的远端生成视频轨道。
1815
- * 设置新轨道后等待首帧提交显示再渐入;置空时立即恢复本地预览。
1838
+ * SDK 远端轨道等待首帧及预热后渐入;置空时立即恢复本地预览。
1816
1839
  */
1817
1840
  get remoteTrack(): RealtimeVideoTrack | undefined;
1818
1841
  /**
@@ -1844,7 +1867,7 @@ declare class XmaxRealtimeVideoView {
1844
1867
  */
1845
1868
  detach(): void;
1846
1869
  /**
1847
- * 更新远端轨道绑定:重置渐入状态,等待首帧提交后再显示远端画面。
1870
+ * 更新远端轨道绑定;SDK 轨道共用单轨视图的预热,普通轨道等待首帧后渐入。
1848
1871
  */
1849
1872
  private updateRemoteTrack;
1850
1873
  /**
package/dist/index.js CHANGED
@@ -35,7 +35,7 @@ import {
35
35
  defaultFrameRate,
36
36
  modelDisplayName,
37
37
  supportedRtcProviders
38
- } from "./chunk-ILZL4W2G.js";
38
+ } from "./chunk-LOYJFYQT.js";
39
39
  import "./chunk-V6TY7KAL.js";
40
40
  export {
41
41
  CameraPosition,
@@ -1,7 +1,7 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }
2
2
 
3
3
 
4
- var _chunkKROY2O4Acjs = require('../chunk-KROY2O4A.cjs');
4
+ var _chunkUF2RD42Gcjs = require('../chunk-UF2RD42G.cjs');
5
5
  require('../chunk-4DE2IREA.cjs');
6
6
 
7
7
  // src/react/XmaxRealtimeVideo.tsx
@@ -18,7 +18,7 @@ function XmaxRealtimeVideo(props) {
18
18
  if (!container) {
19
19
  return;
20
20
  }
21
- const view = new (0, _chunkKROY2O4Acjs.XmaxRealtimeVideoView)();
21
+ const view = new (0, _chunkUF2RD42Gcjs.XmaxRealtimeVideoView)();
22
22
  view.element.style.width = "100%";
23
23
  view.element.style.height = "100%";
24
24
  view.attach(container);
@@ -82,7 +82,7 @@ function XmaxVideo(props) {
82
82
  if (!container) {
83
83
  return;
84
84
  }
85
- const view = new (0, _chunkKROY2O4Acjs.XmaxVideoView)();
85
+ const view = new (0, _chunkUF2RD42Gcjs.XmaxVideoView)();
86
86
  view.element.style.width = "100%";
87
87
  view.element.style.height = "100%";
88
88
  view.attach(container);
@@ -1 +1 @@
1
- {"version":3,"sources":["/private/var/folders/5j/p3g3j18x2w3byrl5wtnk94tc0000gn/T/xmax-web-release-Zggzaq/source/packages/xmax-sdk/dist/react/index.cjs","../../src/react/XmaxRealtimeVideo.tsx","../../src/react/XmaxVideo.tsx"],"names":["useRef","useEffect","jsx"],"mappings":"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","file":"/private/var/folders/5j/p3g3j18x2w3byrl5wtnk94tc0000gn/T/xmax-web-release-Zggzaq/source/packages/xmax-sdk/dist/react/index.cjs","sourcesContent":[null,"import {\n VideoContentMode,\n XmaxRealtimeVideoView,\n type RealtimeVideoTrack,\n type TrajectoryEffectRendering,\n} from \"../index\";\nimport {\n useEffect,\n useRef,\n type CSSProperties,\n} from \"react\";\n\nexport interface XmaxRealtimeVideoProps {\n /**\n * 当前显示的本地视频轨道。\n */\n localTrack?: RealtimeVideoTrack;\n\n /**\n * 当前显示的远端生成视频轨道;首帧提交后自动渐入。\n */\n remoteTrack?: RealtimeVideoTrack;\n\n /**\n * 视频内容在容器中的显示模式,默认 fill。\n */\n videoContentMode?: VideoContentMode;\n\n /**\n * 容器类名。\n */\n className?: string;\n\n /**\n * 是否允许远端轨迹交互,默认 true;本地轨道不参与。\n */\n isInteractionEnabled?: boolean;\n\n /**\n * 自定义轨迹视觉效果,不传时使用默认效果;一个实例仅供一个视图使用。\n */\n trajectoryRenderer?: TrajectoryEffectRendering;\n\n /**\n * 容器样式。\n */\n style?: CSSProperties;\n}\n\n/**\n * 本地预览和远端生成画面自动切换的 React 组件。\n */\nexport function XmaxRealtimeVideo(props: XmaxRealtimeVideoProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const viewRef = useRef<XmaxRealtimeVideoView | undefined>(undefined);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) {\n return;\n }\n\n const view = new XmaxRealtimeVideoView();\n view.element.style.width = \"100%\";\n view.element.style.height = \"100%\";\n view.attach(container);\n viewRef.current = view;\n return () => {\n viewRef.current = undefined;\n view.localTrack = undefined;\n view.remoteTrack = undefined;\n view.detach();\n };\n }, []);\n\n useEffect(() => {\n const view = viewRef.current;\n if (view) {\n view.localTrack = props.localTrack;\n }\n }, [props.localTrack]);\n\n useEffect(() => {\n const view = viewRef.current;\n if (view) {\n view.remoteTrack = props.remoteTrack;\n }\n }, [props.remoteTrack]);\n\n useEffect(() => {\n const view = viewRef.current;\n if (view && props.videoContentMode) {\n view.videoContentMode = props.videoContentMode;\n }\n }, [props.videoContentMode]);\n\n useEffect(() => {\n if (viewRef.current) {\n viewRef.current.isInteractionEnabled = props.isInteractionEnabled ?? true;\n }\n }, [props.isInteractionEnabled]);\n\n useEffect(() => {\n if (viewRef.current) {\n viewRef.current.trajectoryRenderer = props.trajectoryRenderer;\n }\n }, [props.trajectoryRenderer]);\n\n return (\n <div\n ref={containerRef}\n className={props.className}\n style={{ position: \"relative\", overflow: \"hidden\", ...props.style }}\n />\n );\n}\n","import {\n VideoContentMode,\n XmaxVideoView,\n type RealtimeVideoTrack,\n type TrajectoryEffectRendering,\n type VideoRenderStatistics,\n} from \"../index\";\nimport {\n useEffect,\n useRef,\n type CSSProperties,\n} from \"react\";\n\nexport interface XmaxVideoProps {\n /**\n * 当前显示的视频轨道;置空时清空画面。\n */\n track?: RealtimeVideoTrack;\n\n /**\n * 视频内容在容器中的显示模式,默认 fill。\n */\n videoContentMode?: VideoContentMode;\n\n /**\n * 是否镜像显示(仅影响显示,不影响发布流)。\n */\n mirrored?: boolean;\n\n /**\n * 当前视图的呈现帧率统计;换流或卸载时清空,不受统计面板显示开关影响。\n */\n onRenderStatistics?: (statistics?: VideoRenderStatistics) => void;\n\n /**\n * 容器类名。\n */\n className?: string;\n\n /**\n * 是否允许远端轨迹交互,默认 true;本地轨道不参与。\n */\n isInteractionEnabled?: boolean;\n\n /**\n * 自定义轨迹视觉效果,不传时使用默认效果;一个实例仅供一个视图使用。\n */\n trajectoryRenderer?: TrajectoryEffectRendering;\n\n /**\n * 容器样式。\n */\n style?: CSSProperties;\n}\n\n/**\n * 单轨视频 React 组件:把一路视频轨渲染到容器。\n */\nexport function XmaxVideo(props: XmaxVideoProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const viewRef = useRef<XmaxVideoView | undefined>(undefined);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) {\n return;\n }\n\n const view = new XmaxVideoView();\n view.element.style.width = \"100%\";\n view.element.style.height = \"100%\";\n view.attach(container);\n viewRef.current = view;\n return () => {\n viewRef.current = undefined;\n view.track = undefined;\n view.detach();\n };\n }, []);\n\n useEffect(() => {\n if (viewRef.current) viewRef.current.renderStatisticsHandler = props.onRenderStatistics;\n }, [props.onRenderStatistics]);\n\n useEffect(() => {\n const view = viewRef.current;\n if (view) {\n view.track = props.track;\n }\n }, [props.track]);\n\n useEffect(() => {\n const view = viewRef.current;\n if (view && props.videoContentMode) {\n view.videoContentMode = props.videoContentMode;\n }\n }, [props.videoContentMode]);\n\n useEffect(() => {\n const view = viewRef.current;\n if (view && props.mirrored !== undefined) {\n view.isMirrored = props.mirrored;\n }\n }, [props.mirrored]);\n\n useEffect(() => {\n if (viewRef.current) {\n viewRef.current.isInteractionEnabled = props.isInteractionEnabled ?? true;\n }\n }, [props.isInteractionEnabled]);\n\n useEffect(() => {\n if (viewRef.current) {\n viewRef.current.trajectoryRenderer = props.trajectoryRenderer;\n }\n }, [props.trajectoryRenderer]);\n\n return (\n <div\n ref={containerRef}\n className={props.className}\n style={{ position: \"relative\", overflow: \"hidden\", ...props.style }}\n />\n );\n}\n"]}
1
+ {"version":3,"sources":["/private/var/folders/5j/p3g3j18x2w3byrl5wtnk94tc0000gn/T/xmax-web-release-ox16QE/source/packages/xmax-sdk/dist/react/index.cjs","../../src/react/XmaxRealtimeVideo.tsx","../../src/react/XmaxVideo.tsx"],"names":["useRef","useEffect","jsx"],"mappings":"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","file":"/private/var/folders/5j/p3g3j18x2w3byrl5wtnk94tc0000gn/T/xmax-web-release-ox16QE/source/packages/xmax-sdk/dist/react/index.cjs","sourcesContent":[null,"import {\n VideoContentMode,\n XmaxRealtimeVideoView,\n type RealtimeVideoTrack,\n type TrajectoryEffectRendering,\n} from \"../index\";\nimport {\n useEffect,\n useRef,\n type CSSProperties,\n} from \"react\";\n\nexport interface XmaxRealtimeVideoProps {\n /**\n * 当前显示的本地视频轨道。\n */\n localTrack?: RealtimeVideoTrack;\n\n /**\n * 当前显示的远端生成视频轨道;首帧提交后自动渐入。\n */\n remoteTrack?: RealtimeVideoTrack;\n\n /**\n * 视频内容在容器中的显示模式,默认 fill。\n */\n videoContentMode?: VideoContentMode;\n\n /**\n * 容器类名。\n */\n className?: string;\n\n /**\n * 是否允许远端轨迹交互,默认 true;本地轨道不参与。\n */\n isInteractionEnabled?: boolean;\n\n /**\n * 自定义轨迹视觉效果,不传时使用默认效果;一个实例仅供一个视图使用。\n */\n trajectoryRenderer?: TrajectoryEffectRendering;\n\n /**\n * 容器样式。\n */\n style?: CSSProperties;\n}\n\n/**\n * 本地预览和远端生成画面自动切换的 React 组件。\n */\nexport function XmaxRealtimeVideo(props: XmaxRealtimeVideoProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const viewRef = useRef<XmaxRealtimeVideoView | undefined>(undefined);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) {\n return;\n }\n\n const view = new XmaxRealtimeVideoView();\n view.element.style.width = \"100%\";\n view.element.style.height = \"100%\";\n view.attach(container);\n viewRef.current = view;\n return () => {\n viewRef.current = undefined;\n view.localTrack = undefined;\n view.remoteTrack = undefined;\n view.detach();\n };\n }, []);\n\n useEffect(() => {\n const view = viewRef.current;\n if (view) {\n view.localTrack = props.localTrack;\n }\n }, [props.localTrack]);\n\n useEffect(() => {\n const view = viewRef.current;\n if (view) {\n view.remoteTrack = props.remoteTrack;\n }\n }, [props.remoteTrack]);\n\n useEffect(() => {\n const view = viewRef.current;\n if (view && props.videoContentMode) {\n view.videoContentMode = props.videoContentMode;\n }\n }, [props.videoContentMode]);\n\n useEffect(() => {\n if (viewRef.current) {\n viewRef.current.isInteractionEnabled = props.isInteractionEnabled ?? true;\n }\n }, [props.isInteractionEnabled]);\n\n useEffect(() => {\n if (viewRef.current) {\n viewRef.current.trajectoryRenderer = props.trajectoryRenderer;\n }\n }, [props.trajectoryRenderer]);\n\n return (\n <div\n ref={containerRef}\n className={props.className}\n style={{ position: \"relative\", overflow: \"hidden\", ...props.style }}\n />\n );\n}\n","import {\n VideoContentMode,\n XmaxVideoView,\n type RealtimeVideoTrack,\n type TrajectoryEffectRendering,\n type VideoRenderStatistics,\n} from \"../index\";\nimport {\n useEffect,\n useRef,\n type CSSProperties,\n} from \"react\";\n\nexport interface XmaxVideoProps {\n /**\n * 当前显示的视频轨道;置空时清空画面。\n */\n track?: RealtimeVideoTrack;\n\n /**\n * 视频内容在容器中的显示模式,默认 fill。\n */\n videoContentMode?: VideoContentMode;\n\n /**\n * 是否镜像显示(仅影响显示,不影响发布流)。\n */\n mirrored?: boolean;\n\n /**\n * 当前视图的呈现帧率统计;换流或卸载时清空,不受统计面板显示开关影响。\n */\n onRenderStatistics?: (statistics?: VideoRenderStatistics) => void;\n\n /**\n * 容器类名。\n */\n className?: string;\n\n /**\n * 是否允许远端轨迹交互,默认 true;本地轨道不参与。\n */\n isInteractionEnabled?: boolean;\n\n /**\n * 自定义轨迹视觉效果,不传时使用默认效果;一个实例仅供一个视图使用。\n */\n trajectoryRenderer?: TrajectoryEffectRendering;\n\n /**\n * 容器样式。\n */\n style?: CSSProperties;\n}\n\n/**\n * 单轨视频 React 组件:把一路视频轨渲染到容器。\n * SDK 远端轨道自动预热 1000 ms 后渐入,本地预览直接显示。\n */\nexport function XmaxVideo(props: XmaxVideoProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const viewRef = useRef<XmaxVideoView | undefined>(undefined);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) {\n return;\n }\n\n const view = new XmaxVideoView();\n view.element.style.width = \"100%\";\n view.element.style.height = \"100%\";\n view.attach(container);\n viewRef.current = view;\n return () => {\n viewRef.current = undefined;\n view.track = undefined;\n view.detach();\n };\n }, []);\n\n useEffect(() => {\n if (viewRef.current) viewRef.current.renderStatisticsHandler = props.onRenderStatistics;\n }, [props.onRenderStatistics]);\n\n useEffect(() => {\n const view = viewRef.current;\n if (view) {\n view.track = props.track;\n }\n }, [props.track]);\n\n useEffect(() => {\n const view = viewRef.current;\n if (view && props.videoContentMode) {\n view.videoContentMode = props.videoContentMode;\n }\n }, [props.videoContentMode]);\n\n useEffect(() => {\n const view = viewRef.current;\n if (view && props.mirrored !== undefined) {\n view.isMirrored = props.mirrored;\n }\n }, [props.mirrored]);\n\n useEffect(() => {\n if (viewRef.current) {\n viewRef.current.isInteractionEnabled = props.isInteractionEnabled ?? true;\n }\n }, [props.isInteractionEnabled]);\n\n useEffect(() => {\n if (viewRef.current) {\n viewRef.current.trajectoryRenderer = props.trajectoryRenderer;\n }\n }, [props.trajectoryRenderer]);\n\n return (\n <div\n ref={containerRef}\n className={props.className}\n style={{ position: \"relative\", overflow: \"hidden\", ...props.style }}\n />\n );\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import * as react from 'react';
2
2
  import { CSSProperties } from 'react';
3
- import { a as RealtimeVideoTrack, V as VideoContentMode, T as TrajectoryEffectRendering, b as VideoRenderStatistics } from '../TrajectoryEffectRendering-C7E2KJbV.cjs';
3
+ import { a as RealtimeVideoTrack, V as VideoContentMode, T as TrajectoryEffectRendering, b as VideoRenderStatistics } from '../TrajectoryEffectRendering-BKKPO7Uk.cjs';
4
4
 
5
5
  interface XmaxRealtimeVideoProps {
6
6
  /**
@@ -73,6 +73,7 @@ interface XmaxVideoProps {
73
73
  }
74
74
  /**
75
75
  * 单轨视频 React 组件:把一路视频轨渲染到容器。
76
+ * SDK 远端轨道自动预热 1000 ms 后渐入,本地预览直接显示。
76
77
  */
77
78
  declare function XmaxVideo(props: XmaxVideoProps): react.JSX.Element;
78
79
 
@@ -1,6 +1,6 @@
1
1
  import * as react from 'react';
2
2
  import { CSSProperties } from 'react';
3
- import { a as RealtimeVideoTrack, V as VideoContentMode, T as TrajectoryEffectRendering, b as VideoRenderStatistics } from '../TrajectoryEffectRendering-C7E2KJbV.js';
3
+ import { a as RealtimeVideoTrack, V as VideoContentMode, T as TrajectoryEffectRendering, b as VideoRenderStatistics } from '../TrajectoryEffectRendering-BKKPO7Uk.js';
4
4
 
5
5
  interface XmaxRealtimeVideoProps {
6
6
  /**
@@ -73,6 +73,7 @@ interface XmaxVideoProps {
73
73
  }
74
74
  /**
75
75
  * 单轨视频 React 组件:把一路视频轨渲染到容器。
76
+ * SDK 远端轨道自动预热 1000 ms 后渐入,本地预览直接显示。
76
77
  */
77
78
  declare function XmaxVideo(props: XmaxVideoProps): react.JSX.Element;
78
79
 
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  XmaxRealtimeVideoView,
3
3
  XmaxVideoView
4
- } from "../chunk-ILZL4W2G.js";
4
+ } from "../chunk-LOYJFYQT.js";
5
5
  import "../chunk-V6TY7KAL.js";
6
6
 
7
7
  // src/react/XmaxRealtimeVideo.tsx
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/react/XmaxRealtimeVideo.tsx","../../src/react/XmaxVideo.tsx"],"sourcesContent":["import {\n VideoContentMode,\n XmaxRealtimeVideoView,\n type RealtimeVideoTrack,\n type TrajectoryEffectRendering,\n} from \"../index\";\nimport {\n useEffect,\n useRef,\n type CSSProperties,\n} from \"react\";\n\nexport interface XmaxRealtimeVideoProps {\n /**\n * 当前显示的本地视频轨道。\n */\n localTrack?: RealtimeVideoTrack;\n\n /**\n * 当前显示的远端生成视频轨道;首帧提交后自动渐入。\n */\n remoteTrack?: RealtimeVideoTrack;\n\n /**\n * 视频内容在容器中的显示模式,默认 fill。\n */\n videoContentMode?: VideoContentMode;\n\n /**\n * 容器类名。\n */\n className?: string;\n\n /**\n * 是否允许远端轨迹交互,默认 true;本地轨道不参与。\n */\n isInteractionEnabled?: boolean;\n\n /**\n * 自定义轨迹视觉效果,不传时使用默认效果;一个实例仅供一个视图使用。\n */\n trajectoryRenderer?: TrajectoryEffectRendering;\n\n /**\n * 容器样式。\n */\n style?: CSSProperties;\n}\n\n/**\n * 本地预览和远端生成画面自动切换的 React 组件。\n */\nexport function XmaxRealtimeVideo(props: XmaxRealtimeVideoProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const viewRef = useRef<XmaxRealtimeVideoView | undefined>(undefined);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) {\n return;\n }\n\n const view = new XmaxRealtimeVideoView();\n view.element.style.width = \"100%\";\n view.element.style.height = \"100%\";\n view.attach(container);\n viewRef.current = view;\n return () => {\n viewRef.current = undefined;\n view.localTrack = undefined;\n view.remoteTrack = undefined;\n view.detach();\n };\n }, []);\n\n useEffect(() => {\n const view = viewRef.current;\n if (view) {\n view.localTrack = props.localTrack;\n }\n }, [props.localTrack]);\n\n useEffect(() => {\n const view = viewRef.current;\n if (view) {\n view.remoteTrack = props.remoteTrack;\n }\n }, [props.remoteTrack]);\n\n useEffect(() => {\n const view = viewRef.current;\n if (view && props.videoContentMode) {\n view.videoContentMode = props.videoContentMode;\n }\n }, [props.videoContentMode]);\n\n useEffect(() => {\n if (viewRef.current) {\n viewRef.current.isInteractionEnabled = props.isInteractionEnabled ?? true;\n }\n }, [props.isInteractionEnabled]);\n\n useEffect(() => {\n if (viewRef.current) {\n viewRef.current.trajectoryRenderer = props.trajectoryRenderer;\n }\n }, [props.trajectoryRenderer]);\n\n return (\n <div\n ref={containerRef}\n className={props.className}\n style={{ position: \"relative\", overflow: \"hidden\", ...props.style }}\n />\n );\n}\n","import {\n VideoContentMode,\n XmaxVideoView,\n type RealtimeVideoTrack,\n type TrajectoryEffectRendering,\n type VideoRenderStatistics,\n} from \"../index\";\nimport {\n useEffect,\n useRef,\n type CSSProperties,\n} from \"react\";\n\nexport interface XmaxVideoProps {\n /**\n * 当前显示的视频轨道;置空时清空画面。\n */\n track?: RealtimeVideoTrack;\n\n /**\n * 视频内容在容器中的显示模式,默认 fill。\n */\n videoContentMode?: VideoContentMode;\n\n /**\n * 是否镜像显示(仅影响显示,不影响发布流)。\n */\n mirrored?: boolean;\n\n /**\n * 当前视图的呈现帧率统计;换流或卸载时清空,不受统计面板显示开关影响。\n */\n onRenderStatistics?: (statistics?: VideoRenderStatistics) => void;\n\n /**\n * 容器类名。\n */\n className?: string;\n\n /**\n * 是否允许远端轨迹交互,默认 true;本地轨道不参与。\n */\n isInteractionEnabled?: boolean;\n\n /**\n * 自定义轨迹视觉效果,不传时使用默认效果;一个实例仅供一个视图使用。\n */\n trajectoryRenderer?: TrajectoryEffectRendering;\n\n /**\n * 容器样式。\n */\n style?: CSSProperties;\n}\n\n/**\n * 单轨视频 React 组件:把一路视频轨渲染到容器。\n */\nexport function XmaxVideo(props: XmaxVideoProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const viewRef = useRef<XmaxVideoView | undefined>(undefined);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) {\n return;\n }\n\n const view = new XmaxVideoView();\n view.element.style.width = \"100%\";\n view.element.style.height = \"100%\";\n view.attach(container);\n viewRef.current = view;\n return () => {\n viewRef.current = undefined;\n view.track = undefined;\n view.detach();\n };\n }, []);\n\n useEffect(() => {\n if (viewRef.current) viewRef.current.renderStatisticsHandler = props.onRenderStatistics;\n }, [props.onRenderStatistics]);\n\n useEffect(() => {\n const view = viewRef.current;\n if (view) {\n view.track = props.track;\n }\n }, [props.track]);\n\n useEffect(() => {\n const view = viewRef.current;\n if (view && props.videoContentMode) {\n view.videoContentMode = props.videoContentMode;\n }\n }, [props.videoContentMode]);\n\n useEffect(() => {\n const view = viewRef.current;\n if (view && props.mirrored !== undefined) {\n view.isMirrored = props.mirrored;\n }\n }, [props.mirrored]);\n\n useEffect(() => {\n if (viewRef.current) {\n viewRef.current.isInteractionEnabled = props.isInteractionEnabled ?? true;\n }\n }, [props.isInteractionEnabled]);\n\n useEffect(() => {\n if (viewRef.current) {\n viewRef.current.trajectoryRenderer = props.trajectoryRenderer;\n }\n }, [props.trajectoryRenderer]);\n\n return (\n <div\n ref={containerRef}\n className={props.className}\n style={{ position: \"relative\", overflow: \"hidden\", ...props.style }}\n />\n );\n}\n"],"mappings":"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","names":["useEffect","useRef","jsx"]}
1
+ {"version":3,"sources":["../../src/react/XmaxRealtimeVideo.tsx","../../src/react/XmaxVideo.tsx"],"sourcesContent":["import {\n VideoContentMode,\n XmaxRealtimeVideoView,\n type RealtimeVideoTrack,\n type TrajectoryEffectRendering,\n} from \"../index\";\nimport {\n useEffect,\n useRef,\n type CSSProperties,\n} from \"react\";\n\nexport interface XmaxRealtimeVideoProps {\n /**\n * 当前显示的本地视频轨道。\n */\n localTrack?: RealtimeVideoTrack;\n\n /**\n * 当前显示的远端生成视频轨道;首帧提交后自动渐入。\n */\n remoteTrack?: RealtimeVideoTrack;\n\n /**\n * 视频内容在容器中的显示模式,默认 fill。\n */\n videoContentMode?: VideoContentMode;\n\n /**\n * 容器类名。\n */\n className?: string;\n\n /**\n * 是否允许远端轨迹交互,默认 true;本地轨道不参与。\n */\n isInteractionEnabled?: boolean;\n\n /**\n * 自定义轨迹视觉效果,不传时使用默认效果;一个实例仅供一个视图使用。\n */\n trajectoryRenderer?: TrajectoryEffectRendering;\n\n /**\n * 容器样式。\n */\n style?: CSSProperties;\n}\n\n/**\n * 本地预览和远端生成画面自动切换的 React 组件。\n */\nexport function XmaxRealtimeVideo(props: XmaxRealtimeVideoProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const viewRef = useRef<XmaxRealtimeVideoView | undefined>(undefined);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) {\n return;\n }\n\n const view = new XmaxRealtimeVideoView();\n view.element.style.width = \"100%\";\n view.element.style.height = \"100%\";\n view.attach(container);\n viewRef.current = view;\n return () => {\n viewRef.current = undefined;\n view.localTrack = undefined;\n view.remoteTrack = undefined;\n view.detach();\n };\n }, []);\n\n useEffect(() => {\n const view = viewRef.current;\n if (view) {\n view.localTrack = props.localTrack;\n }\n }, [props.localTrack]);\n\n useEffect(() => {\n const view = viewRef.current;\n if (view) {\n view.remoteTrack = props.remoteTrack;\n }\n }, [props.remoteTrack]);\n\n useEffect(() => {\n const view = viewRef.current;\n if (view && props.videoContentMode) {\n view.videoContentMode = props.videoContentMode;\n }\n }, [props.videoContentMode]);\n\n useEffect(() => {\n if (viewRef.current) {\n viewRef.current.isInteractionEnabled = props.isInteractionEnabled ?? true;\n }\n }, [props.isInteractionEnabled]);\n\n useEffect(() => {\n if (viewRef.current) {\n viewRef.current.trajectoryRenderer = props.trajectoryRenderer;\n }\n }, [props.trajectoryRenderer]);\n\n return (\n <div\n ref={containerRef}\n className={props.className}\n style={{ position: \"relative\", overflow: \"hidden\", ...props.style }}\n />\n );\n}\n","import {\n VideoContentMode,\n XmaxVideoView,\n type RealtimeVideoTrack,\n type TrajectoryEffectRendering,\n type VideoRenderStatistics,\n} from \"../index\";\nimport {\n useEffect,\n useRef,\n type CSSProperties,\n} from \"react\";\n\nexport interface XmaxVideoProps {\n /**\n * 当前显示的视频轨道;置空时清空画面。\n */\n track?: RealtimeVideoTrack;\n\n /**\n * 视频内容在容器中的显示模式,默认 fill。\n */\n videoContentMode?: VideoContentMode;\n\n /**\n * 是否镜像显示(仅影响显示,不影响发布流)。\n */\n mirrored?: boolean;\n\n /**\n * 当前视图的呈现帧率统计;换流或卸载时清空,不受统计面板显示开关影响。\n */\n onRenderStatistics?: (statistics?: VideoRenderStatistics) => void;\n\n /**\n * 容器类名。\n */\n className?: string;\n\n /**\n * 是否允许远端轨迹交互,默认 true;本地轨道不参与。\n */\n isInteractionEnabled?: boolean;\n\n /**\n * 自定义轨迹视觉效果,不传时使用默认效果;一个实例仅供一个视图使用。\n */\n trajectoryRenderer?: TrajectoryEffectRendering;\n\n /**\n * 容器样式。\n */\n style?: CSSProperties;\n}\n\n/**\n * 单轨视频 React 组件:把一路视频轨渲染到容器。\n * SDK 远端轨道自动预热 1000 ms 后渐入,本地预览直接显示。\n */\nexport function XmaxVideo(props: XmaxVideoProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const viewRef = useRef<XmaxVideoView | undefined>(undefined);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) {\n return;\n }\n\n const view = new XmaxVideoView();\n view.element.style.width = \"100%\";\n view.element.style.height = \"100%\";\n view.attach(container);\n viewRef.current = view;\n return () => {\n viewRef.current = undefined;\n view.track = undefined;\n view.detach();\n };\n }, []);\n\n useEffect(() => {\n if (viewRef.current) viewRef.current.renderStatisticsHandler = props.onRenderStatistics;\n }, [props.onRenderStatistics]);\n\n useEffect(() => {\n const view = viewRef.current;\n if (view) {\n view.track = props.track;\n }\n }, [props.track]);\n\n useEffect(() => {\n const view = viewRef.current;\n if (view && props.videoContentMode) {\n view.videoContentMode = props.videoContentMode;\n }\n }, [props.videoContentMode]);\n\n useEffect(() => {\n const view = viewRef.current;\n if (view && props.mirrored !== undefined) {\n view.isMirrored = props.mirrored;\n }\n }, [props.mirrored]);\n\n useEffect(() => {\n if (viewRef.current) {\n viewRef.current.isInteractionEnabled = props.isInteractionEnabled ?? true;\n }\n }, [props.isInteractionEnabled]);\n\n useEffect(() => {\n if (viewRef.current) {\n viewRef.current.trajectoryRenderer = props.trajectoryRenderer;\n }\n }, [props.trajectoryRenderer]);\n\n return (\n <div\n ref={containerRef}\n className={props.className}\n style={{ position: \"relative\", overflow: \"hidden\", ...props.style }}\n />\n );\n}\n"],"mappings":"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","names":["useEffect","useRef","jsx"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xmaxai/web-sdk",
3
- "version": "1.0.9",
3
+ "version": "1.0.10",
4
4
  "license": "MIT",
5
5
  "description": "XmaxSDK for Web — Realtime Interactive Video Generation",
6
6
  "type": "module",