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

# IRTCEngine

> Windows SRTC 音视频 SDK IRTCEngine 接口参考

## IRTCEngine

### 创建IRTCEngine

```cpp theme={null}
RTCENGINE_API StatusCode RTCENGINE_CALL RTCEngine_Init(IRTCEngine** rtc);
```

**参数**

| rtc | IRTCEngine 对象类 |
| --- | -------------- |

### 释放IRTCEngine

```cpp theme={null}
RTCENGINE_API void RTCENGINE_CALL RTCEngine_Free(IRTCEngine** rtc);
```

**参数**

| rtc | IRTCEngine 对象类 |
| --- | -------------- |

### 获取版本号信息

```cpp theme={null}
RTCENGINE_API StatusCode RTCENGINE_CALL RTCEngine_Version(const char*v1);
```

**参数**

| v1 | sdk版本号 |
| -- | ------ |

注：需要传入的时候需要外面分配内存，至少100长度

###

### 获取错误码描述

```cpp theme={null}
RTCENGINE_API void RTCENGINE_CALL RTCEngine_GetStatusMsg(StatusCode code, char* msg);
```

**参数**

| code | 错误码     |
| ---- | ------- |
| msg  | 错误码描述信息 |

注：msg需要传入的时候需要外面分配内存，至少100长度，中文编码gbk

## 基础函数

### 获取配置信息对象

```cpp theme={null}
virtual StatusCode getSetting(IRTCSetting** set) = 0;
```

**参数**

| set | sdk 配置信息类，详细内容[查看](./IRTCSetting.md) |
| --- | ------------------------------------ |

### 设置消息回调

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

**参数**

| e | 消息事件回调纯虚函数实体类，相关回调[点击查看](./IRTCEngineEvent.md) |
| - | ---------------------------------------------- |

##

## 频道相关函数

### 加入频道

```cpp theme={null}
virtual StatusCode joinChannel(const char* token) = 0;
```

**参数**

| token | 加入频道所需要的token |
| ----- | ------------- |

### 离开频道

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

###

### 获取自身用户信息

```cpp theme={null}
virtual StatusCode getMe(char** s, int* c) = 0;
```

**参数**

| s | 用户信息json    |
| - | ----------- |
| c | 用户信息json 长度 |

### 获取频道信息

```cpp theme={null}
virtual StatusCode getChannel(char** s, int* c) = 0;
```

**参数**

| s | 频道信息json    |
| - | ----------- |
| c | 频道信息json 长度 |

###

### 获取频道所有成员信息

```cpp theme={null}
virtual StatusCode getMembers(char** s, int* c) = 0;
```

**参数**

| s | 所有用户信息json array   |
| - | ------------------ |
| c | 所有用户信息json array长度 |

### 获取指定成员信息

```cpp theme={null}
virtual StatusCode getMember(const char* uid, char** s, int* c) = 0;
virtual StatusCode getMemberByLinkId(const char* linkId, char** s, int* c) = 0;
virtual StatusCode getMemberByLinkId(int linkId, char** s, int* c) = 0;
		
```

**参数**

| uid/linkid | 用户id,流媒体linkid |
| ---------- | -------------- |
| s          | 用户信息json       |
| c          | 用户信息json 长度    |

## 流媒体相关函数

### 网络测速

```cpp theme={null}
	virtual StatusCode probeNetwork(int time, int upindex, int downindex) = 0;
```

**参数**

| time      | 需要测速的时间，建议是10的倍数      |
| --------- | --------------------- |
| upindex   | 测速上行（单位KB），0 为不进行此项测速 |
| downindex | 测速下行（单位KB），0 为不进行此项测速 |

