> ## Documentation Index
> Fetch the complete documentation index at: https://docs.stmlink.com/llms.txt
> Use this file to discover all available pages before exploring further.

# SRTC

> Web SRTC 音视频 SDK SRTC 接口参考

SRTC 是 Web SDK 的核心入口，通过 `new SRTC(initParams)` 创建实例。

***

### constructor

```typescript theme={null}
constructor(initParams: SdkInitParams)
```

| 参数           | 类型              |  必填 | 说明                                                        |
| ------------ | --------------- | :-: | --------------------------------------------------------- |
| `initParams` | `SdkInitParams` |  是  | 初始化参数，详见 [SdkInitParams](/zh/rtc/web/types#sdkinitparams) |

***

### buildInfo

获取 SDK 编译信息。

```typescript theme={null}
buildInfo(): BuildInfo
```

***

### getEnvInfo

获取当前浏览器的 WebRTC 能力检测结果，建议在初始化后尽早调用。

```typescript theme={null}
getEnvInfo(): EnvWebInfo
```

**返回值：** `EnvWebInfo`，详见 [EnvWebInfo](/zh/rtc/web/types#envwebinfo)

***

### onNotifyChannelEvent

频道内事件回调，建议在 `join` 前注册。

```typescript theme={null}
onNotifyChannelEvent?: ((event: ChannelEvent) => void) | null
```

完整事件类型详见 [事件参考](/zh/rtc/web/events)。

***

### onNotifyImEvent

频道外 IM 事件回调。

```typescript theme={null}
onNotifyImEvent?: ((event: ImEvent) => void) | null
```

***

### join

加入频道。

```typescript theme={null}
join(token: string, options?: JoinOptions): Promise<ChannelInfo>
```

| 参数        | 类型            |  必填 | 说明                                                   |
| --------- | ------------- | :-: | ---------------------------------------------------- |
| `token`   | `string`      |  是  | 服务端签发的加入频道 Token                                     |
| `options` | `JoinOptions` |  否  | 加入选项，详见 [JoinOptions](/zh/rtc/web/types#joinoptions) |

***

### leave

主动离开频道。对于本地轨道，SDK 会在离会后自动停止采集、停止播放或移除播放视图。

```typescript theme={null}
leave(): Promise<void>
```

***

### getChannelInfo

获取当前频道信息。未加入频道时返回 `null`。

```typescript theme={null}
getChannelInfo(): ChannelInfo | null
```

***

### getUserInfo

获取频道内指定用户信息。

```typescript theme={null}
getUserInfo(uid: string): UserInfo
```

| 参数    | 类型       |  必填 | 说明    |
| ----- | -------- | :-: | ----- |
| `uid` | `string` |  是  | 用户 ID |

***

### getUsersInfo

获取频道内所有用户信息，支持数组和映射两种返回格式。

```typescript theme={null}
getUsersInfo(map: true): Record<string, UserInfo>
getUsersInfo(map: false): UserInfo[]
```

***

### getStreamMetric

获取当前流媒体全量 metric 快照，包含网络总体统计以及每条本地/远端轨道的 `TrackMetric`。

```typescript theme={null}
getStreamMetric(): StreamMetric | undefined
```

> 未加入频道时调用会抛出异常。详细字段含义见 [网络质量](../network-quality)。

***

### getNetworkStats

获取当前网络总体统计，只关心网络全景（码率、丢包、RTT、可用带宽）时用，比 `getStreamMetric` 更轻量。

```typescript theme={null}
getNetworkStats(): NetworkStats | undefined
```

> 未加入频道时调用会抛出异常。

***

### getConnectionQuality

获取当前连接质量评估结果，返回上下行等级、总体等级、MOS 和触发原因。SDK 内部以 2 秒为周期滑动窗口评估。

```typescript theme={null}
getConnectionQuality(): QualityEvaluation | undefined
```

> 未加入频道时调用会抛出异常。业务层更推荐订阅 `ChannelEventType.CONNECTION_QUALITY_CHANGED` 事件被动感知变化。

***

### getDevices

枚举媒体设备列表。

```typescript theme={null}
getDevices(kind?: MediaDeviceKind, requestPermissions?: boolean): Promise<MediaDeviceInfo[]>
```

| 参数                   | 类型                                              |  必填 | 说明                   |
| -------------------- | ----------------------------------------------- | :-: | -------------------- |
| `kind`               | `'audioinput' \| 'audiooutput' \| 'videoinput'` |  否  | 不传则返回所有类型设备          |
| `requestPermissions` | `boolean`                                       |  否  | 是否主动请求媒体权限，默认 `true` |

***

### createLocalMicTrack

创建麦克风音频轨道。

```typescript theme={null}
createLocalMicTrack(preset?: MicPreset): LocalMicTrack
```

| 参数       | 类型          |  必填 | 说明                          |
| -------- | ----------- | :-: | --------------------------- |
| `preset` | `MicPreset` |  否  | 麦克风预设，默认 `MicPresets.music` |

***

### createLocalCustomAudioTrack

使用自定义 `MediaStreamTrack` 创建本地音频轨道。

```typescript theme={null}
createLocalCustomAudioTrack(msTrack: MediaStreamTrack): LocalAudioTrack
```

| 参数        | 类型                 |  必填 | 说明                       |
| --------- | ------------------ | :-: | ------------------------ |
| `msTrack` | `MediaStreamTrack` |  是  | 音频类型的 `MediaStreamTrack` |

***

### createLocalCameraTrack

创建摄像头视频轨道。

```typescript theme={null}
createLocalCameraTrack(preset?: CameraPreset): LocalCameraTrack
```

| 参数       | 类型             |  必填 | 说明                               |
| -------- | -------------- | :-: | -------------------------------- |
| `preset` | `CameraPreset` |  否  | 摄像头预设，默认 `CameraPresets['720p']` |

***

### createLocalScreenTrack

创建屏幕共享视频轨道。

```typescript theme={null}
createLocalScreenTrack(preset?: ScreenPreset, audioPreset?: ScreenAudioPreset): LocalScreenTrack
```

| 参数            | 类型                  |  必填 | 说明                                     |
| ------------- | ------------------- | :-: | -------------------------------------- |
| `preset`      | `ScreenPreset`      |  否  | 视频预设，默认 `ScreenPresets['1080p']`       |
| `audioPreset` | `ScreenAudioPreset` |  否  | 系统音频预设，默认 `ScreenAudioPresets.default` |

> 默认会同时创建系统音频轨道。真正能否采集到系统音频，还取决于浏览器能力和用户是否在系统分享弹窗中勾选“分享音频”。

***

### createLocalCustomVideoTrack

使用自定义 `MediaStreamTrack` 创建本地视频轨道。

```typescript theme={null}
createLocalCustomVideoTrack(msTrack: MediaStreamTrack): LocalVideoTrack
```

| 参数        | 类型                 |  必填 | 说明                       |
| --------- | ------------------ | :-: | ------------------------ |
| `msTrack` | `MediaStreamTrack` |  是  | 视频类型的 `MediaStreamTrack` |

***

### createLocalCompositeRecorder

创建本地合成录制器，用于在浏览器端把当前页面需要录制的视频宫格和音频轨道合成为本地录制文件。

```typescript theme={null}
createLocalCompositeRecorder(): LocalCompositeRecorder
```

返回的 `LocalCompositeRecorder` 只负责媒体合成与 `MediaRecorder` 生命周期；会议宫格、分页、主讲人布局、共享屏幕优先级等业务视角由应用层计算后，通过 `videoItems` 和 `updateVideoItems(...)` 传入。

> 详细用法见 [本地合成录制](/zh/rtc/web/advanced/local-recording)。

***

### publishLocalTrack

将本地轨道发布到频道，发布后远端用户可以订阅。

```typescript theme={null}
publishLocalTrack(
  track: LocalAudioTrack | LocalVideoTrack,
  opt?: Partial<AudioPublishOptions> | Partial<VideoPublishOptions>
): Promise<void>
```

| 参数      | 类型                                                             |  必填 | 说明                  |
| ------- | -------------------------------------------------------------- | :-: | ------------------- |
| `track` | `LocalAudioTrack \| LocalVideoTrack`                           |  是  | 要发布的本地轨道            |
| `opt`   | `Partial<AudioPublishOptions> \| Partial<VideoPublishOptions>` |  否  | 发布参数，会与创建轨道时的预设参数合并 |

***

### unpublishLocalTrack

停止发布本地轨道，远端用户将收到 `USER_TRACK_REMOVE` 事件。

```typescript theme={null}
unpublishLocalTrack(track: LocalAudioTrack | LocalVideoTrack): Promise<void>
```

***

### enableLocalTrack

恢复已暂停的本地轨道数据发送。

```typescript theme={null}
enableLocalTrack(track: LocalAudioTrack | LocalVideoTrack): Promise<void>
```

> 远端会收到 `TRACK_UNMUTED` 事件。与 `publishLocalTrack` 的区别详见 [静音 vs 停止发布](/zh/rtc/web/advanced/mute-vs-unpublish)。

***

### disableLocalTrack

暂停本地轨道数据发送，但不取消发布。

```typescript theme={null}
disableLocalTrack(track: LocalAudioTrack | LocalVideoTrack): void
```

> 远端会收到 `TRACK_MUTED` 事件。与 `unpublishLocalTrack` 的区别详见 [静音 vs 停止发布](/zh/rtc/web/advanced/mute-vs-unpublish)。

***

### subscribeRemoteAudioMixTrack

订阅全频道混音流。

```typescript theme={null}
subscribeRemoteAudioMixTrack(
  filter?: string[] | ((track: BaseTrack) => boolean)
): Promise<RemoteAudioMixTrack>
```

| 参数       | 类型                                            |  必填 | 说明                                   |
| -------- | --------------------------------------------- | :-: | ------------------------------------ |
| `filter` | `string[] \| ((track: BaseTrack) => boolean)` |  否  | 传 `string[]` 时按 UID 排除；传函数时按轨道判断是否过滤 |

***

### subscribeRemoteAudioTrack

订阅指定用户的单路音频流。

```typescript theme={null}
subscribeRemoteAudioTrack(uid: string, id: string): Promise<RemoteAudioTrack>
```

| 参数    | 类型       |  必填 | 说明                         |
| ----- | -------- | :-: | -------------------------- |
| `uid` | `string` |  是  | 用户 ID                      |
| `id`  | `string` |  是  | 轨道 ID，可从 `TrackInfo.id` 获取 |

***

### subscribeRemoteVideoTrack

订阅指定用户的视频流。

```typescript theme={null}
subscribeRemoteVideoTrack(uid: string, id: string): Promise<RemoteVideoTrack>
```

| 参数    | 类型       |  必填 | 说明                         |
| ----- | -------- | :-: | -------------------------- |
| `uid` | `string` |  是  | 用户 ID                      |
| `id`  | `string` |  是  | 轨道 ID，可从 `TrackInfo.id` 获取 |

***

### subscribeRemoteVideoMcuTrack

订阅远端视频合成流。

```typescript theme={null}
subscribeRemoteVideoMcuTrack(): Promise<RemoteVideoMcuTrack>
```

> `RemoteVideoMcuTrack` 继承自 `RemoteVideoTrack`，可按普通远端视频轨道使用。

***

### unsubscribeRemoteTrack

取消订阅远端流。

```typescript theme={null}
unsubscribeRemoteTrack(
  track: RemoteAudioMixTrack | RemoteAudioTrack | RemoteVideoTrack
): Promise<void>
```

***

### getRemoteTrack

通过用户 ID 与轨道 ID 或轨道描述获取已订阅的远端轨道实例。

```typescript theme={null}
getRemoteTrack(uid: string, id?: string, desc?: string): RemoteAudioTrack | RemoteVideoTrack
```

| 参数     | 类型       |  必填 | 说明                 |
| ------ | -------- | :-: | ------------------ |
| `uid`  | `string` |  是  | 用户 ID              |
| `id`   | `string` |  否  | 轨道 ID，与 `desc` 二选一 |
| `desc` | `string` |  否  | 轨道描述，与 `id` 二选一    |

> `id` 和 `desc` 至少要传一个，否则会抛出异常。

***

### enableIm

启用频道外 IM 消息功能。

```typescript theme={null}
enableIm(token: string): Promise<string>
```

| 参数      | 类型       |  必填 | 说明          |
| ------- | -------- | :-: | ----------- |
| `token` | `string` |  是  | IM 启用 Token |

**返回值：** `Promise<string>`，返回 IM 会话 `sid`。

***

### disableIm

关闭频道外 IM 消息功能。

```typescript theme={null}
disableIm(): Promise<void>
```
