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

# ISMeetingEngine 引擎接口

> Windows SMeeting SDK 引擎级 C++ 接口参考

`ISMeetingEngine` 是 SDK 引擎对象，负责登录会话、会议管理 HTTP 接口、频道生命周期、设备枚举、IM、资源盘等引擎级能力。

所有会中操作和媒体对象都在 [ISMeetingChannel](smeeting-channel) 中。

***

## 全局函数

### 初始化引擎

```cpp theme={null}
SMEETING_API StatusCode SMEETING_CALL SMeetingEngine_Init(ISMeetingEngine** meet);
```

**参数**

| 参数   | 类型                  | 说明        |
| ---- | ------------------- | --------- |
| meet | ISMeetingEngine\*\* | 输出的引擎对象指针 |

**返回值**

`StatusCode` - 错误码

### 获取 SDK 版本

```cpp theme={null}
SMEETING_API StatusCode SMEETING_CALL SMeetingEngine_Version(std::string& s);
```

**参数**

| 参数 | 类型           | 说明        |
| -- | ------------ | --------- |
| s  | std::string& | 输出版本信息字符串 |

**返回值**

`StatusCode` - 错误码

### 获取错误码描述

```cpp theme={null}
SMEETING_API void SMEETING_CALL SMeetingEngine_GetStatusMsg(StatusCode code, char* msg);
```

**参数**

| 参数   | 类型         | 说明        |
| ---- | ---------- | --------- |
| code | StatusCode | 错误码       |
| msg  | char\*     | 输出错误描述缓冲区 |

***

## 引擎配置与回调

### 获取引擎配置对象

```cpp theme={null}
virtual StatusCode getSetting(ISMeetingSetting** sett) = 0;
```

**参数**

| 参数   | 类型                   | 说明       |
| ---- | -------------------- | -------- |
| sett | ISMeetingSetting\*\* | 输出配置对象指针 |

**返回值**

`StatusCode` - 错误码

### 设置引擎事件回调

```cpp theme={null}
virtual StatusCode setEventHandler(ISMeetingEngineEvent* e) = 0;
```

**参数**

| 参数 | 类型                     | 说明     |
| -- | ---------------------- | ------ |
| e  | ISMeetingEngineEvent\* | 事件回调对象 |

**返回值**

`StatusCode` - 错误码

***

## 登录登出接口

### 用户登录

```cpp theme={null}
virtual StatusCode login(std::string token, Callback back = NULL) = 0;
```

**参数**

| 参数    | 类型          | 说明         |
| ----- | ----------- | ---------- |
| token | std::string | 登录凭证 token |
| back  | Callback    | 异步回调函数     |

**返回值**

`StatusCode` - 错误码

### 用户登出

```cpp theme={null}
virtual StatusCode logout(Callback back = NULL) = 0;
```

**参数**

| 参数   | 类型       | 说明     |
| ---- | -------- | ------ |
| back | Callback | 异步回调函数 |

**返回值**

`StatusCode` - 错误码

### 获取自身信息

```cpp theme={null}
virtual StatusCode getSelf(Callback back) = 0;
```

**参数**

| 参数   | 类型       | 说明     |
| ---- | -------- | ------ |
| back | Callback | 异步回调函数 |

**返回值**

`StatusCode` - 错误码

### 获取设备列表

```cpp theme={null}
virtual StatusCode listAgent(std::vector<int> type, int page, std::string find_key = "", Callback back = NULL) = 0;
```

**参数**

| 参数        | 类型                 | 说明     |
| --------- | ------------------ | ------ |
| type      | `std::vector<int>` | 设备类型列表 |
| page      | int                | 页码     |
| find\_key | std::string        | 搜索关键词  |
| back      | Callback           | 异步回调函数 |

**返回值**

`StatusCode` - 错误码

***

## 会议室管理接口

### 创建会议

```cpp theme={null}
virtual StatusCode createRoom(SMeetingCreateMeetingModel model, Callback back = NULL) = 0;
```

