云会议为您提供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(该环境为可选项,也可以不使用)。 |
集成操作
- 下载AliMeeting UI SDK并解压。
SDK文件压缩包中有AliMeetingUISDK文件。
- bin:包含运行时所需要的dll文件。
- include:包含SDK的头文件和lib文件。
- 创建新项目。
- 打开Microsoft Visual Studio。在菜单栏中选择。
- 选择C++的空项目,填写项目名称为
SDKSample
。
- 将解压文件夹中的AliMeetingUISDK下的include文件夹和bin文件夹复制到项目文件夹内,与.sln文件同级。
- 修改项目配置。
您需要在菜单栏和项目属性页上修改配置。
打开项目属性页:在项目名上单击右键,选择属性。
- 配置Release。
- 在菜单栏中,将Release设置为x86。
- 在项目属性页中,将配置改为Release,将平台改为Win32。
- 添加头文件。
在项目属性页中,在左侧导航栏中选择。在右侧配置栏中,选择
附加包含目录,添加
../include/header;
,单击
应用。
- 添加依赖库文件。
- 在项目属性页中,在左侧导航栏中选择。在右侧配置栏中,选择附加库目录,添加
../include/lib;
,单击应用。
- 在项目属性页中,在左侧导航栏中选择。在右侧配置栏中,选择附加依赖项,添加
AliMeetingUISDK.lib;
,单击应用。
- 修改输出目录。
在项目属性页中,在左侧导航栏中选择。在右侧配置栏中,选择
输出目录,修改为
../bin
,单击
应用。
- 添加代码文件。
在项目的
头文件文件夹上单击右键,选择新建文件。
- 新建项为头文件(.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);
};
- 新建项为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 呼叫未入会人员事件
}
- 新建项为C++文件(.cpp),文件名为
main.cpp
。文件内容为构建UI配置信息和入会相关信息,并进入会议。
- 添加头文件,使用命名空间AMUISDK,并定义main函数。
#include "AMUISDKMeetingMainWindow.h"
#include "callback.h"
#pragma execution_character_set("utf-8")
using namespace AMUISDK;
int main() {
}
- 在main函数中创建CallBack类和AMUISDKMeetingMainWindow类的实例。
CallBack *cb_ = new CallBack();
AMUISDKMeetingMainWindow *main_window_ = AMUISDKMeetingMainWindow::MeetingInstance(cb_);
- 在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回调,实现自己外部的聊天功能。 |
- 在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,不开启。 |
- 在main函数中构建加入会议代码。
main_window_->JoinMeeting(ui_param, meet_param);
- 在菜单栏单击本地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, //主讲人切换
};