实现基础功能

更新时间: 2023/06/09 10:12:03

本文为您介绍如何通过 NEMeetingKit 提供的一套简单易用的接口,快速地将音视频会议基础功能集成至现有应用中。

会议状态流程图

预约会议或即时会议的状态流转图如下所示。

会议状态.png

API 时序图

NEMeetingKit 实现在线会议的主要流程如下图所示。

meeting_flow_chart.jpg

初始化 SDK

在调用 SDK 其他接口之前,您首先需要完成初始化操作。

  • 在初始化前,请将头文件 nemeetingkit_interface_include.h 和命名空间 USING_NS_NNEM_SDK_INTERFACE 引入至您的项目中。
  • 请不要重复初始化,否则 SDK 会报错。
  1. 调用 initialize 方法完成初始化操作。SDK 会根据您指定的信息在 Windows 系统 %LocalAppData% 目录下创建缓存文件。

    示例代码如下:

    NEMeetingKitConfig config;
    QString displayName = QObject::tr("NetEase Meeting");
    QByteArray byteDisplayName = displayName.toUtf8();
    // 设置你的 AppKey
    config.setAppKey("Your application key");
    // 设置程序启动后的显示名称,如 “网易会议”,在加入会议时会提示“正在进入网易会议...”
    config.getAppInfo()->ProductName(byteDisplayName.data());
    // 设置您的组织名
    config.getAppInfo()->OrganizationName("NetEase");
    // 设置您的应用程序名称
    config.getAppInfo()->ApplicationName("Meeting");
    // 设置您的域名信息
    config.setDomain("yunxin.163.com");
    NEMeetingKit::getInstance()->initialize(config, [this](NEErrorCode errorCode, const std::string& errorMessage) {
        ...
    });
    
  2. 调用 isInitialized 方法查询初始化状态。

    示例代码如下:

    auto flag = NEMeetingKit::getInstance()->isInitialized();// 返回 true 表示已经初始化,返回 false 表示未初始化
    

登录鉴权

请求 SDK 进行登录鉴权,您只有完成 SDK 登录鉴权才可以创建会议。

NEMeetingKit 提供了多种登录方式供您选择,调用不同的登录接口需要传入不同的参数,具体说明如下表。

登录方式 说明 接口 参数 其他
Token 登录 - NEMeetingKit#login accountId、accountToken 账号信息需要从网易会议服务端获取,由您自行实现相关业务逻辑。
网易会议账号登录 - NEMeetingKit#loginWithNEMeeting username、password -
  • 使用账号 ID 和 Token 登录。

    示例代码如下:

    auto authService = NEMeetingKit::getInstance()->getAuthService();
    if (authService)
    {
        // 指定您登录到 SDK 所使用的账户
        QByteArray byteAccountId = accountId.toUtf8();
        // 指定您登录到 SDK 使用的密码
        QByteArray byteAccountToken = accountToken.toUtf8();
        // 执行登录操作
        authService->login(byteAccountId.data(), byteAccountToken.data(), [this](NEErrorCode errorCode, const std::string& errorMessage) {
            ...
        });
    }
    
  • 使用网易会议账号登录。

    示例代码如下:

    auto authService = NEMeetingSDK::getInstance()->getAuthService();
    if (authService)
    {
        // 指定网易会议的用户名及密码,您可以通过 RESTful API 来注册网易会议账号
        authService->loginWithNEMeeting(username.toStdString(), password.toStdString(), [=](NEErrorCode errorCode, const std::string& errorMessage) {
            ...
        });
    }
    