注：测速结果将在[回调](./IRTCEngineEvent.md#上行统计回调)内返回

### 获取摄像头信息

```cpp theme={null}
virtual StatusCode getEnumVideo(char** devices, int* iSize) = 0;
```

**参数**

| Devices | 摄像头信息json, [摄像头信息](../types.md#摄像头枚举信息) |
| ------- | --------------------------------------- |
| iSize   | 摄像头信息json 长度                            |

### 获取屏幕信息

```cpp theme={null}
virtual StatusCode getEnumScreen(char** devices, int* iSize) = 0;
```

**参数**

| Devices | 屏幕信息json, [共享屏幕信息](../types.md#共享屏幕枚举信息) |
| ------- | ---------------------------------------- |
| iSize   | 屏幕信息json 长度                              |

### 获取麦克风信息

```cpp theme={null}
virtual StatusCode getEnumAudio(char** devices, int* iSize) = 0;
```

**参数**

| Devices | 麦克风信息json, [麦克风信息](../types.md#麦克风/扬声器枚举信息) |
| ------- | ------------------------------------------- |
| iSize   | 麦克风信息json 长度                                |

### 获取扬声器信息

```cpp theme={null}
virtual StatusCode getEnumSpeaker(char** devices, int* iSize) = 0;
```

**参数**

| Devices | 扬声器信息json, [扬声器信息](../types.md#麦克风/扬声器枚举信息) |
| ------- | ------------------------------------------- |
| iSize   | 扬声器信息json 长度                                |

### 获取视频轨道对象

```cpp theme={null}
virtual StatusCode getCameraTrack(const char* track_key,IRTCLocalCameraTrack ** track) = 0;
```

**参数**

| track\_key | 本地视频轨道对象key，使用者维护此key。用于区分不通轨道对象，默认推流的desc |
| ---------- | ------------------------------------------ |
| track      | [视频轨道对象](./IRTCLocalScreenTrack.md)        |

### 获取共享屏幕流对象

```cpp theme={null}
virtual StatusCode getScreenTrack(const char* track_key,IRTCLocalScreenTrack ** track) = 0;
```

**参数**

| track\_key | 本地视频轨道对象key，使用者维护此key。用于区分不通轨道对象,默认推流的desc |
| ---------- | ------------------------------------------ |
| track      | [屏幕轨道对象](./IRTCLocalScreenTrack.md)        |

### 获取音频流对象

```cpp theme={null}
virtual StatusCode getAudioTrack(const char* track_key,IRTCLocalMicTrack** track) = 0;
```

**参数**

| track\_key | 本地视频轨道对象key，使用者维护此key。用于区分不通轨道对象,默认推流的desc |
| ---------- | ------------------------------------------ |
| track      | [麦克风轨道对象](./IRTCLocalAudioTrack.md)        |

### 获取成员音频轨道对象

```cpp theme={null}
virtual StatusCode getRemoteAudioTrack(const char* uid, const char* trackid, IRTCRemoteAudioTrack** track) = 0;
```

**参数**

| uid     | 用户id（空为全体用户）                            |
| ------- | --------------------------------------- |
| trackid | 用户音频流轨道id（空为全体轨道）                       |
| track   | [本地音频混音轨道对象](./IRTCRemoteAudioTrack.md) |

### 获取成员视频轨道对象

```cpp theme={null}
virtual StatusCode getRemoteVideoTrack(const char* uid, const char* trackid, IRTCRemoteVideoTrack** track) = 0;
```

**参数**

| uid     | 用户id                                  |
| ------- | ------------------------------------- |
| trackid | 用户视频流轨道id                             |
| track   | [成员视频轨道对象](./IRTCRemoteVideoTrack.md) |

### 获取合成流视频轨道对象

```cpp theme={null}
virtual StatusCode getMCUVideoTrack(IRTCRemoteVideoTrack** track) = 0;
```

**参数**

| track | [合成流视频轨道对象](./IRTCRemoteVideoTrack.md) |
| ----- | -------------------------------------- |

### 订阅流轨道

```cpp theme={null}
virtual StatusCode subscribe(IRTCTrack* tk ) = 0;
```

**参数**

| tk | 流轨道信息[IRTCRemoteVideoTrack](#xvHeQ)，[IRTCRemoteAudioTrack](#mxOa1) |
| -- | ------------------------------------------------------------------ |

### 取消订阅流轨道

```cpp theme={null}
virtual StatusCode unsubscribe(IRTCTrack* tk ) = 0;
```

**参数**

| tk | 流轨道信息[IRTCRemoteVideoTrack](#xvHeQ)，[IRTCRemoteAudioTrack](#mxOa1) |
| -- | ------------------------------------------------------------------ |

### 发布视频轨道

```cpp theme={null}
virtual StatusCode publish(IRTCTrack* tk, RTCVideoPublishOptions* opt = nullptr) = 0;
```

**参数**

| tk  | 流轨道信息，[IRTCLocalCameraTrack](#D2C4E)，[IRTCLocalScreenTrack](#WYT3t)，                    |
| --- | --------------------------------------------------------------------------------------- |
| opt | 推流轨道参数，空为，默认推流参数，[RTCVideoPublishOptions](../types.md#视频轨道推流信息（RTCVideoPublishOptions）) |

### 发布音频轨道

```cpp theme={null}
virtual StatusCode publish(IRTCTrack* tk, RTCAudioPublishOptions* opt = nullptr) = 0;
```

**参数**

| tk  | 流轨道信息，[IRTCLocalMicTrack](#zLaZA)                                                      |
| --- | -------------------------------------------------------------------------------------- |
| opt | 推流轨道参数，空为，默认推流参数，[RTCAudioPublishOptions](../types.md#音频轨道输出信息（RTCAudioOutputOptions）) |

## 其他

### 添加上传日志

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

**参数**

| type | 日志类型标识 |
| ---- | ------ |
| msg  | 日志内容   |

添加后的日志会上传到日志服务器上。