**参数**

| 参数    | 类型                         | 说明     |
| ----- | -------------------------- | ------ |
| model | SMeetingCreateMeetingModel | 房间配置模型 |
| back  | Callback                   | 异步回调函数 |

**返回值**

`StatusCode` - 错误码

### 更新房间信息

```cpp theme={null}
virtual StatusCode updateRoom(SMeetingCreateMeetingModel model, Callback back = NULL) = 0;
```

**参数**

| 参数    | 类型                         | 说明     |
| ----- | -------------------------- | ------ |
| model | SMeetingCreateMeetingModel | 房间配置模型 |
| back  | Callback                   | 异步回调函数 |

**返回值**

`StatusCode` - 错误码

### 更新背景与附件

```cpp theme={null}
virtual StatusCode updateBgAndAttach(std::string meeting_id, std::string background, std::vector<SMeetingMeetingAttachments>, Callback back = NULL) = 0;
```

**参数**

| 参数          | 类型                                        | 说明     |
| ----------- | ----------------------------------------- | ------ |
| meeting\_id | std::string                               | 会议 ID  |
| background  | std::string                               | 背景 URL |
| attachments | `std::vector<SMeetingMeetingAttachments>` | 附件列表   |
| back        | Callback                                  | 异步回调函数 |

**返回值**

`StatusCode` - 错误码

### 获取进行中的会议

```cpp theme={null}
virtual StatusCode attendeeRoom(int page, Callback back = NULL) = 0;
```

**参数**

| 参数   | 类型       | 说明     |
| ---- | -------- | ------ |
| page | int      | 页码     |
| back | Callback | 异步回调函数 |

**返回值**

`StatusCode` - 错误码

### 获取历史会议

```cpp theme={null}
virtual StatusCode attendedRoom(int page, Callback back = NULL) = 0;
```

**参数**

| 参数   | 类型       | 说明     |
| ---- | -------- | ------ |
| page | int      | 页码     |
| back | Callback | 异步回调函数 |

**返回值**

`StatusCode` - 错误码

### 获取会议详情

```cpp theme={null}
virtual StatusCode detailRoom(std::string meeting_id, Callback back = NULL) = 0;
```

**参数**

| 参数          | 类型          | 说明     |
| ----------- | ----------- | ------ |
| meeting\_id | std::string | 会议 ID  |
| back        | Callback    | 异步回调函数 |

**返回值**

`StatusCode` - 错误码

### 取消会议

```cpp theme={null}
virtual StatusCode cancelRoom(std::string meeting_id, Callback back = NULL) = 0;
```

**参数**

| 参数          | 类型          | 说明     |
| ----------- | ----------- | ------ |
| meeting\_id | std::string | 会议 ID  |
| back        | Callback    | 异步回调函数 |

**返回值**

`StatusCode` - 错误码

### 获取会议成员列表

```cpp theme={null}
virtual StatusCode participantRoom(std::string meeting_id, int page, Callback back = NULL) = 0;
```

**参数**

| 参数          | 类型          | 说明     |
| ----------- | ----------- | ------ |
| meeting\_id | std::string | 会议 ID  |
| page        | int         | 页码     |
| back        | Callback    | 异步回调函数 |

**返回值**

`StatusCode` - 错误码

***

## 会议频道接口

### 创建频道

```cpp theme={null}
virtual StatusCode createChannel(std::string roomno, ISMeetingChannel** ch) = 0;
```

**参数**

| 参数     | 类型                   | 说明       |
| ------ | -------------------- | -------- |
| roomno | std::string          | 房间号      |
| ch     | ISMeetingChannel\*\* | 输出频道对象指针 |

`createChannel` 只创建频道对象，**不会**立即入会。返回后需要通过 `ISMeetingChannel::enter()` 真正入会。

**返回值**

`StatusCode` - 错误码

### 通过会议 ID 创建频道