入会前设置音频开关状态

  1. 调用 isTurnOnMyAudioWhenJoinMeetingEnabled 方法获取音频开关状态。

    示例代码如下:

    // 入会前获取音频开关状态
    auto ipcSettingService = NEMeetingKit::getInstance()->getSettingsService();
    if (ipcSettingService)
    {
        auto AudioController = ipcSettingService->GetAudioController();
        if (AudioController)
        {
            //std::promise<bool> promise;
            AudioController->isTurnOnMyAudioWhenJoinMeetingEnabled([this](NEErrorCode errorCode, const std::string& errorMessage, const bool& bOn){
                // errorCode 错误码,errorMessage 错误信息,bOn 音频开关状态
            });
        }
    }
    
  2. 调用 setTurnOnMyAudioWhenJoinMeeting 方法设置音频开关状态。

    示例代码如下:

    // 入会前设置音频开关状态
    auto ipcSettingService = NEMeetingKit::getInstance()->getSettingsService();
    if (ipcSettingService)
    {
        auto audioController = ipcSettingService->GetAudioController();
        if (audioController)
        {
            audioController->setTurnOnMyAudioWhenJoinMeeting(checkAudio, [this, checkAudio](NEErrorCode errorCode, const std::string& errorMessage){
                // errorCode 错误码,errorMessage checkAudio 音频开关状态
            });
        }
    }
    

入会前设置视频开关状态

  1. 调用 isTurnOnMyAudioWhenJoinMeetingEnabled 方法获取视频开关状态。

    示例代码如下:

    // 入会前获取视频开关状态
    auto ipcSettingService = NEMeetingKit::getInstance()->getSettingsService();
    if (ipcSettingService)
    {
        auto videoController = ipcSettingService->GetVideoController();
        if (videoController)
        {
            videoController->isTurnOnMyVideoWhenJoinMeetingEnabled([this](NEErrorCode errorCode, const std::string& errorMessage, const bool& bOn){
                // errorCode 错误码,errorMessage 错误信息,bOn 视频开关状态
            });
        }
    }
    
  2. 调用 setTurnOnMyAudioWhenJoinMeeting 方法设置视频开关状态。

    示例代码如下:

    // 入会前设置视频开关状态
    auto ipcSettingService = NEMeetingKit::getInstance()->getSettingsService();
    if (ipcSettingService)
    {
        auto videoController = ipcSettingService->GetVideoController();
        if (videoController)
        {
            videoController->setTurnOnMyVideoWhenJoinMeeting(checkVideo, [this, checkVideo](NEErrorCode errorCode, const std::string& errorMessage){
                // errorCode 错误码,errorMessage 错误信息,checkVideo 视频开关状态
            });
        }
    }
    

创建会议

