云会议为您提供Windows端的AliMeeting UI SDK,您可以阅读本文,在本地应用程序中快速集成带有UI界面的音视频会议。

前提条件

开发环境准备。
类别 说明
Windows系统 Windows 7及以上。
Microsoft Visual Studio(简称VS) Microsoft Visual Studio 2017及以上。
Windows SDK 10.0.17134.0及以上。
Qt 5.12.0(该环境为可选项,也可以不使用)。

集成操作

  1. 下载AliMeeting UI SDK并解压。
    SDK文件压缩包中有AliMeetingUISDK文件。
    • bin:包含运行时所需要的dll文件。
    • include:包含SDK的头文件和lib文件。
  2. 创建新项目。
    1. 打开Microsoft Visual Studio。在菜单栏中选择文件 > 新建 > 项目
    2. 选择C++的空项目,填写项目名称为SDKSample
  3. 将解压文件夹中的AliMeetingUISDK下的include文件夹和bin文件夹复制到项目文件夹内,与.sln文件同级。
    放置解压文件
  4. 修改项目配置。

    您需要在菜单栏和项目属性页上修改配置。

    打开项目属性页:在项目名上单击右键,选择属性

    1. 配置Release
      • 在菜单栏中,将Release设置为x86Release X86
      • 在项目属性页中,将配置改为Release,将平台改为Win32Release win32
    2. 添加头文件。
      在项目属性页中,在左侧导航栏中选择配置属性 > C/C++ > 常规。在右侧配置栏中,选择附加包含目录,添加../include/header;,单击应用添加头文件
    3. 添加依赖库文件。
      • 在项目属性页中,在左侧导航栏中选择配置属性 > 链接器 > 输入。在右侧配置栏中,选择附加库目录,添加../include/lib;,单击应用附加库目录
      • 在项目属性页中,在左侧导航栏中选择配置属性 > 链接器 > 输入。在右侧配置栏中,选择附加依赖项,添加AliMeetingUISDK.lib;,单击应用附加依赖项
    4. 修改输出目录。
      在项目属性页中,在左侧导航栏中选择配置属性 > 常规。在右侧配置栏中,选择输出目录,修改为../bin,单击应用输出目录
  5. 添加代码文件。
    在项目的头文件文件夹上单击右键,选择添加 > 新建项新建文件。新建文件项
    1. 新建项为头文件(.h),文件名为callback.h。在文件中集成AMUiSDKMeetingCallback类。

      其中OnInviteMember、OnMeetingUserStatusChange、OnInMeetingButtonClicked、OnChatButtonClicked、OnRightMouseClickOnMemberList函数可以根据需要选择实现(非必须实现)。

      #include "AMUISDKMeetingMainWindow.h"
      using namespace AMUISDK;
      class CallBack : public AMUISDKMeetingCallBack {
      public:
          CallBack();
          ~CallBack();
          void OnMeetingJoined();
          void OnMeetingFinish(AMUISDKFinishCode code, std::string& reason);
          void OnError(AMUISDKErrorCode code, std::string& reason);
      
          void OnInviteMember(std::string& message);
          void OnMeetingUserStatusChange(AMUISDKMeetingUser* meetingUser, AMUISDKUserStatusEvent event);
          void OnInMeetingButtonClicked(std::string& str);
          void OnChatButtonClicked();
          void OnRightMouseClickOnMemberList(AMUISDKMeetingUser* meetingUser);
          void OnCallUnattendMember(AMUISDKMeetingUser* meetingUser);
      };
    2. 新建项为C++文件(.cpp),文件名为callback.cpp。文件内容为定义消息回调的接口,处理回调消息。
      #include "callback.h"
      CallBack::CallBack()
      {
      }
      CallBack::~CallBack()
      {
      }
      void CallBack::OnMeetingJoined()
      {
          //todo 入会成功消息处理
      }
      void CallBack::OnMeetingFinish(AMUISDKFinishCode code, std::string& reason)
      {
          //todo 离会成功消息处理
      }
      void CallBack::OnError(AMUISDKErrorCode code, std::string& reason)
      {
          //todo 会议错误消息处理
      }
      void CallBack::OnInviteMember(std::string& message)
      {
          //todo 会中邀请消息处理
      }
      void CallBack::OnMeetingUserStatusChange(AMUISDKMeetingUser* meetingUser, AMUISDKUserStatusEvent event)
      {
          //todo 会中成员状态消息处理
      }
      void CallBack::OnInMeetingButtonClicked(std::string& str)
      {
          //todo 用户会中相关按钮点击事件记录处理
      }
      void  CallBack::OnChatButtonClicked()
      {
          //todo 会中聊天按钮点击事件处理
      }
      void  CallBack::OnRightMouseClickOnMemberList(AMUISDKMeetingUser* meetingUser)
      {
          //todo 参会成员列表鼠标右键点击事件
      }
      void  CallBack::OnCallUnattendMember(AMUISDKMeetingUser* meetingUser)
      {
          //todo 呼叫未入会人员事件
      }
    3. 新建项为C++文件(.cpp),文件名为main.cpp。文件内容为构建UI配置信息和入会相关信息,并进入会议。
      1. 添加头文件,使用命名空间AMUISDK,并定义main函数。
        #include "AMUISDKMeetingMainWindow.h"
        #include "callback.h"
        #pragma execution_character_set("utf-8")
        using namespace AMUISDK;
        int main() {
        }
      2. 在main函数中创建CallBack类和AMUISDKMeetingMainWindow类的实例。
        CallBack *cb_ = new CallBack();
        AMUISDKMeetingMainWindow *main_window_ = AMUISDKMeetingMainWindow::MeetingInstance(cb_);
      3. 在main函数中构建UI配置信息。
        AMUISDKGuiConfig ui_param;
        ui_param.app_logo = "d:/***/test.png";                 
        ui_param.app_window_text = "test";                     
        ui_param.logo_banner = "";                             
        ui_param.meeting_topic = "测试";
        ui_param.meeting_time = "";
        ui_param.meeting_code = "";
        ui_param.meeting_passwd = "";
        ui_param.config_path = "d:/xxxxxxx";                   
        ui_param.invite_info = "";
        
        ui_param.language = ZH_CN;
        ui_param.hasQApplication = false;
        ui_param.invite_member = false;
        ui_param.use_sdk_chat_module = true;
        注意
        • UI配置信息中的所有项目均可以为空。
        • 如果meeting_topic、meeting_time、meeting_code、meeting_passwd均为空,窗口上方会议主题右侧不显示会议详情的按钮,若有一项不为空,则显示会议详情按钮。通过调用查询会议详情接口获取,更多信息,请参见查询会议详情
        参数 描述
        app_logo 设置WindowsIcon(程序图标)。
        app_window_text 设置WindowsTest(程序名称)。
        logo_banner 设置的是会中左下角公司logotip图标的文件地址,图标格式可以为png、jpg,控件大小为130Px × 20Px,图标大小可以不和控件大小一致,但是可能会出现拉伸或挤压的情况。
        meeting_topic 会议主题
        meeting_time 会议开始和结束时间
        meeting_code 会议入会口令
        meeting_passwd 会议入会密码
        config_path 自定义设置存储用户配置文件的路径。
        invite_info 自定义分享时的文案。
        language 会议的语言文字。
        hasQApplication 外部封装程序是否启用了QT,并定义了QApplication,取值:true或false。默认为false,不开启。
        invite_member 是否启用邀请成员功能,取值:true或false。默认为false,不开启。
        use_sdk_chat_module 是否启用SDK中自带的聊天功能,取值:true或false。默认为true,开启。如果取值false,需要实现AMUiSDKMeetingCallback类中的OnChatButtonClicked回调,实现自己外部的聊天功能。
      4. 在main函数中构建入会相关信息。
        AMUISDKMeetingConfig meet_param;
        
        meet_param.client_appid = "";  
        meet_param.sls_info = "";   
        meet_param.meeting_uuid = "";  
        meet_param.member_uuid = "";   
        meet_param.meeting_token = ""; 
        meet_param.meeting_domain = ""; 
        meet_param.user_id = "";       
        meet_param.user_name = "";     
        
        meet_param.audio_only = false;
        meet_param.mute_audio = false;
        meet_param.speaker_enabled = true;
        meet_param.mute_video = false;
        meet_param.beauty_enabled = true;
        meet_param.floor_change_disabled = false;
        注意
        • 入会信息配置项中,参数client_appid、meeting_uuid、member_uuid、meeting_token、meeting_domain、user_id不可以为空,否则将会入会失败。通过调用检查会议口令接口获取,更多信息,请参见检查会议口令
        • user_id设为-1,并且传入user_name,可以使用匿名入会,但是如果会中没有成员,不能匿名入会。
        • 可选配置参数audio_only、mute_audio、speaker_enabled、mute_video,可以根据需求设置。
        参数说明
        参数 描述
        client_appid 企业接入阿里云获得的唯一标识。
        sls_info 上传日志的地址。可以为空。
        meeting_uuid 会议的唯一标识。
        member_uuid 成员的唯一标识。
        meeting_token 会议校验令牌。
        meeting_domain 会议连接的域名。
        user_id 会议中成员的ID。
        user_name 会议中成员的名字。
        audio_only 是否开启音频模式,取值:true或false。默认为false,不开启。当取值为true时,则是音频会议,会中不允许再打开摄像头。
        mute_audio 入会时是否开启音频静音,取值:true或false。默认为false,不开启。
        speaker_enabled 入会时是否启用扬声器,取值:true或false。默认为true,开启。
        mute_video 入会时是否开启视频静音,取值:true或false。默认为false,不开启。
        beauty_enabled 是否启用美颜,取值:true或false。默认为true,开启。
        floor_change_disabled 是否启用语音激励,发言人自动切换到大窗显示,取值:true或false。默认为false,不开启。
      5. 在main函数中构建加入会议代码。
        main_window_->JoinMeeting(ui_param, meet_param);
  6. 在菜单栏单击本地Windows调试器,进行编译运行。
    编译