```cpp theme={null}
virtual StatusCode createChannelByMeetingId(std::string meetingid, ISMeetingChannel** ch) = 0;
```

**参数**

| 参数        | 类型                   | 说明       |
| --------- | -------------------- | -------- |
| meetingid | std::string          | 会议 ID    |
| ch        | ISMeetingChannel\*\* | 输出频道对象指针 |

**返回值**

`StatusCode` - 错误码

### 离开频道

```cpp theme={null}
virtual StatusCode leaveChannel(std::string channelId, Callback back = NULL) = 0;
```

**参数**

| 参数        | 类型          | 说明                              |
| --------- | ----------- | ------------------------------- |
| channelId | std::string | 频道 ID，即 `createChannel` 时传入的房间号 |
| back      | Callback    | 异步回调函数                          |

离开后频道对象会被销毁，不要再使用原来的 `ISMeetingChannel*` 指针。

**返回值**

`StatusCode` - 错误码

### 离开所有频道

```cpp theme={null}
virtual StatusCode leaveAllChannel(Callback back = NULL) = 0;
```

**参数**

| 参数   | 类型       | 说明     |
| ---- | -------- | ------ |
| back | Callback | 异步回调函数 |

**返回值**

`StatusCode` - 错误码

### 获取当前频道 ID 列表

```cpp theme={null}
virtual StatusCode getChannelIds(std::string& s) = 0;
```

**参数**

| 参数 | 类型           | 说明                    |
| -- | ------------ | --------------------- |
| s  | std::string& | 输出 JSON 数组形式的频道 ID 列表 |

**返回值**

`StatusCode` - 错误码

***

## 设备枚举接口

### 获取视频设备列表

```cpp theme={null}
virtual StatusCode getEnumVideo(std::string& dev) = 0;
```

**参数**

| 参数  | 类型           | 说明              |
| --- | ------------ | --------------- |
| dev | std::string& | 输出视频设备 JSON 字符串 |

**返回值**

`StatusCode` - 错误码

### 获取屏幕设备列表

```cpp theme={null}
virtual StatusCode getEnumScreen(std::string& dev) = 0;
```

**参数**

| 参数  | 类型           | 说明              |
| --- | ------------ | --------------- |
| dev | std::string& | 输出屏幕设备 JSON 字符串 |

**返回值**

`StatusCode` - 错误码

### 获取音频设备列表

```cpp theme={null}
virtual StatusCode getEnumAudio(std::string& dev) = 0;
```

**参数**

| 参数  | 类型           | 说明              |
| --- | ------------ | --------------- |
| dev | std::string& | 输出音频设备 JSON 字符串 |

**返回值**

`StatusCode` - 错误码

### 获取扬声器设备列表

```cpp theme={null}
virtual StatusCode getEnumSpeaker(std::string& dev) = 0;
```

**参数**

| 参数  | 类型           | 说明               |
| --- | ------------ | ---------------- |
| dev | std::string& | 输出扬声器设备 JSON 字符串 |

**返回值**

`StatusCode` - 错误码

***

## 日志与 IM 接口

### 上传日志

```cpp theme={null}
virtual StatusCode addUploadLog(const char* type, const char* msg) = 0;
```

**参数**

| 参数   | 类型           | 说明   |
| ---- | ------------ | ---- |
| type | const char\* | 日志类型 |
| msg  | const char\* | 日志内容 |

**返回值**

`StatusCode` - 错误码

### 启用 IM

```cpp theme={null}
virtual StatusCode enableIm(Callback back = NULL) = 0;
```

**参数**

| 参数   | 类型       | 说明     |
| ---- | -------- | ------ |
| back | Callback | 异步回调函数 |

**返回值**

`StatusCode` - 错误码

### 禁用 IM

```cpp theme={null}
virtual void disableIm(Callback back = NULL) = 0;
```

**参数**

| 参数   | 类型       | 说明     |
| ---- | -------- | ------ |
| back | Callback | 异步回调函数 |