在已经完成 SDK 登录鉴权的状态下,创建并开始一个新的会议。

  1. 调用 getAuthService 方法获取个人会议 ID。

    示例代码如下:

    // 获取用户信息
    auto ipcAuthService = NEMeetingKit::getInstance()->getAuthService();
    if (ipcAuthService)
    {
        ipcAuthService->getAccountInfo([=](NEErrorCode errorCode, const std::string& errorMessage, const AccountInfo& authInfo) {
            // errorCode 错误码,errorMessage authInfo 用户信息
        });
    }
    
  2. 配置创建会议相关参数,调用 startMeeting 方法创建会议并进行回调处理。您可根据错误码判断接口是否调用成功。

    • V3.12.0及之后版本的示例代码如下:
    auto meetingService = NEMeetingKit::getInstance()->getMeetingService();
    if (meetingService)
    {
        QByteArray byteMeetingNum = meetingNum.toUtf8();
        QByteArray byteNickname = nickname.toUtf8();
    
        NEStartMeetingParams params;
        // 指定您要创建会议的会议 ID。若创建个人会议,则此处应传调用服务端创建会议接口时返回的 meetingNum(10 位数字的个人会议码);若创建随机会议,则置空,SDK 会使用 9 位数字的随机会议码
        params.meetingNum = byteMeetingNum.data();
        // 指定您加入会议后使用的昵称,长度最大为 20 字符
        params.displayName = byteNickname.data();
        // 设置是否在加入会议后启用视频和音频设备,是否显示邀请和聊天室按钮等
        params.roleBinds["userUuid"] = cohost;
        //指定用户角色类型,可以设置为 host,cohost,member
    
        NEStartMeetingOptions options;
        options.noAudio = !audio;
        options.noVideo = !video;
        options.noChat = !enableChatroom;
        options.noInvite = !enableInvitation;
        options.noWhiteboard = !noWhiteboard;
        options.noRename = !noRename;
        options.noSip = !noSip;
        options.defaultWindowMode = NORMAL_MODE;
        options.showMeetingRemainingTip = false;
    
        NEMeetingChatroomConfig chatroomConfig; //配置聊天室
        chatroomConfig.enableFileMessage = true //是否允许发送/接收文件消息,默认为 true
        chatroomConfig.enableImageMessage = true; //是否允许发送/接收图片消息,默认为 true
    
        // 通过 options 设置自定义菜单
        auto applicationPath = qApp->applicationDirPath();
        for (auto i = 0; i < 3; i++)
        {
            NEMeetingMenuItem item;
            item.itemId = NEM_MORE_MENU_USER_INDEX + i + 1;
            item.itemTitle = QString(QStringLiteral("Submenu") + QString::number(i + 1)).toStdString();
            item.itemImage = QString(applicationPath + "/submenu_icon.png").toStdString();
            options.full_more_menu_items_.push_back(item);
        }
            meetingService->startMeeting(params, options, [this](NEErrorCode errorCode, const std::string& errorMessage) {
            // ... 创建会议后的回调函数
        });
    }
    
    • V3.9.0及之前版本的示例代码如下:
    auto meetingService = NEMeetingKit::getInstance()->getMeetingService();
    if (meetingService)
    {
        QByteArray byteMeetingId = meetingId.toUtf8();
        QByteArray byteNickname = nickname.toUtf8();
    
        NEStartMeetingParams params;
        // 指定您要创建会议的会议 ID。若创建个人会议,则此处应传调用服务端创建会议接口时返回的 meetingNum(10 位数字的个人会议码);若创建随机会议,则置空,SDK 会使用 9 位数字的随机会议码
        params.meetingId = byteMeetingId.data();
        // 指定您加入会议后使用的昵称,长度最大为 20 字符
        params.displayName = byteNickname.data();
        // 设置是否在加入会议后启用视频和音频设备,是否显示邀请和聊天室按钮等
        params.roleBinds["userUuid"] = cohost;
        //指定用户角色类型,可以设置为 host,cohost,member
    
        NEStartMeetingOptions options;
        options.noAudio = !audio;
        options.noVideo = !video;
        options.noChat = !enableChatroom;
        options.noInvite = !enableInvitation;
        options.noWhiteboard = !noWhiteboard;
        options.noRename = !noRename;
        options.noSip = !noSip;
        options.defaultWindowMode = NORMAL_MODE;
        options.showMeetingRemainingTip = false;
    
        NEMeetingChatroomConfig chatroomConfig; //配置聊天室
        chatroomConfig.enableFileMessage = true //是否允许发送/接收文件消息,默认为 true
        chatroomConfig.enableImageMessage = true; //是否允许发送/接收图片消息,默认为 true
    
        // 通过 options 设置自定义菜单
        auto applicationPath = qApp->applicationDirPath();
        for (auto i = 0; i < 3; i++)
        {
            NEMeetingMenuItem item;
            item.itemId = NEM_MORE_MENU_USER_INDEX + i + 1;
            item.itemTitle = QString(QStringLiteral("Submenu") + QString::number(i + 1)).toStdString();
            item.itemImage = QString(applicationPath + "/submenu_icon.png").toStdString();
            options.full_more_menu_items_.push_back(item);
        }
            meetingService->startMeeting(params, options, [this](NEErrorCode errorCode, const std::string& errorMessage) {
            // ... 创建会议后的回调函数
        });
    }
    
  3. 会议成功创建后,SDK 会拉起会议界面并接管会议逻辑:创建会议的用户会自动成为该会议的主持人,可以进行相关的会议控制操作;其他用户可以通过该会议号入会。

加入会议

在已经完成 SDK 登录鉴权的状态下,加入一个当前正在进行中的会议。

