更新时间:2024-10-23 GMT+08:00
SDK使用
以下为集成SDK进行实时音视频互动直播的基本流程:
- 创建引擎。
appId获取方法请参见创建应用。
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)。
- engineInfo:结构体具体请参见HRTCEngineConfig。
- context:引擎初始化参数,具体请参见HRTCEngineContext。
- 加入房间。
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:签名认证。签名的具体生成方法请参见接入鉴权,支持最大长度为1024。
- autoSubscribeAudio:是否主动订阅音频。
- autoSubscribeVideo:是否主动订阅视频。
- 设置本地视图。
m_pRtcEngine->setupLocalView(hwnd, HRTC_VIDEO_DISPLAY_MODE_HIDDEN);
- hwnd:视频窗口句柄。
- HRTC_VIDEO_DISPLAY_MODE_HIDDEN:图像填充模式,具体请参见HRTCVideoDisplayMode。
- 当连麦者加入房间,设置远端窗口。
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。
- 离开房间。
m_pRtcEngine->leaveRoom();
根据场景需要,如结束通话、关闭App或App切换至后台时,调用leaveRoom离开当前通话房间。
至此,互动直播基本流程可以成功运行。
父主题: All Platform C++ SDK