***

## 云存储与资源管理接口

### 预签名上传

```cpp theme={null}
virtual StatusCode presignedPutObject(std::string type, std::string meeting_id, std::string ext, Callback back = NULL) = 0;
```

**参数**

| 参数          | 类型          | 说明     |
| ----------- | ----------- | ------ |
| type        | std::string | 文件类型   |
| meeting\_id | std::string | 会议 ID  |
| ext         | std::string | 文件扩展名  |
| back        | Callback    | 异步回调函数 |

**返回值**

`StatusCode` - 错误码

### 预签名下载

```cpp theme={null}
virtual StatusCode presignedGetObject(std::string id, std::string res_key, Callback back = NULL) = 0;
```

**参数**

| 参数       | 类型          | 说明     |
| -------- | ----------- | ------ |
| id       | std::string | 资源 ID  |
| res\_key | std::string | 资源键    |
| back     | Callback    | 异步回调函数 |

**返回值**

`StatusCode` - 错误码

### 资源列表

```cpp theme={null}
virtual StatusCode resourcesList(std::string parent_id, std::string meeting_id, std::string res_name, int page, Callback back = NULL) = 0;
```

**参数**

| 参数          | 类型          | 说明     |
| ----------- | ----------- | ------ |
| parent\_id  | std::string | 父资源 ID |
| meeting\_id | std::string | 会议 ID  |
| res\_name   | std::string | 资源名称   |
| page        | int         | 页码     |
| back        | Callback    | 异步回调函数 |

**返回值**

`StatusCode` - 错误码

### 创建资源

```cpp theme={null}
virtual StatusCode resourcesCreate(SMeetingResourcesModel* mode, Callback back = NULL) = 0;
```

**参数**

| 参数   | 类型                       | 说明     |
| ---- | ------------------------ | ------ |
| mode | SMeetingResourcesModel\* | 资源模型   |
| back | Callback                 | 异步回调函数 |

**返回值**

`StatusCode` - 错误码

### 重命名资源

```cpp theme={null}
virtual StatusCode resourcesRename(std::string id, std::string res_key, std::string res_name, Callback back = NULL) = 0;
```

**参数**

| 参数        | 类型          | 说明     |
| --------- | ----------- | ------ |
| id        | std::string | 资源 ID  |
| res\_key  | std::string | 资源键    |
| res\_name | std::string | 新资源名称  |
| back      | Callback    | 异步回调函数 |

**返回值**

`StatusCode` - 错误码

### 移动资源

```cpp theme={null}
virtual StatusCode resourcesMoveto(std::string id, std::string res_key, std::string parent_id, Callback back = NULL) = 0;
```

**参数**

| 参数         | 类型          | 说明       |
| ---------- | ----------- | -------- |
| id         | std::string | 资源 ID    |
| res\_key   | std::string | 资源键      |
| parent\_id | std::string | 目标父资源 ID |
| back       | Callback    | 异步回调函数   |

**返回值**

`StatusCode` - 错误码

### 删除资源

```cpp theme={null}
virtual StatusCode resourcesRemove(std::string id, std::string res_key, Callback back = NULL) = 0;
```

**参数**

| 参数       | 类型          | 说明     |
| -------- | ----------- | ------ |
| id       | std::string | 资源 ID  |
| res\_key | std::string | 资源键    |
| back     | Callback    | 异步回调函数 |

**返回值**

`StatusCode` - 错误码

### 设置会议背景

```cpp theme={null}
virtual StatusCode resourcesMeetingBg(std::string id, Callback back = NULL) = 0;
```

**参数**

| 参数   | 类型          | 说明     |
| ---- | ----------- | ------ |
| id   | std::string | 资源 ID  |
| back | Callback    | 异步回调函数 |

**返回值**

`StatusCode` - 错误码

***

## 释放接口

### 释放引擎

```cpp theme={null}
virtual void del() = 0;
```
