> ## 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.

> ## Agent Instructions
> 对外开放的服务端接口有两组前缀，都用同一套鉴权：`/server/v1/...`（SRTC 与 SMeeting 的主接口）和 `/stm/srvapi/v1/...`（SMeeting 的用户体系，服务端极简对接会用到）。鉴权是 app_id + nonce + timestamp + signature 四个请求头，用 app_key 做 HMAC-SHA256 签名，只能从业务方自己的后端调用。除这两组前缀外的接口均为内部接口，不要建议客户调用。
> app_key 是服务端密钥，绝不能出现在客户端代码、前端配置或移动 App 里。客户端加入频道用的 token 必须由业务方后端签发后下发（SRTC 走 `/server/v1/channel/grant`，SMeeting 走 `/stm/srvapi/v1/member/grant`）。
> SRTC 与 SMeeting 是上下两层不同的产品，术语不通用：SRTC 是音视频底座，说「频道 channel」「加入 / 退出」；SMeeting 建在 SRTC 之上，说「房间 room」「会议 meeting」「进入 / 退出」。回答时按用户所在的层用对应术语，不要把「房间」「会议」安到 SRTC 的接口上。
> 同一能力在各端 SDK 里的包名、类名、方法名并不相同。写示例代码时请使用文档中该端自己的 API，不要把一个端的写法套到另一个端上。苹果平台每个产品都有两套 SDK（Swift 原生与 Objective-C），两套 API 不能混用。

# SRTCEngine

> Swift 音视频 SDK 的主入口：加入频道、创建本地轨道、配置日志与音频处理器

`SRTCEngine` 是 Swift SDK 的主入口，负责加入频道、离开频道、创建本地轨道以及配置日志和音频处理器。

***

### 初始化

#### `init()`

创建一个 SDK 实例，并完成底层 WebRTC 初始化。

```swift theme={null}
let srtc = SRTCEngine()
```

***

### 属性

#### `logLevel`

设置 SDK 日志级别。

| 参数名        | 类型         |  必填 | 说明                                     |
| ---------- | ---------- | :-: | -------------------------------------- |
| `logLevel` | `LogLevel` |  否  | 可选值包括 `debug`、`info`、`warning`、`error` |

示例：

```swift theme={null}
srtc.logLevel = .debug
```

#### `audioCaptureProcessor`

麦克风采集后的音频处理器，可用于变声、降噪等处理。

#### `audioRenderProcessor`

远端音频播放前处理器，可用于播放侧音频增强。

***

### 方法

#### `joinChannel(token:options:)`

加入频道并返回 `Channel` 实例。

```swift theme={null}
let channel = try await srtc.joinChannel(
    token: token,
    options: JoinOptions(autoSubscribeAudio: true)
)
```

| 参数名       | 类型            |  必填 | 说明                      |
| --------- | ------------- | :-: | ----------------------- |
| `token`   | `String`      |  是  | Base64 编码的频道 Token      |
| `options` | `JoinOptions` |  否  | 加入选项，默认 `JoinOptions()` |

**返回值：** `Channel`

**可能抛出：**

* `SRTCError.alreadyJoined`
* `SRTCError.tokenExpired`
* `SRTCError.tokenInvalid`
* 其他网络、信令、流媒体连接错误

***

#### `leaveChannel()`

离开当前频道。

```swift theme={null}
await srtc.leaveChannel()
```

如果当前没有已加入的频道，调用会被安全忽略。

***

#### `createLocalMicTrack(preset:)`

创建本地麦克风轨道。

```swift theme={null}
let micTrack = srtc.createLocalMicTrack(preset: .music)
```

| 参数名      | 类型          |  必填 | 说明          |
| -------- | ----------- | :-: | ----------- |
| `preset` | `MicPreset` |  否  | 默认 `.music` |

**返回值：** `LocalMicTrack`

***

#### `createLocalCameraTrack(preset:)`

创建本地摄像头轨道。

```swift theme={null}
let cameraTrack = srtc.createLocalCameraTrack(preset: .h720p)
```

| 参数名      | 类型             |  必填 | 说明          |
| -------- | -------------- | :-: | ----------- |
| `preset` | `CameraPreset` |  否  | 默认 `.h720p` |

**返回值：** `LocalCameraTrack`

***

#### `createLocalScreenTrack(preset:audioPreset:)`

创建本地屏幕共享轨道。

```swift theme={null}
let screenTrack = srtc.createLocalScreenTrack(
    preset: .h1080p,
    audioPreset: .default
)
```

| 参数名           | 类型                   |  必填 | 说明                    |
| ------------- | -------------------- | :-: | --------------------- |
| `preset`      | `ScreenPreset`       |  否  | 屏幕共享视频预设，默认 `.h1080p` |
| `audioPreset` | `ScreenAudioPreset?` |  否  | macOS 下可用于开启屏幕音频      |

**返回值：** `LocalScreenTrack`

#### `createLocalScreenTrack(source:preset:audioPreset:)`

macOS 12.3+ 专用重载，用于指定显示器或窗口源。

```swift theme={null}
let track = srtc.createLocalScreenTrack(
    source: selectedSource,
    preset: .h1080p,
    audioPreset: .default
)
```

| 参数名           | 类型                     |  必填 | 说明                                         |
| ------------- | ---------------------- | :-: | ------------------------------------------ |
| `source`      | `ScreenCaptureSource?` |  否  | `DisplaySource` 或 `WindowSource`，为空时默认主显示器 |
| `preset`      | `ScreenPreset`         |  否  | 默认 `.h1080p`                               |
| `audioPreset` | `ScreenAudioPreset?`   |  否  | 是否采集系统音频                                   |

**返回值：** `LocalScreenTrack`

***

#### `createLocalCustomVideoTrack(desc:)`

创建自定义视频轨道，适合外部推帧场景。

```swift theme={null}
let customVideoTrack = srtc.createLocalCustomVideoTrack(desc: "canvas")
```

| 参数名    | 类型       |  必填 | 说明                 |
| ------ | -------- | :-: | ------------------ |
| `desc` | `String` |  否  | 轨道描述，默认 `"custom"` |

**返回值：** `LocalVideoTrack`

调用后可通过 `pushFrame(...)` 注入 `CVPixelBuffer`。

***

#### `createLocalCustomAudioTrack(desc:)`

创建自定义音频轨道，适合外部 PCM 输入场景。

```swift theme={null}
let customAudioTrack = srtc.createLocalCustomAudioTrack(desc: "bgm")
```

| 参数名    | 类型       |  必填 | 说明                 |
| ------ | -------- | :-: | ------------------ |
| `desc` | `String` |  否  | 轨道描述，默认 `"custom"` |

**返回值：** `LocalAudioTrack`

调用后可通过 `pushAudioBuffer(...)` 注入 `AVAudioPCMBuffer`。

***

### 相关页面

* [核心概念](/zh/rtc/swift/key-concepts)
* [Channel 与 Track](/zh/rtc/swift/api-reference/media-tracks)
* [事件参考](/zh/rtc/swift/events)