配置加入会议相关参数,调用 joinMeeting 方法创建会议并进行回调处理。您可根据错误码判断接口是否调用成功。

  • V3.12.0及之后版本的示例代码如下:

    // 
    auto meetingService = NEMeetingKit::getInstance()->getMeetingService();
    if (meetingService)
    {
        QByteArray byteMeetingNum = meetingNum.toUtf8();
        QByteArray byteNickname = nickname.toUtf8();
    
        NEJoinMeetingParams params;
        // 指定您要加入的会议 ID,此处应传调用服务端创建会议接口时返回的 meetingNum
        params.meetingNum = byteMeetingNum.data();
        // 指定您加入到会议后使用的昵称,长度最大为 20 字符
        params.displayName = byteNickname.data();
    
        // 设置是否在加入会议后启用视频和音频,是否显示邀请和聊天室按钮等
        NEJoinMeetingOptions options;
        options.noAudio = !audio;
        options.noVideo = !video;
        options.noChat = !enableChatroom;
        options.noInvite = !enableInvitation;
        options.noWhiteboard = !noWhiteboard;
        options.noRename = !noRename;
        options.noSip = !noSip;
        options.defaultWindowMode = NORMAL_MODE;
        options.showMeetingRemainingTip = false;                      
    
        NEMeetingChatroomConfig chatroomConfig; //配置聊天室
        chatroomConfig.enableFileMessage = true //是否允许发送/接收文件消息,默认为 true
        chatroomConfig.enableImageMessage = true; //是否允许发送/接收图片消息,默认为 true
    
        // 通过 options 设置自定义菜单
        auto applicationPath = qApp->applicationDirPath();
        for (auto i = 0; i < 3; i++)
        {
            NEMeetingMenuItem item;
            item.itemId = NEM_MORE_MENU_USER_INDEX + i + 1;
            item.itemTitle = QString(QStringLiteral("Submenu") + QString::number(i + 1)).toStdString();
            item.itemImage = QString(applicationPath + "/submenu_icon.png").toStdString();
            options.full_more_menu_items_.push_back(item);
        }
        meetingService->joinMeeting(params, options, [this](NEErrorCode errorCode, const std::string& errorMessage) {
            // 加入会议的回调,可通过返回值判断是否成功
        });
    }
    
  • V3.9.0及之前版本的示例代码如下:

    // 
    auto meetingService = NEMeetingKit::getInstance()->getMeetingService();
    if (meetingService)
    {
        QByteArray byteMeetingId = meetingId.toUtf8();
        QByteArray byteNickname = nickname.toUtf8();
    
        NEJoinMeetingParams params;
        // 指定您要加入的会议 ID,此处应传调用服务端创建会议接口时返回的 meetingNum
        params.meetingId = byteMeetingId.data();
        // 指定您加入到会议后使用的昵称,长度最大为 20 字符
        params.displayName = byteNickname.data();
    
        // 设置是否在加入会议后启用视频和音频,是否显示邀请和聊天室按钮等
        NEJoinMeetingOptions options;
        options.noAudio = !audio;
        options.noVideo = !video;
        options.noChat = !enableChatroom;
        options.noInvite = !enableInvitation;
        options.noWhiteboard = !noWhiteboard;
        options.noRename = !noRename;
        options.noSip = !noSip;
        options.defaultWindowMode = NORMAL_MODE;
        options.showMeetingRemainingTip = false;                      
    
        NEMeetingChatroomConfig chatroomConfig; //配置聊天室
        chatroomConfig.enableFileMessage = true //是否允许发送/接收文件消息,默认为 true
        chatroomConfig.enableImageMessage = true; //是否允许发送/接收图片消息,默认为 true
    
        // 通过 options 设置自定义菜单
        auto applicationPath = qApp->applicationDirPath();
        for (auto i = 0; i < 3; i++)
        {
            NEMeetingMenuItem item;
            item.itemId = NEM_MORE_MENU_USER_INDEX + i + 1;
            item.itemTitle = QString(QStringLiteral("Submenu") + QString::number(i + 1)).toStdString();
            item.itemImage = QString(applicationPath + "/submenu_icon.png").toStdString();
            options.full_more_menu_items_.push_back(item);
        }
        meetingService->joinMeeting(params, options, [this](NEErrorCode errorCode, const std::string& errorMessage) {
            // 加入会议的回调,可通过返回值判断是否成功
        });
    }
    
    

匿名入会

在已完成初始化的状态下,匿名加入一个当前正在进行中的会议。

