
# SDK使用
以下为集成SDK进行实时音视频互动直播的基本流程：
1. 创建引擎。 
   **appId** 获取方法请参见[创建应用](https://support.huaweicloud.com/usermanual-rtc/rtc_04_0001.html)。
   ```
   m_pRtcEngine = createHRtcEngine(); // 创建引擎
   HRTCLogConfig logConfig;
   logConfig.level = HRTC_LOG_LEVEL_DEBUG;
   logConfig.path = logPath;         // logPath为目录，非文件
   logConfig.logSize = 10 * 1024;
   logConfig.enable = true;          // 开启日志记录
   HRTCEngineConfig engineConfig;
   engineConfig.appId = appId;   // appId需在控制台中创建应用后获取.
   engineConfig.countryCode = countryCode; // 可以根据Grs国家码对照表传值，建议传"CN"
   engineConfig.enableHaTrace = true; // 打点开关
   HRTCEngineContext engineContext;
   engineContext.logConfig = logConfig;
   engineContext.engineConfig = engineConfig;
   engineContext.eventHandler = &m_engineEventHandler; // 事件回调对象指针
   m_pRtcEngine->initialize(&engineContext); // 初始化引擎 
   安卓平台调用m_pRtcEngine->initialize(engineInfo, eventHandler);
   ```
   - **m_engineEventHandler** ：引擎回调句柄，指定一个回调事件。SDK通过指定的事件通知应用程序的运行事件，如加入或离开房间等，具体请参见[事件回调（IHRTCEngine）](https://support.huaweicloud.com/csdk-rtc/rtc_05_0107.html)。
   
   - **engineInfo** ：结构体具体请参见[HRTCEngineConfig](https://support.huaweicloud.com/csdk-rtc/rtc_05_0128.html#rtc_05_0128__section689516306119)。
   
   - **context** ：引擎初始化参数，具体请参见[HRTCEngineContext](https://support.huaweicloud.com/csdk-rtc/rtc_05_0037.html#rtc_05_0037__section1671735584318)。
   
   
   
   
2. 加入房间。 
   ```
   HRTCJoinParam joinRoomParam;
   memset(&joinRoomParam, 0, sizeof(HRTCJoinParam));
   joinRoomParam.autoSubscribeAudio = true;
   joinRoomParam.autoSubscribeVideo = false;
   joinRoomParam.userId = userId; // userId用于标识同一房间的不同用户
   joinRoomParam.userName = userName; // 用户昵称，如无特殊需求，保持和userId一致即可
   joinRoomParam.authorization = authorization;
   joinRoomParam.ctime = m_ctime;
   joinRoomParam.roomId = roomId;
   joinRoomParam.userRole = m_roleType;
   joinRoomParam.scenario = 1;
   m_pRtcEngine->joinRoom(joinRoomParam);
   ```
   - **m_roleType**：用户角色。
   
   - **userId**：本端用户唯一标识。
   
   - **userName**：用户昵称，该昵称为UTF-8编码。
   
   - **roomId**：房间ID，房间唯一标识。
   
   - **scenario**：使用的场景（0=主动订阅（默认）; 1=TopN（千人）; 2=P2P; 3=RTSA CMD自动订阅）。
   
   - **ctime**：当前时间戳。
   
   - **authorization** ：签名认证。签名的具体生成方法请参见[接入鉴权](https://support.huaweicloud.com/csdk-rtc/rtc_05_0348.html)，支持最大长度为1024。
   
   - **autoSubscribeAudio**：是否主动订阅音频。
   
   - **autoSubscribeVideo**：是否主动订阅视频。
   
   
   
   
3. 设置本地视图。 
   ```
   m_pRtcEngine->setupLocalView(hwnd, HRTC_VIDEO_DISPLAY_MODE_HIDDEN);
   ```
   - **hwnd**：视频窗口句柄。
   
   - **HRTC_VIDEO_DISPLAY_MODE_HIDDEN** ：图像填充模式，具体请参见[HRTCVideoDisplayMode](https://support.huaweicloud.com/csdk-rtc/rtc_05_0128.html#rtc_05_0128__zh-cn_topic_0277015533_section162591326191818)。
   
   
   
   
4. 当连麦者加入房间，设置远端窗口。 
   ```
   void HWEngineEventHandler::onRemoteUserOnline(const char* roomId, const char* userId, const char* nickName)
   {
       wchar_t *room = StringUtility::HW_Utf8ToUnicodeW(roomId);
       wchar_t *user = StringUtility::HW_Utf8ToUnicodeW(userId);
       wchar_t *name = StringUtility::HW_Utf8ToUnicodeW(nickName);
       UserJoinInfo* userInfo = new UserJoinInfo();
       _tcscpy(userInfo->roomId, room);
       _tcscpy(userInfo->userId, user);
       _tcscpy(userInfo->nickname, name);
       if(m_hMainWnd != NULL) {
           ::PostMessage(m_hMainWnd, WM_USERJOIN, (WPARAM)userInfo, 0);
       }
       if (room != NULL) {
           free(room);
       }
       if (user != NULL) {
           free(user);
       }
       if (name != NULL) {
           free(name);
       }
   }
   //远端用户加入房间触发onRemoteUserOnline回调，设置远端窗口。
   if (m_pRtcEngine->startRemoteStreamView(userId, m_wndVideo[nIndex].GetSafeHwnd(), streamType) == 0) {
       m_pRtcEngine->updateRemoteRenderMode(userId, HRTC_VIDEO_DISPLAY_MODE_HIDDEN,HRTC_VIDEO_MIRROR_TYPE_DISABLE);
   }
   ```
   - **userId**：远端用户id，唯一标识。
   
   - **m_wndVideo\[nIndex\].GetSafeHwnd()**：视频窗口句柄。
   
   - **streamType**：视频分辨率，支持全高清、高清、标清和流畅选择。
   
   - **HRTC_VIDEO_DISPLAY_MODE_HIDDEN** ：图像填充模式，具体请参见[HRTCVideoDisplayMode](https://support.huaweicloud.com/csdk-rtc/rtc_05_0128.html#rtc_05_0128__zh-cn_topic_0277015533_section162591326191818)。
   
   
   
   
5. 离开房间。 
   ```
   m_pRtcEngine->leaveRoom();
   ```
   根据场景需要，如结束通话、关闭App或App切换至后台时，调用leaveRoom离开当前通话房间。
   至此，互动直播基本流程可以成功运行。
   
   
 
