主要功能
会议管理
入会
/**
*@brief 进入会议
*@param pUserName 进入会议的用户的名字
*@param pMeetingCode 会议的参会密码(注意不含‘-’)
*@param videoEnable 是否默认开启视频
*@param audioEnable 是否默认打开音频
*@param showPreview 是否显示视频预览窗口
*@param extraData 用来在会议信息中显示的扩展数据
*/
void TangMeetingJoin(const char* pUserName, const char* pMeetingCode, bool videoEnable, bool audioEnable, bool showPreview, const char* extraData);
调用时机:初始化之后
使用UserID 入会
/**
*@brief 进入会议
*@param pUserId 进入会议的用户id
*@param pMeetingCode 会议的参会密码(注意不含‘-’)
*@param videoEnable 是否默认视频*@param audioEnable 是否默认打开音频
*@param showPreview 是否显示视频预览窗口
*@param extraData 用来在会议信息中显示的扩展数据
*/
void TangMeetingJoinByUserId(const char * pUserId , const char* pMeetingCode, bool videoEnable, bool audioEnable, bool showPreview, const char* extraData);
调用时机:初始化以后 注意:使用此接口入会,会中的display name将自动识别为开通的账号的display name, 另外,如果使用约会人的userId, 会议密码即使用参会人密码,会中仍然是主持人
extraData说明
// extraData 是用来替换会中信息的 Json格式字符串
// 参考:
[{"key":"飒飒飒飒1","value":"11111111111111111111","type":"show, copy","replace":""}, // 直接展示在会议信息中,并且可以复制
{"key":"飒飒飒飒2","value":"11111111111111111111","type":"show, copy","replace":""}, // 直接展示在会议信息中,并且可以复制
{"key":"飒飒飒飒3","value":"11111111111111111111","type":"show, copy","replace":""}, // 直接展示在会议信息中,并且可以复制
{"key":"2222啊啊","value":"https://www.meeting.com/","type":"copy","replace":"joinUrl"}, // 不展示在界面上,可以复制,替换的原先的joinUrl-- 目前仅仅支持joinUrl的替换
{"key":"飒飒飒飒4","value":"11111111111111111111","type":"show, copy","replace":""} // 直接展示在会议信息中,并且可以复制]
使用json 字串入会
/**
*@brief 进入会议
*@param jsonParameter 进入会议的参数,注意这里接收的是一个string而不是Json对象
例如:{\"meetingCode\":\"8308939471\",\"userName\":\"demo11\",\"userId\":\"12345678\",\"videoEnable\":0,\"audioEnable\":0,\"showPreview\":0,\"extraData\":[{\"key\":\"userdefinedkey1\",\"value\":\"userdefinedvalue1\",\"type\":\"show, copy\",\"replace\":\"\"},{\"key\":\"userdefinedkey2\",\"value\":\"userdefinedvalue2\",\"type\":\"copy\",\"replace\":\"joinUrl\"}]}"
*@param userId 进入会议的用户id
*@param meetingCode 会议的参会密码(注意不含‘-’)
*@param userName 入会名称
*@param videoEnable 0:不打开视频 1:打开视频
*@param audioEnable 0:不连接voip音频 1:连接voip音频
*@param showPreview 0:关闭视频预览 1:打开视频预览 2:是否打开视频预览根据个人设置
*@param extraData 用来在会议信息中显示的扩展数据
*/
void TangMeetingJoinByJson(const char* jsonParameter);
调用时机:初始化之后
退会
/**
*@brief 退出会议
*@terminate true时,表示主持人离开会议时是否自动结束会议,对参会人此参数无效
*@return void
*/
void TangMeetingStop(bool terminate);
调用时机:用户希望通过app控制退会
反初始化
/**
*@brief 销毁TangMeetingSDK.该接口可将meetingSDK的实例杀掉,第三方APP退出之前应调用该接口,否则可能不能完全退出程序
*@return*- == true 销毁成功*- == false 销毁失败
*/
bool TangMeetingUninitialize();
调用时机:用户app结束时,卸载sdk
配置界面属性
/**
*@brief 此接口用来定制界面做一些个性化设置,应在入会之前调用,且只需调用一次,多次调用无效。如没有个性化要求,此接口可以不调用
*@customConfigData Json格式的字符串,具体可配置项如下*
*return*-== true 设置成功*-== false 设置失败(比如没有调用Initialize就调用本函数)
*/
bool TangMeetingSetCustomConfig(const char * customConfigData);
customConfigData示例: {"colorTheme":1,"language":1, "customUI":{"inviteBtn":{"isShow":true}}} // 深色主题,英文,参会人也有邀请按钮
customConfig对象定义:
key | value类型 | 描述 |
---|---|---|
appName | string | 设置会议窗口显示名称 |
language | number | 设置会议界面的显示语言,0:简体中文(默认);1:英文 |
colorTheme | number | 设置会议界面的主题色, 1:深色主题; 2: 浅色主题(默认) |
customUI | object | 设置会议界面中元素的自定义项,见customUI对象参考 |
openVideoWhenJoinMeeting | boolean | 入会是否开启视频,true: 开启; false: 不开启,如果调用入会接口TangMeetingJoin时,设置了videoEnable,则会覆盖该值 |
openVOIPWhenJoinMeeting | boolean | 入会是否连接VOIP,true: 连接; false: 不连接,如果调用入会接口TangMeetingJoin时,设置了audioEnable,则会覆盖该值 |
isMuteMicrophoneWhenJoin | boolean | 入会是否连接VOIP是否静音,true: 静音; false: 不静音,只有入会自动连接VOIP时,该值才起作用 |
customUI对象定义:
key | value类型 | 描述 |
---|---|---|
inviteBtn | customBtnObject | 邀请按钮 |
shareBtn | customBtnObject | 共享按钮 |
switchLayoutBtn | customBtnObject | 切换布局按钮 |
layoutType | number | 设置布局类型,1:平均(默认);2:全景;3:演讲;4:回型;5:上台; 6: 工字型; 7: 左右 |
audioBtn | customBtnObject | 音频设置按钮 |
videoBtn | customBtnObject | 视频设置按钮 |
attendeeBtn | customBtnObject | 参会人按钮 |
chatBtn | customBtnObject | 聊天按钮 |
lockBtn | customBtnObject | 锁定会议按钮 |
interactiveBtn | customBtnObject | 互动激励按钮 |
customerServiceBtn | customBtnObject | 客服按钮 |
aboutBtn | customBtnObject | 关于按钮 |
feedbackBtn | customBtnObject | 反馈按钮 |
isShowFootbar | boolean | 是否显示底部工具栏,true:显示(默认);false:隐藏 |
isShowMeetingInfo | boolean | 是否显示会议信息,true:显示(默认);false:隐藏 |
leaveBtn | customBtnObject | 离开按钮 |
isShowBulletOption | boolean | 是否显示弹幕选项,true:显示(默认);false:隐藏 |
isShowEmotionToolbar | boolean | 是否显示聊天表情,true:显示(默认);false:隐藏 |
isShowAudioGuide | boolean | 是否显示音频引导弹窗,true:显示(默认);false:隐藏,如果设置了入会自动连接VOIP,则该值不起作用 |
customBtnObject对象参考:
key | value类型 | 描述 |
---|---|---|
isShow | boolean | 是否显示,true:显示(默认);false:隐藏 |
调用时机:在初始化之后
其他功能
获取会议信息
/**
*@brief 通过会议Id获取会议信息
*@param meetingId 会议ID
*@return
*/
void GetMeetingInfo(const char* meetingId);
调用时机:初始化以后,通过会议ID获取会议详情, 详情通过回调 pfnOnGetMeetingInfo 返回
登录
/**
*@brief 通过普通账号密码登录云会议
*@param pUserName 用户名
*@param pPassword 密码
*@return
*/
void LoginWithPassword(const char* pUserName, const char* pPassword);
调用时机:初始化以后,登录状态通过 pfnOnLoginResult 回调返回
回调事件说明
会议状态回调
/**
* 会议状态变化的回调
*/
typedef void(*pfnOnMeetingStatusChanged)(TangMeetingStatus eStatus);
约会或邀请人后回调
/** 返回数据说明
{
"contactsInfo":"
{
"attendeePassCode":"参会人密码",
"meetingId":"会议id",
"conferenceJoinUrl":"入会链接",
"confHostName":"会议主持人名称",
"conHostId":"会议主持人 id",
"title":"会议标题",
"trigger":2
}"
}
*//**
返回数据demo
{
"contactsInfo":"
{
"attendeePassCode":"1673958948",
"meetingId":"3436449",
"conferenceJoinUrl":"https://n.qsh1.cn/k/klppX2dKa0",
"confHostName":"微V测试06",
"conHostId":"20384857",
"title":"微V测试06的会议室",
"trigger":2
}"
}
*//**
* 预约会议或会中邀请按钮被触发的回调
*/
typedef void(*pfnOnInviteContact)(const char *pMeetingInfo);
创建会议后的回调
/**
* 创建会议后的回调, 返回会议的id
*/
typedef void(*pfnOnMeetingCreated)(TangMeetingErrorCode errorCode, const char *pMeetingId);
获取会议信息回调
/**
* 获取会议信息的回调, 返回会议信息的JSON字符串
{
id - 会议的id,
title - 会议的标题,
startTime - 会议的开始时间,
attendees - 会议的参会人ID列表数组,
hostId - 会议的主持人ID,
hostName - 会议的主持人名字,
pCode - 会议的参会人密码,
hCode - 会议的主持人密码,仅在登录账户是该场会议的主持人时候返回,}
*/
typedef void(*pfnOnGetMeetingInfo)(TangMeetingErrorCode errorCode, const char *pMeetingInfo);
登录的回调
/**
* 登录的回调, 返回错误码
*/
typedef void(*pfnOnLoginResult)(TangMeetingErrorCode errorCode);
邀请外呼列表回调
/**
* 返回外呼邀请信息返回的UserInfo是一个Json数组
[
{
userName: name,
phoneNum: phoneNumber,
email: xxx@email.com
},
]
*/
typedef void(*pfnOnCallUsers)(const char *pUsersInfo);
对应错误码与状态码
enum TangMeetingStatus
{
tang_meeting_login_failed = 100, //登陆失败
tang_meeting_scheduler_failed = 101, //预约会议失败
tang_meeting_join_failed = 102, //入会失败
tang_meeting_join_need_login = 103, // 入会需要登录
tang_meeting_login_succeed = 200, // 登陆成功
tang_meeting_scheduler_succeed = 201, // 预约会议成功
tang_meeting_join_succeed = 202, // 入会成功
tang_meeting_exit = 300, // 退出会议
tang_meeting_ended = 301, // 会议已结束
tang_meeting_exit_meeting_window = 400, // 退出会中窗口
tang_meeting_auth_key_invalid = 410, // 没有或者authKey无效
tang_meeting_login_with_auth_key_failed = 411, //使用authKey登录失败
};
enum TangMeetingErrorCode、
{
success = 0, // 成功
login_failed = 100, // 登录失败
client_not_login = 104, // 客户端没有登录
client_not_running = 105, // SDK的客户端没有运行
};