更新时间:2024-10-23 GMT+08:00
分享

SDK使用

以下为集成SDK进行实时音视频互动直播的基本流程:

  1. 创建引擎。

    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

  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:签名认证。签名的具体生成方法请参见接入鉴权,支持最大长度为1024。
    • autoSubscribeAudio:是否主动订阅音频。
    • autoSubscribeVideo:是否主动订阅视频。

  3. 设置本地视图。

    m_pRtcEngine->setupLocalView(hwnd, HRTC_VIDEO_DISPLAY_MODE_HIDDEN);
    • hwnd:视频窗口句柄。
    • HRTC_VIDEO_DISPLAY_MODE_HIDDEN:图像填充模式,具体请参见HRTCVideoDisplayMode

  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

  5. 离开房间。

    m_pRtcEngine->leaveRoom();

    根据场景需要,如结束通话、关闭App或App切换至后台时,调用leaveRoom离开当前通话房间。

    至此,互动直播基本流程可以成功运行。

相关文档