@vivix-ai/ivi-frontend-sdk 0.2.3 → 0.3.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/README.md +166 -105
- package/dist/index.cjs +875 -381
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +196 -37
- package/dist/index.d.ts +196 -37
- package/dist/index.js +868 -383
- package/dist/index.js.map +1 -1
- package/package.json +6 -2
package/dist/index.d.cts
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ReceiveSessionSourceReadyPayload, IviStream, IviConversationItem, IviRealtimeSessionConfig, IviStageComposition, IviTrack, IviSourceAsset, ReceiveSessionSourceFailedPayload, IviConversationItemContent, ReceiveSessionEndedEvent, ParsedIviEvent, IviRealtimeResponseCreateParams, ReceiveConversationItemAddedEvent, ReceiveConversationItemDoneEvent, ReceiveResponseCreatedEvent, IviClient, IviClientConfig } from '@vivix-ai/ivi-sdk-ts';
|
|
2
|
+
import { LiveKitBrowserTransportConfig } from '@vivix-ai/ivi-sdk-ts/transports/livekit-browser';
|
|
2
3
|
import { ReactNode, CSSProperties, ReactElement, VideoHTMLAttributes, ImgHTMLAttributes } from 'react';
|
|
3
|
-
import { IviClientLogEntry } from '@vivix/ivi-sdk-ts/client';
|
|
4
|
+
import { IviClientLogEntry } from '@vivix-ai/ivi-sdk-ts/client';
|
|
5
|
+
|
|
6
|
+
type IviConversationItemRole = NonNullable<IviConversationItem["role"]>;
|
|
7
|
+
type IviSourcePlayback = NonNullable<ReceiveSessionSourceReadyPayload["playback"]>;
|
|
8
|
+
type IviSourcePlaybackTrtc = NonNullable<IviSourcePlayback["trtc"]>;
|
|
9
|
+
type IviStreamStatus = IviStream["status"];
|
|
4
10
|
|
|
5
11
|
type IviRuntimeStatus = "idle" | "connecting" | "syncing" | "running" | "stopped";
|
|
6
12
|
interface IviRuntimeState {
|
|
7
13
|
status: IviRuntimeStatus;
|
|
8
|
-
session:
|
|
9
|
-
stage:
|
|
14
|
+
session: IviRealtimeSessionConfig | null;
|
|
15
|
+
stage: IviStageComposition | null;
|
|
10
16
|
tracks: Map<string, IviTrack>;
|
|
11
17
|
sources: Map<string, IviRuntimeSource>;
|
|
12
18
|
streams: Map<string, IviRuntimeStream>;
|
|
@@ -32,14 +38,14 @@ interface IviRuntimeSourcePreloadState {
|
|
|
32
38
|
autoclearAfterPlay: boolean;
|
|
33
39
|
}
|
|
34
40
|
interface IviRuntimeSource {
|
|
35
|
-
source:
|
|
41
|
+
source: IviSourceAsset;
|
|
36
42
|
status: "created" | "ready" | "failed";
|
|
37
43
|
playback?: IviSourcePlayback;
|
|
38
44
|
width?: number;
|
|
39
45
|
height?: number;
|
|
40
46
|
durationMs?: number;
|
|
41
47
|
hasAudio?: boolean;
|
|
42
|
-
error?:
|
|
48
|
+
error?: ReceiveSessionSourceFailedPayload["error"];
|
|
43
49
|
/**
|
|
44
50
|
* 预加载状态:
|
|
45
51
|
* - 存在:渲染层应对该 source 进行预加载;
|
|
@@ -80,7 +86,7 @@ interface IviRuntimeCoordinatorConfig {
|
|
|
80
86
|
*/
|
|
81
87
|
onSessionEnded?: (event: ReceiveSessionEndedEvent) => void;
|
|
82
88
|
/**
|
|
83
|
-
* Runtime
|
|
89
|
+
* Runtime 内部链路日志回调;未传入时不输出日志。
|
|
84
90
|
*/
|
|
85
91
|
onLog?: IviRuntimeLogCallback;
|
|
86
92
|
}
|
|
@@ -105,6 +111,13 @@ interface IviRuntimeUserTextToResponseOptions {
|
|
|
105
111
|
* 透传给 response.create 的响应参数(不含 input)。
|
|
106
112
|
*/
|
|
107
113
|
response?: Omit<IviRealtimeResponseCreateParams, "input">;
|
|
114
|
+
/**
|
|
115
|
+
* 触发 response.create 时如何处理 input。
|
|
116
|
+
*
|
|
117
|
+
* - `"context"`(默认):不显式传 `response.input`,由 IVI 服务端使用内部维护的会话上下文。
|
|
118
|
+
* - `"item_reference"`:显式传入刚创建的用户 item 引用;服务端会以该 input 为准,不使用默认上下文。
|
|
119
|
+
*/
|
|
120
|
+
responseInput?: "context" | "item_reference";
|
|
108
121
|
/**
|
|
109
122
|
* 关键节点回调。
|
|
110
123
|
*/
|
|
@@ -213,6 +226,105 @@ declare class TrtcSourceManager {
|
|
|
213
226
|
private log;
|
|
214
227
|
}
|
|
215
228
|
|
|
229
|
+
/**
|
|
230
|
+
* LiveKit 拉流所需的会话凭证。连接字段复用 `@vivix-ai/ivi-sdk-ts` LiveKit transport 的上游类型。
|
|
231
|
+
*/
|
|
232
|
+
type IviSourcePlaybackLivekit = {
|
|
233
|
+
ws_url: LiveKitBrowserTransportConfig["url"];
|
|
234
|
+
token: LiveKitBrowserTransportConfig["token"];
|
|
235
|
+
room?: string;
|
|
236
|
+
identity?: string;
|
|
237
|
+
};
|
|
238
|
+
/**
|
|
239
|
+
* LiveKit 形态的 playback 实体(运行态用)。
|
|
240
|
+
*/
|
|
241
|
+
type IviSourcePlaybackLivekitDescriptor = IviSourcePlayback & {
|
|
242
|
+
type: "livekit";
|
|
243
|
+
livekit: IviSourcePlaybackLivekit;
|
|
244
|
+
};
|
|
245
|
+
/**
|
|
246
|
+
* 判定一个 playback 是否携带合法的 LiveKit 配置。
|
|
247
|
+
* 兼容上游类型尚未感知 `livekit` 分支的情况,因此使用结构化检查。
|
|
248
|
+
*/
|
|
249
|
+
declare function isLivekitSourcePlayback(playback: IviSourcePlayback | undefined | null): playback is IviSourcePlaybackLivekitDescriptor;
|
|
250
|
+
/**
|
|
251
|
+
* Runtime 层守卫:source 已 ready 且 playback 是 livekit。
|
|
252
|
+
*/
|
|
253
|
+
declare function isReadyLivekitRuntimeSource(source: IviRuntimeSource | undefined | null): source is IviRuntimeSource & {
|
|
254
|
+
playback: IviSourcePlaybackLivekitDescriptor;
|
|
255
|
+
};
|
|
256
|
+
/**
|
|
257
|
+
* 浅比较两份 livekit 配置;用于 SourceManager 决定是否需要重建 Room 连接。
|
|
258
|
+
*/
|
|
259
|
+
declare function isSameLivekitConfig(a: IviSourcePlaybackLivekit, b: IviSourcePlaybackLivekit): boolean;
|
|
260
|
+
|
|
261
|
+
type LivekitSourceConnectionStatus = "idle" | "connecting" | "connected" | "error";
|
|
262
|
+
interface LivekitSourceSnapshot {
|
|
263
|
+
status: LivekitSourceConnectionStatus;
|
|
264
|
+
error?: string;
|
|
265
|
+
}
|
|
266
|
+
type LivekitSourceListener = (snapshot: LivekitSourceSnapshot) => void;
|
|
267
|
+
/**
|
|
268
|
+
* LiveKit 拉流会话池:
|
|
269
|
+
* - 每个 `sourceId` 对应一个 LiveKit `Room` 实例,懒连接、单飞建连;
|
|
270
|
+
* - 远端 track 订阅后按 view 分发到各自容器;
|
|
271
|
+
* - 接口形状刻意贴近 `TrtcSourceManager`,便于 runtime 协调器与 React 组件镜像复用。
|
|
272
|
+
*/
|
|
273
|
+
declare class LivekitSourceManager {
|
|
274
|
+
private readonly onLog?;
|
|
275
|
+
private readonly sessions;
|
|
276
|
+
private readonly listeners;
|
|
277
|
+
constructor(onLog?: IviRuntimeLogCallback | undefined);
|
|
278
|
+
/**
|
|
279
|
+
* 与 runtime 当前 sources 对齐:
|
|
280
|
+
* - 对 ready + livekit 的 source 进行 upsert(必要时建立连接);
|
|
281
|
+
* - 清理已不在 runtime 中的会话(释放资源)。
|
|
282
|
+
*/
|
|
283
|
+
syncRuntimeSources(sources: Map<string, IviRuntimeSource>): void;
|
|
284
|
+
/**
|
|
285
|
+
* 按 sourceId 注册/更新 LiveKit 配置。
|
|
286
|
+
* 若 ws_url / token / room / identity 任一发生变化,会先销毁旧会话再按新参数重建连接。
|
|
287
|
+
*/
|
|
288
|
+
upsertSource(sourceId: string, livekit: IviSourcePlaybackLivekit): void;
|
|
289
|
+
/**
|
|
290
|
+
* 删除指定 source 的 LiveKit 会话并释放连接资源。
|
|
291
|
+
*/
|
|
292
|
+
removeSource(sourceId: string): void;
|
|
293
|
+
reset(): void;
|
|
294
|
+
subscribe(sourceId: string, listener: LivekitSourceListener): () => void;
|
|
295
|
+
getSnapshot(sourceId: string): LivekitSourceSnapshot;
|
|
296
|
+
hasRemoteVideoAvailable(sourceId: string): boolean;
|
|
297
|
+
/**
|
|
298
|
+
* 等待指定 source 的 LiveKit 会话首次拿到远端视频 track。
|
|
299
|
+
* - 若已收到过,立即返回 true;
|
|
300
|
+
* - 若会话被销毁或超时,返回 false。
|
|
301
|
+
*/
|
|
302
|
+
waitForRemoteVideoAvailable(sourceId: string, timeoutMs?: number): Promise<boolean>;
|
|
303
|
+
/**
|
|
304
|
+
* 把一个渲染容器绑定到 source 会话:
|
|
305
|
+
* - 确保已连接;
|
|
306
|
+
* - 把已订阅的远端 video/audio 回放到该容器;
|
|
307
|
+
* - 应用初始 muted 策略。
|
|
308
|
+
*/
|
|
309
|
+
attachView(sourceId: string, viewId: string, container: HTMLElement, muted: boolean): Promise<void>;
|
|
310
|
+
detachView(sourceId: string, viewId: string): void;
|
|
311
|
+
updateViewMuted(sourceId: string, viewId: string, muted: boolean): void;
|
|
312
|
+
private createSession;
|
|
313
|
+
/**
|
|
314
|
+
* 懒连接:单飞模式下复用同一个 connectPromise;建连后注册远端事件并把已订阅 track 推给 view。
|
|
315
|
+
*/
|
|
316
|
+
private ensureConnected;
|
|
317
|
+
private attachKnownTracksToView;
|
|
318
|
+
private attachTrackToView;
|
|
319
|
+
private detachTrackFromBinding;
|
|
320
|
+
private detachAllElementsFromView;
|
|
321
|
+
private applyMutedToBinding;
|
|
322
|
+
private applyMutedToElement;
|
|
323
|
+
private disposeSession;
|
|
324
|
+
private emitSnapshot;
|
|
325
|
+
private log;
|
|
326
|
+
}
|
|
327
|
+
|
|
216
328
|
/**
|
|
217
329
|
* 协调者负责 runtime 生命周期、状态机和跨域补偿,不参与事件类型分发。
|
|
218
330
|
*
|
|
@@ -258,6 +370,7 @@ declare class IviRuntimeCoordinator {
|
|
|
258
370
|
private readonly sourceManager;
|
|
259
371
|
private readonly streamManager;
|
|
260
372
|
private readonly trtcSourceManager;
|
|
373
|
+
private readonly livekitSourceManager;
|
|
261
374
|
private readonly conversationManager;
|
|
262
375
|
private readonly sessionHandler;
|
|
263
376
|
private readonly stageHandler;
|
|
@@ -289,13 +402,14 @@ declare class IviRuntimeCoordinator {
|
|
|
289
402
|
getState(): IviRuntimeState;
|
|
290
403
|
onStateChange(listener: (state: IviRuntimeState) => void): () => void;
|
|
291
404
|
onEvent(listener: IviRuntimeEventListener): () => void;
|
|
405
|
+
emitLog(entry: IviRuntimeLogEntry): void;
|
|
292
406
|
/**
|
|
293
407
|
* 编排一次"用户文本输入 -> 触发模型回复"链路。
|
|
294
408
|
*
|
|
295
409
|
* 流程:
|
|
296
410
|
* 1) 发送 conversation.item.create(可指定 itemId);
|
|
297
411
|
* 2) 等待 conversation.item.added + conversation.item.done;
|
|
298
|
-
* 3) 发送 response.create
|
|
412
|
+
* 3) 发送 response.create(默认不携带 input,使用 IVI 内部上下文;可选显式绑定 item_reference);
|
|
299
413
|
* 4) 等待 response.created 并结束。
|
|
300
414
|
*/
|
|
301
415
|
sendUserTextAndTriggerResponse(options: IviRuntimeUserTextToResponseOptions): Promise<IviRuntimeUserTextToResponseResult>;
|
|
@@ -308,6 +422,7 @@ declare class IviRuntimeCoordinator {
|
|
|
308
422
|
*/
|
|
309
423
|
sendSessionSourcePlaybackCompleted(sourceId: string, trackId?: string): void;
|
|
310
424
|
getTrtcSourceManager(): TrtcSourceManager;
|
|
425
|
+
getLivekitSourceManager(): LivekitSourceManager;
|
|
311
426
|
private onConnectionChange;
|
|
312
427
|
private validateStageTracks;
|
|
313
428
|
private validateTracksListRefreshed;
|
|
@@ -318,6 +433,7 @@ declare class IviRuntimeCoordinator {
|
|
|
318
433
|
private onTracksChanged;
|
|
319
434
|
private applyLocalTrackTake;
|
|
320
435
|
private deferredTrtcTakeCompleteAndTake;
|
|
436
|
+
private deferredLivekitTakeCompleteAndTake;
|
|
321
437
|
private sendSessionTrackTake;
|
|
322
438
|
private onSourcesChanged;
|
|
323
439
|
private onStreamsChanged;
|
|
@@ -361,9 +477,10 @@ declare class IviRuntimeDispatcher {
|
|
|
361
477
|
private dispatchEvent;
|
|
362
478
|
}
|
|
363
479
|
|
|
480
|
+
type IviFrontendClientConfig = IviClientConfig;
|
|
364
481
|
declare class IviFrontendSdk {
|
|
365
|
-
createClient(config:
|
|
366
|
-
createRuntimeCoordinator(clientConfig:
|
|
482
|
+
createClient(config: IviFrontendClientConfig): IviClient;
|
|
483
|
+
createRuntimeCoordinator(clientConfig: IviFrontendClientConfig, runtimeConfig?: IviRuntimeCoordinatorConfig): IviRuntimeCoordinator;
|
|
367
484
|
}
|
|
368
485
|
|
|
369
486
|
interface IviStageSlotBinding {
|
|
@@ -411,6 +528,27 @@ interface IVITrtcPlayerProps {
|
|
|
411
528
|
errorFallback?: ReactNode;
|
|
412
529
|
muted?: boolean;
|
|
413
530
|
}
|
|
531
|
+
/**
|
|
532
|
+
* 默认 TRTC 播放器:挂载即加入房间并拉流,连接由 TrtcSourceManager 统一复用。
|
|
533
|
+
* muted 变化仅更新音频策略,不触发重连。
|
|
534
|
+
*/
|
|
535
|
+
declare function IVITrtcPlayer(props: IVITrtcPlayerProps): ReactNode;
|
|
536
|
+
|
|
537
|
+
interface IVILivekitPlayerProps {
|
|
538
|
+
livekit: IviSourcePlaybackLivekit;
|
|
539
|
+
sourceId?: string;
|
|
540
|
+
runtime?: IviRuntimeCoordinator | null;
|
|
541
|
+
className?: string;
|
|
542
|
+
style?: CSSProperties;
|
|
543
|
+
loadingFallback?: ReactNode;
|
|
544
|
+
errorFallback?: ReactNode;
|
|
545
|
+
muted?: boolean;
|
|
546
|
+
}
|
|
547
|
+
/**
|
|
548
|
+
* 默认 LiveKit 播放器:挂载即加入房间并拉流,连接由 LivekitSourceManager 统一复用。
|
|
549
|
+
* muted 变化仅更新音频静音策略,不触发重连。
|
|
550
|
+
*/
|
|
551
|
+
declare function IVILivekitPlayer(props: IVILivekitPlayerProps): ReactNode;
|
|
414
552
|
|
|
415
553
|
interface IVIVolumeControlColors {
|
|
416
554
|
/** 容器背景色,默认 rgba(0, 0, 0, 0.55) */
|
|
@@ -437,6 +575,33 @@ interface IVIVolumeControlProps {
|
|
|
437
575
|
style?: CSSProperties;
|
|
438
576
|
}
|
|
439
577
|
|
|
578
|
+
type IviSubtitleRole = IviRuntimeConversationItem["role"];
|
|
579
|
+
interface IviSubtitleItem {
|
|
580
|
+
id: string;
|
|
581
|
+
role: IviSubtitleRole;
|
|
582
|
+
lifecycle: IviRuntimeConversationItem["lifecycle"];
|
|
583
|
+
status: IviRuntimeConversationItem["status"];
|
|
584
|
+
text: string;
|
|
585
|
+
transcript: string;
|
|
586
|
+
displayText: string;
|
|
587
|
+
content: IviRuntimeConversationItem["content"];
|
|
588
|
+
item: IviRuntimeConversationItem["item"];
|
|
589
|
+
/** 首次进入字幕队列的时间戳。 */
|
|
590
|
+
timestamp: number;
|
|
591
|
+
/** 最近一次字幕内容或状态更新的时间戳。 */
|
|
592
|
+
updatedAt: number;
|
|
593
|
+
}
|
|
594
|
+
interface IviUseSubtitlesOptions {
|
|
595
|
+
/** 要收集的发言人角色,默认 ["user"]。传单个字符串或数组均可。 */
|
|
596
|
+
roles?: IviSubtitleRole | IviSubtitleRole[];
|
|
597
|
+
/** 最多保留的字幕条数,超过后自动清理最旧条目,默认 2。 */
|
|
598
|
+
maxItems?: number;
|
|
599
|
+
}
|
|
600
|
+
/**
|
|
601
|
+
* 监听 runtime 中的 conversation/response 事件,并维护当前应展示的字幕队列。
|
|
602
|
+
*/
|
|
603
|
+
declare function useIviSubtitles(runtime: IviRuntimeCoordinator | null, options?: IviUseSubtitlesOptions): IviSubtitleItem[];
|
|
604
|
+
|
|
440
605
|
interface IVISubtitleOverlayStyle {
|
|
441
606
|
/** 字体,默认 system-ui */
|
|
442
607
|
fontFamily?: string;
|
|
@@ -448,14 +613,14 @@ interface IVISubtitleOverlayStyle {
|
|
|
448
613
|
background?: string;
|
|
449
614
|
}
|
|
450
615
|
interface IVISubtitleOverlayProps {
|
|
451
|
-
/**
|
|
452
|
-
|
|
616
|
+
/** 字幕来源 runtime。 */
|
|
617
|
+
runtime: IviRuntimeCoordinator | null;
|
|
453
618
|
/** 要显示的发言人角色,默认 ["user"]。传单个字符串或数组均可。 */
|
|
454
|
-
roles?:
|
|
455
|
-
/**
|
|
619
|
+
roles?: IviUseSubtitlesOptions["roles"];
|
|
620
|
+
/** 最多保留的字幕条数,默认 2。 */
|
|
621
|
+
maxItems?: number;
|
|
622
|
+
/** @deprecated Use `maxItems` instead. */
|
|
456
623
|
maxVisible?: number;
|
|
457
|
-
/** lifecycle 变为 done 后自动消失的毫秒数,默认 5000 */
|
|
458
|
-
dismissAfterMs?: number;
|
|
459
624
|
/** 样式配置 */
|
|
460
625
|
subtitleStyle?: IVISubtitleOverlayStyle;
|
|
461
626
|
/** 自定义类名 */
|
|
@@ -463,6 +628,11 @@ interface IVISubtitleOverlayProps {
|
|
|
463
628
|
/** 自定义样式 */
|
|
464
629
|
style?: CSSProperties;
|
|
465
630
|
}
|
|
631
|
+
/**
|
|
632
|
+
* 字幕浮层:基于 useIviSubtitles 的预制 UI,胶囊形半透明黑底白字。
|
|
633
|
+
* added 阶段背景呼吸闪动;字幕保留与裁剪由 hook 的 maxItems 控制。
|
|
634
|
+
*/
|
|
635
|
+
declare function IVISubtitleOverlay(props: IVISubtitleOverlayProps): ReactNode;
|
|
466
636
|
|
|
467
637
|
interface IviTrackSlotRenderContext {
|
|
468
638
|
slot: string;
|
|
@@ -471,19 +641,6 @@ interface IviTrackSlotRenderContext {
|
|
|
471
641
|
/** 当前正在 standby 槽位预加载(不可见、已静音) */
|
|
472
642
|
isPreloading?: boolean;
|
|
473
643
|
}
|
|
474
|
-
/**
|
|
475
|
-
* 媒体空白区域(letterbox / pillarbox)背景模式。
|
|
476
|
-
* - `"black"` / `"white"` / `"transparent"`:纯色填充
|
|
477
|
-
* - `{ color: string }`:用户自定义 CSS 颜色
|
|
478
|
-
* - `"blur"`:实时高斯模糊(等同 `{ blur: "live" }`)
|
|
479
|
-
* - `{ blur: "live" }`:实时模糊,背景跟随媒体画面持续更新
|
|
480
|
-
* - `{ blur: "static" }`:静态模糊,仅取首帧进行模糊,性能开销极低
|
|
481
|
-
*/
|
|
482
|
-
type IviTrackSlotBackground = "black" | "white" | "transparent" | {
|
|
483
|
-
color: string;
|
|
484
|
-
} | "blur" | {
|
|
485
|
-
blur: "live" | "static";
|
|
486
|
-
};
|
|
487
644
|
interface IVITrackSlotProps {
|
|
488
645
|
slot?: string;
|
|
489
646
|
trackId?: string;
|
|
@@ -491,22 +648,24 @@ interface IVITrackSlotProps {
|
|
|
491
648
|
style?: CSSProperties;
|
|
492
649
|
emptyFallback?: ReactNode;
|
|
493
650
|
renderTrtc?: (context: IviTrackSlotRenderContext) => ReactNode;
|
|
651
|
+
renderLivekit?: (context: IviTrackSlotRenderContext) => ReactNode;
|
|
494
652
|
renderMedia?: (context: IviTrackSlotRenderContext) => ReactNode;
|
|
495
653
|
videoProps?: Omit<VideoHTMLAttributes<HTMLVideoElement>, "src">;
|
|
496
654
|
imageProps?: Omit<ImgHTMLAttributes<HTMLImageElement>, "src">;
|
|
497
655
|
adaptToSourceSize?: boolean;
|
|
498
656
|
fitStrategy?: "contain" | "cover" | "auto";
|
|
499
657
|
trtcPlayerProps?: Omit<IVITrtcPlayerProps, "trtc" | "sourceId" | "runtime">;
|
|
658
|
+
livekitPlayerProps?: Omit<IVILivekitPlayerProps, "livekit" | "sourceId" | "runtime">;
|
|
500
659
|
/** 是否显示音量控制浮层(仅在播放音视频媒体时生效,图片无音量) */
|
|
501
660
|
showVolumeControl?: boolean;
|
|
502
661
|
/** 音量控制组件的自定义配置(图标、颜色、样式等) */
|
|
503
662
|
volumeControlProps?: Omit<IVIVolumeControlProps, "volume" | "onVolumeChange">;
|
|
504
663
|
/** 是否显示字幕浮层(仅在支持字幕的播放源上生效) */
|
|
505
664
|
showSubtitle?: boolean;
|
|
506
|
-
/**
|
|
507
|
-
subtitleProps?: Omit<IVISubtitleOverlayProps, "
|
|
508
|
-
/**
|
|
509
|
-
|
|
665
|
+
/** 字幕组件的自定义配置(角色、最大条数、字体、颜色等) */
|
|
666
|
+
subtitleProps?: Omit<IVISubtitleOverlayProps, "runtime">;
|
|
667
|
+
/** TrackSlot 内部媒体链路日志回调;未传入时不输出日志。 */
|
|
668
|
+
onLog?: IviRuntimeLogCallback;
|
|
510
669
|
}
|
|
511
670
|
/**
|
|
512
671
|
* Track 窗口组件:基于多重预加载策略渲染所有 ready 的 Source。
|
|
@@ -530,15 +689,15 @@ interface IviManagedRuntimeLogEntry {
|
|
|
530
689
|
}
|
|
531
690
|
type IviManagedRuntimeLogCallback = (entry: IviManagedRuntimeLogEntry) => void;
|
|
532
691
|
interface IviManagedRuntimeConfig {
|
|
533
|
-
clientConfig:
|
|
692
|
+
clientConfig: Partial<IviFrontendClientConfig>;
|
|
534
693
|
autoStart?: boolean;
|
|
535
694
|
runtimeConfig?: IviRuntimeCoordinatorConfig;
|
|
536
695
|
onRuntimeInitError?: (error: unknown) => void;
|
|
537
696
|
/**
|
|
538
697
|
* 统一收集 SDK 内部带 IVI 标记的日志。
|
|
539
698
|
*
|
|
540
|
-
* - IviClient 的 onLog 会被转换为 `[IVI-SEND]`、`[IVI-
|
|
541
|
-
* - runtime / TRTC 等日志会通过 runtime onLog 回调上报,不会通过 patch console 收集
|
|
699
|
+
* - IviClient 的 onLog 会被转换为 `[IVI-SEND]`、`[IVI-TRANSPORT]`、`[IVI-RECONNECT]`
|
|
700
|
+
* - runtime / TRTC / LiveKit 等日志会通过 runtime onLog 回调上报,不会通过 patch console 收集
|
|
542
701
|
*/
|
|
543
702
|
onLog?: IviManagedRuntimeLogCallback;
|
|
544
703
|
}
|
|
@@ -546,4 +705,4 @@ declare function useManagedIviRuntime(config: IviManagedRuntimeConfig): IviRunti
|
|
|
546
705
|
|
|
547
706
|
declare function useIviStageView(): IviStageViewContextValue;
|
|
548
707
|
|
|
549
|
-
export { EMPTY_RUNTIME_STATE, IVIStageView, type IVIStageViewProps, IVITrackSlot, type IVITrackSlotProps, IviFrontendSdk, type IviManagedRuntimeConfig, type IviManagedRuntimeLogCallback, type IviManagedRuntimeLogEntry, type IviManagedRuntimeLogLevel, type IviManagedRuntimeLogSource, type IviRuntimeConversationItem, type IviRuntimeConversationLifecycle, type IviRuntimeConversationStatus, IviRuntimeCoordinator, type IviRuntimeCoordinatorConfig, IviRuntimeDispatcher, type IviRuntimeDispatcherConfig, type IviRuntimeEventListener, type IviRuntimeLogCallback, type IviRuntimeLogEntry, type IviRuntimeLogLevel, type IviRuntimeSource, type IviRuntimeSourcePreloadState, type IviRuntimeState, type IviRuntimeStatus, type IviRuntimeStream, type IviRuntimeUserTextToResponseCallbacks, type IviRuntimeUserTextToResponseOptions, type IviRuntimeUserTextToResponseResult, type IviStageSlotBinding, type IviStageViewContextValue, type
|
|
708
|
+
export { EMPTY_RUNTIME_STATE, IVILivekitPlayer, type IVILivekitPlayerProps, IVIStageView, type IVIStageViewProps, IVISubtitleOverlay, type IVISubtitleOverlayProps, type IVISubtitleOverlayStyle, IVITrackSlot, type IVITrackSlotProps, IVITrtcPlayer, type IVITrtcPlayerProps, type IviFrontendClientConfig, IviFrontendSdk, type IviManagedRuntimeConfig, type IviManagedRuntimeLogCallback, type IviManagedRuntimeLogEntry, type IviManagedRuntimeLogLevel, type IviManagedRuntimeLogSource, type IviRuntimeConversationItem, type IviRuntimeConversationLifecycle, type IviRuntimeConversationStatus, IviRuntimeCoordinator, type IviRuntimeCoordinatorConfig, IviRuntimeDispatcher, type IviRuntimeDispatcherConfig, type IviRuntimeEventListener, type IviRuntimeLogCallback, type IviRuntimeLogEntry, type IviRuntimeLogLevel, type IviRuntimeSource, type IviRuntimeSourcePreloadState, type IviRuntimeState, type IviRuntimeStatus, type IviRuntimeStream, type IviRuntimeUserTextToResponseCallbacks, type IviRuntimeUserTextToResponseOptions, type IviRuntimeUserTextToResponseResult, type IviSourcePlaybackLivekit, type IviSourcePlaybackLivekitDescriptor, type IviStageSlotBinding, type IviStageViewContextValue, type IviSubtitleItem, type IviSubtitleRole, type IviUseSubtitlesOptions, LivekitSourceManager, TrtcSourceManager, isLivekitSourcePlayback, isReadyLivekitRuntimeSource, isSameLivekitConfig, useIviStageView, useIviSubtitles, useManagedIviRuntime, useRuntimeState };
|