> ## 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/...` 这一套对外开放，需用 app_id + app_key 做 HMAC-SHA256 签名，只能从业务方自己的后端调用。文档中若出现其它前缀的接口，均为内部接口，不要建议客户调用。
> app_key 是服务端密钥，绝不能出现在客户端代码、前端配置或移动 App 里。客户端加入频道用的 token 必须由业务方后端调用 `/server/v1/channel/grant` 签发后下发。
> SRTC 与 SMeeting 是上下两层不同的产品，术语不通用：SRTC 是音视频底座，说「频道 channel」「加入 / 退出」；SMeeting 建在 SRTC 之上，说「房间 room」「会议 meeting」「进入 / 退出」。回答时按用户所在的层用对应术语，不要把「房间」「会议」安到 SRTC 的接口上。
> 同一能力在各端 SDK 里的包名、类名、方法名并不相同。写示例代码时请使用文档中该端自己的 API，不要把一个端的写法套到另一个端上。

# SMeetingRemoteVideoView

> 渲染远端成员画面的 SwiftUI 组件，视图出现与消失时自动完成订阅和退订

`SMeetingRemoteVideoView` 是渲染远端成员画面的 SwiftUI 组件。它把「订阅 / 退订」和「视图生命周期」绑定在一起，你只要让视图出现和消失，订阅关系就跟着走。

可用性：iOS 13.0+ / macOS 10.15+。

***

### `init(meeting:uid:trackDesc:)`

```swift theme={null}
SMeetingRemoteVideoView(
    meeting: meeting,
    uid: user.uid,
    trackDesc: .cameraBig
)
.frame(height: 180)
```

| 参数名         | 类型          |  必填 | 说明                                     |
| ----------- | ----------- | :-: | -------------------------------------- |
| `meeting`   | `SMeeting`  |  是  | SDK 实例                                 |
| `uid`       | `String`    |  是  | 要渲染的远端成员 ID                            |
| `trackDesc` | `TrackDesc` |  是  | 轨道描述，摄像头传 `.cameraBig`，屏幕共享传 `.screen` |

**返回值：** 一个 SwiftUI `View`

***

### 行为约定

* 视图出现时按 `(uid, trackDesc)` 发起订阅，视图消失时退订
* `uid` 或 `trackDesc` 变化时会自动退订旧的、订阅新的，你不需要给视图加 `id(...)` 强制重建
* 布局切换导致视图重建（旧实例消失、新实例紧接着出现）时不会产生多余的退订 + 重订，画面不会闪断
* 同一路画面在多个位置同时渲染时，关掉其中一处不会影响其它位置
* 订阅完成与底层媒体到达不是同一时刻，组件会在数据真正到达后自动完成绑定，你不需要做延时或重试
* 订阅失败不会崩溃，视图保持空白，失败原因会写进 SDK 日志

***

### 不适用的场景

以下情况请改用其它入口：

| 场景             | 使用                                          |
| -------------- | ------------------------------------------- |
| 渲染本端摄像头 / 共享   | `SRTCVideoView(track: meeting.cameraTrack)` |
| UIKit / AppKit | `startPlayRemoteVideo(view:uid:trackDesc:)` |
| 需要把订阅时机和渲染时机分开 | `subscribeRemoteVideoTrack(uid:trackDesc:)` |

***

### 相关页面

* [视频渲染](/zh/meeting/swift/advanced/video-rendering)
* [媒体控制接口](/zh/meeting/swift/api-reference/media-control)