配置加入会议相关参数,调用 anonymousJoinMeeting 方法匿名加入会议并进行回调处理。您可根据错误码判断接口是否调用成功。

  • V3.12.0及之后版本的示例代码如下:

    // 
    auto meetingService = NEMeetingKit::getInstance()->getMeetingService();
    if (meetingService)
    {
        QByteArray byteMeetingNum = meetingNum.toUtf8();
        QByteArray byteNickname = nickname.toUtf8();
    
        NEJoinMeetingParams params;
        // 指定您要加入的会议 ID
        params.meetingNum = byteMeetingNum.data();
        // 指定您加入到会议后使用的昵称,长度最大为 20 字符
        params.displayName = byteNickname.data();
    
        // 设置是否在加入会议后启用视频和音频,是否显示邀请和聊天室按钮等
        NEJoinMeetingOptions options;
        options.noAudio = !audio;
        options.noVideo = !video;
        options.noChat = !enableChatroom;
        options.noInvite = !enableInvitation;
        options.noWhiteboard = !noWhiteboard;
        options.noRename = !noRename;
        options.defaultWindowMode = NORMAL_MODE;
        // 通过 options 设置自定义菜单
        auto applicationPath = qApp->applicationDirPath();
        for (auto i = 0; i < 3; i++)
        {
            NEMeetingMenuItem item;
            item.itemId = NEM_MORE_MENU_USER_INDEX + i + 1;
            item.itemTitle = QString(QStringLiteral("Submenu") + QString::number(i + 1)).toStdString();
            item.itemImage = QString(applicationPath + "/submenu_icon.png").toStdString();
            options.full_more_menu_items_.push_back(item);
        }
        meetingService->anonymousJoinMeeting(context, params, options, [this](NEErrorCode errorCode, const std::string& errorMessage) {
            // 加入会议的回调,可通过返回值判断是否成功
        });
    }
    
  • V3.9.0及之前版本的示例代码如下:

    // 
    auto meetingService = NEMeetingKit::getInstance()->getMeetingService();
    if (meetingService)
    {
        QByteArray byteMeetingId = meetingId.toUtf8();
        QByteArray byteNickname = nickname.toUtf8();
    
        NEJoinMeetingParams params;
        // 指定您要加入的会议 ID
        params.meetingId = byteMeetingId.data();
        // 指定您加入到会议后使用的昵称,长度最大为 20 字符
        params.displayName = byteNickname.data();
    
        // 设置是否在加入会议后启用视频和音频,是否显示邀请和聊天室按钮等
        NEJoinMeetingOptions options;
        options.noAudio = !audio;
        options.noVideo = !video;
        options.noChat = !enableChatroom;
        options.noInvite = !enableInvitation;
        options.noWhiteboard = !noWhiteboard;
        options.noRename = !noRename;
        options.defaultWindowMode = NORMAL_MODE;
        // 通过 options 设置自定义菜单
        auto applicationPath = qApp->applicationDirPath();
        for (auto i = 0; i < 3; i++)
        {
            NEMeetingMenuItem item;
            item.itemId = NEM_MORE_MENU_USER_INDEX + i + 1;
            item.itemTitle = QString(QStringLiteral("Submenu") + QString::number(i + 1)).toStdString();
            item.itemImage = QString(applicationPath + "/submenu_icon.png").toStdString();
            options.full_more_menu_items_.push_back(item);
        }
        meetingService->anonymousJoinMeeting(context, params, options, [this](NEErrorCode errorCode, const std::string& errorMessage) {
            // 加入会议的回调,可通过返回值判断是否成功
        });
    }
    

监听会议状态

通过注册会议状态回调接口,获取会议状态变更的通知。

  1. 继承 NEMeetingStatusListener 类,并实现 onMeetingStatusChanged 回调通知。

    示例代码如下:

    // 继承子类并覆写
    
    class NEMeetingKitManager : public NEMeetingStatusListener
    {
    public:
        virtual void onMeetingStatusChanged(int status, int code) override
        {
            // ...
        }
    }
    
  2. 注册回调接口 addMeetingStatusListener 开始监听。

    示例代码如下:

    // 将该类对象注册到监听队列中
    auto ipcMeetingService = NEMeetingKit::getInstance()->getMeetingService();
    if (ipcMeetingService)
        ipcMeetingService->addMeetingStatusListener(listener);
    

获取当前会议信息

在已经完成创建会议或加入会议的状态下,获取当前会议信息。