状态码说明

enum AMUISDKFinishCode {
    AMUISDKFinishCodeLeaveBySelf = 0,                       //主动退出会议
    AMUISDKFinishCodeLeaveByKick = 1,                       //被动退出会议
    AMUISDKFinishCodeLeaveByHangupAll = 2,                  //挂断所有人
    AMUISDKFinishCodeOtherClientJoined = 3,                 //同一个userid的用户进入了会议
    AMUISDKFinishCodeSystemWillSleep = 4                    //系统休眠
};

错误码说明

enum AMUISDKErrorCode {
    AMUISDKErrorCodeIllegalParameters = 0,                  //非法参数,接口调用参数不正确
    AMUISDKErrorCodeInitializedFailed = 1,                  //会议初始化失败,如无法获取会议信息
    AMUISDKErrorCodeDevicePermissionNotGranted = 2,         //设备无权限
    AMUISDKErrorCodeNoDevice = 3,                           //无麦克风设备
    AMUISDKErrorCodeMediaServerConnectFailed = 4,           //无法连接媒体服务
    AMUISDKErrorCodeRoomFull = 5,                           //会议并发满了
    AMUISDKErrorCodeJoinMeetingTimeout = 6,                 //入会超时
    AMUISDKErrorCodeNetworkUnAvailable = 7,                 //网络不可用
    AMUISDKErrorCodeMediaNegotiationFailed = 8              //媒体协商失败
};

成员状态事件说明

enum AMUISDKUserStatusEvent{
    AMUISDKUserStatusEventOnline = 0,                        //成员上线
    AMUISDKUserStatusEventOffline = 1,                       //成员离线
    AMUISDKUserStatusEventAudioMute = 2,                     //静音
    AMUISDKUserStatusEventAudioUnmute = 3,                   //取消静音
    AMUISDKUserStatusEventVideoMute = 4,                     //禁视频
    AMUISDKUserStatusEventVideoUnmute = 5,                   //打开视频
    AMUISDKUserStatusEventStartTalking = 6,                  //说话中
    AMUISDKUserStatusEventStopTalking = 7,                   //结束说话
    AMUISDKUserStatusEventMainSpeaker = 8,                   //主讲人切换
};