> ## 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 不能混用。

# 自定义视频流预设

> Android SRTC 音视频 SDK 自定义视频流预设 PreOptionCustomVideo

本页说明自定义视频流预设 `PreOptionCustomVideo`，用于 [`RTCEngine.getLocalCustomVideoTrack`](/zh/rtc/android/api-reference/RTCEngine) 获取的 [`LocalCustomVideoTrack`](/zh/rtc/android/api-reference/LocalCustomVideoTrack)（向已发布轨道推送外部原始 YUV 帧）。预设通用结构（采集配置 + 推送配置）与发布阶段的 `PublishCustomOptions` 见 [摄像头预设](/zh/rtc/android/presets/camera)。

## PreOptionCustomVideo

作用说明：自定义视频轨道预设，组合自定义采集参数与视频推送参数。

### 结构定义

`PreOptionCustomVideo(capture: CustomVideoCaptureOptions, publish: VideoPublishOptions)`

| 属性名称    | 数据类型                        | 说明          |
| ------- | --------------------------- | ----------- |
| capture | `CustomVideoCaptureOptions` | 自定义视频采集侧参数。 |
| publish | `VideoPublishOptions`       | 自定义视频推送参数。  |

### 采集配置 CustomVideoCaptureOptions

作用说明：声明外部帧源的规格，供 SDK 建立发布轨道时参考。SDK 本身不采集自定义视频，实际帧由业务侧通过 `LocalCustomVideoTrack.inputData` 送入。

| 属性名称       | 数据类型  | 说明    |
| ---------- | ----- | ----- |
| width      | `Int` | 采集宽度。 |
| height     | `Int` | 采集高度。 |
| maxFps     | `Int` | 采集帧率。 |
| maxBitrate | `Int` | 采集码率。 |

### 推送配置 VideoPublishOptions

作用说明：同视频发布参数结构（字段见 [摄像头预设](/zh/rtc/android/presets/camera)）。

* 默认自定义视频预设使用 `desc = TRACK_CUSTOM`（`"custom"`）
* 屏幕场景预设使用 `desc = TRACK_SHARE`（`"screen"`）
* 自定义视频不使用联播，`simulcasts` 固定为 `null`

### 内置预设

作用说明：SDK 提供两种自定义视频预设 `PreOptionCustomVideo.def`、`PreOptionCustomVideo.screen`。

```kotlin theme={null}
// def —— 默认自定义流，轨道描述 custom
capture: width=1920, height=1080, maxFps=10, maxBitrate=1024*1024
publish: desc="custom"(TRACK_CUSTOM), codec=H264, maxBitrate=1024*1024,
         width=1920, height=1080, maxFps=10, props=null, simulcasts=null

// screen —— 以屏幕共享轨道描述发布外部画面
capture: width=1920, height=1080, maxFps=10, maxBitrate=1024*1024
publish: desc="screen"(TRACK_SHARE), codec=H264, maxBitrate=1024*1024,
         width=1920, height=1080, maxFps=10, props=null, simulcasts=null
```

### 使用建议

* 送帧分辨率与 `publish.width` / `publish.height` 保持一致，避免额外缩放开销；帧率不要超过 `maxFps`。
* 需要以“共享”身份出现在远端时用 `PreOptionCustomVideo.screen`，或在 `publishLocalVideo` 时通过 `PublishCustomOptions(desc = TrackDesc.TRACK_SHARE.value)` 覆盖 `desc`。
* 轨道实例在 SDK 内按单例缓存，重复获取会用新的 `preOpt` 覆盖旧值，切换预设后需重新发布。
* 完整推流流程见 [自定义推流](/zh/rtc/android/advanced/custom-track)。