调用 getCurrentMeetingInfo 方法获取当前会议信息并进行回调处理。该接口的回调结果的数据类型为 NEMeetingInfo 对象类型。

请确认已经通过一种入会方式(加入会议/创建会议/匿名入会)加入到会议内,否则回调数据对象为空。

示例代码如下:

auto meetingService = NEMeetingKit::getInstance()->getMeetingService();
if (meetingService)
{
    meetingService->getCurrentMeetingInfo([this](NEErrorCode errorCode, const std::string& errorMessage, const NEMeetingInfo& meetingInfo) {
        // 获取会议信息后的回调函数,您可以通过 meetingInfo 获取所需信息
    });
}

获取当前会议状态

在已经完成创建会议或加入会议的状态下,获取当前会议状态。

调用 getMeetingStatus 方法获取当前会议状态。具体请见 meeting.h 头文件中的 NEMeetingStatus 枚举。

示例代码如下:

auto ipcMeetingService = NEMeetingKit::getInstance()->getMeetingService();
if (ipcMeetingService)
{
    auto status = ipcMeetingService->getMeetingStatus();
}

离开会议

调用 leaveMeeting 方法离开当前会议。

示例代码如下:

auto ipcMeetingService = NEMeetingKit::getInstance()->getMeetingService();
if (ipcMeetingService)
{
    ipcMeetingService->leaveMeeting(finish), [=](NEErrorCode errorCode, const std::string& errorMessage) {
        // 离开会议后的回调,如果您需要反初始化 SDK,需要在该回调中抛出一个离开任务到 UI 线程来执行反初始化操作
        // finish 参数为 true 表示结束会议,false 表示离开会议
    });
}

预约会议

在已经完成 SDK 登录鉴权的状态下,预约一个新的会议。

调用 scheduleMeeting 方法预会议并进行回调处理,您可根据错误码判断接口是否调用成功。

该接口仅支持在登录鉴权成功后调用,其他情况下会调用失败。

示例代码如下:

auto ipcPreMeetingService = NEMeetingSDK::getInstance()->getPremeetingService();
if (ipcPreMeetingService)
{
    NEMeetingItem item;
    item.subject = meetingSubject.toUtf8().data();
    item.startTime = startTime;
    item.endTime = endTime;
    item.password = password.toUtf8().data();
    item.setting.attendeeAudioOff = attendeeAudioOff;
    item.roleBinds["userUuid"] = cohost;
    options.noSip = !noSip;
    ipcPreMeetingService->scheduleMeeting(item, [this](NEErrorCode errorCode, const std::string& errorMessage, const NEMeetingItem& item) {
        // ...
    });
}

编辑预约会议

在已经完成 SDK 登录鉴权的状态下,编辑一个已经预约的会议。

调用 editMeeting 方法编辑一个已经预约的会议并进行回调处理,您可根据错误码判断接口是否调用成功。

该接口仅支持在登录鉴权成功后调用,其他情况下会调用失败。

示例代码如下:

auto ipcPreMeetingService = NEMeetingSDK::getInstance()->getPremeetingService();
if (ipcPreMeetingService)
{
    NEMeetingItem item;
    item.subject = meetingSubject.toUtf8().data();
    item.startTime = startTime;
    item.endTime = endTime;
    item.password = password.toUtf8().data();
    item.setting.attendeeAudioOff = attendeeAudioOff;
    item.roleBinds = uUid:cohost;
    ipcPreMeetingService->editMeeting(item, [this](NEErrorCode errorCode, const std::string& errorMessage, const NEMeetingItem& item) {
        // ...
    });
}

取消预约会议

在已经完成 SDK 登录鉴权的状态下,取消一个已经预约的会议。

调用 cancelMeeting 方法取消预约会议并进行回调处理,您可根据错误码判断接口是否调用成功。

  • 该接口仅支持在登录鉴权成功后调用,其他情况下会调用失败。
  • 您无法取消正在进行中的、处于回收状态的或已经结束的会议。
  • V3.12.0及之后版本的示例代码如下:

    auto ipcPreMeetingService = NEMeetingKit::getInstance()->getPremeetingService();
    if (ipcPreMeetingService)
    {
        ipcPreMeetingService->cancelMeeting(meetingId, [this](NEErrorCode errorCode, const std::string& errorMessage) {
            // ...
        });
    }
    
  • V3.9.0及之前版本的示例代码如下:

    auto ipcPreMeetingService = NEMeetingKit::getInstance()->getPremeetingService();
    if (ipcPreMeetingService)
    {
        ipcPreMeetingService->cancelMeeting(meetingUniqueId, [this](NEErrorCode errorCode, const std::string& errorMessage) {
            // ...
        });
    }
    

查询指定状态下的预约会议列表

在已经完成 SDK 登录鉴权的状态下,根据指定的一种或多种会议状态在已预约的所有会议基础上筛选出会议列表。

调用 getMeetingList 方法查询指定状态下的预约会议列表并进行回调处理,您可根据错误码判断接口是否调用成功。

该接口仅支持在登录鉴权成功后调用,其他情况下会调用失败。

示例代码如下:

auto ipcPreMeetingService = NEMeetingKit::getInstance()->getPremeetingService();
if (ipcPreMeetingService)
{
    std::list<NEMeetingItemStatus> status;
    status.push_back(MEETING_INIT);
    status.push_back(MEETING_STARTED);
    status.push_back(MEETING_ENDED);
    ipcPreMeetingService->getMeetingList(status, [this](NEErrorCode errorCode, const std::string& errorMessage, std::list<NEMeetingItem>& meetingItems) {
        // ...
    });
}

监听预约会议状态

通过注册预约会议状态回调接口,监听预约会议状态的变更通知,从而实现会议界面上实时更新当前会议状态,包括参会人的加入或离开。

一次预约会议状态变更回调可能包含多个预约会议信息的变更。

  1. 继承 NEScheduleMeetingStatusListener 类,并实现 onScheduleMeetingStatusChanged 回调通知。

    • V3.12.0及之后版本的示例代码如下:
    class NEMeetingKitManager : public NEScheduleMeetingStatusListener
    {
    public:
        virtual void onScheduleMeetingStatusChanged(uint64_t meetingId, const int& meetingStatus) override
        {
            // ...
        }
    }
    
    • V3.9.0及之前版本的示例代码如下:
    class NEMeetingKitManager : public NEScheduleMeetingStatusListener
    {
    public:
        virtual void onScheduleMeetingStatusChanged(uint64_t uniqueMeetingId, const int& meetingStatus) override
        {
            // ...
        }
    }
    
  2. 注册回调接口 registerScheduleMeetingStatusListener 开始监听。

    示例代码如下:

    // 将该子类通过会议预约的服务注册到监听队列中即可关注预约会议的状态变更。
    auto ipcPreMeetingService = NEMeetingKit::getInstance()->getPremeetingService();
    if (ipcPreMeetingService)
        ipcPreMeetingService->registerScheduleMeetingStatusListener(this);
    

注销登录

注销当前已登录的账号,返回未登录状态。

调用 logout 方法注销当前账号并进行回调处理。

示例代码如下:

auto authService = NEMeetingKit::getInstance()->getAuthService();
if (authService)
{
    authService->logout([this](NEErrorCode errorCode, const std::string& errorMessage) {
        // 登出结果的回调
    });
}

销毁 SDK

在退出您的应用程序之前,需要销毁 SDK。

调用 unInitialize 方法销毁当前会议进程并进行回调处理。

示例代码如下:

NEMeetingKit::getInstance()->unInitialize([&](NEErrorCode errorCode, const std::string& errorMessage) {
    // 销毁完成的回调,此处将退出请求抛到 UI 线程执行退出操作
});

请在收到销毁通知回调后退出您的应用程序。

此文档是否对你有帮助?
有帮助
去反馈
  • 会议状态流程图
  • API 时序图
  • 初始化 SDK
  • 登录鉴权
  • 入会前设置音频开关状态
  • 入会前设置视频开关状态
  • 创建会议
  • 加入会议
  • 匿名入会
  • 监听会议状态
  • 获取当前会议信息
  • 获取当前会议状态
  • 离开会议
  • 预约会议
  • 编辑预约会议
  • 取消预约会议
  • 查询指定状态下的预约会议列表
  • 监听预约会议状态
  • 注销登录
  • 销毁 SDK