界面配置
Config
接口描述
Windows SDK中已经提供了会议中的界面,界面上的部分元素是可以自定义的。可以自定义的界面元素如下:
- 会议窗口名称
会议开始后,在Windows任务栏上会生成一个会议的图标,鼠标指向该图标时会显示会议的缩略窗口,该窗口的名称可以自定义。
会议窗口的图标,可以替换HwmSdk\sdkResources\nativeimg目录下的video.ico图标文件。
- 会议信息及会议链接前缀
会议链接的域名前缀默认是https://bmeeting.huaweicloud.com/(如https://bmeeting.huaweicloud.com/#/j/982989574),如果入会Portal是第三方自己开发的,这个前缀需要自定义。
整个会议信息也可以自定义显示或者隐藏。
- 来电窗口
会议来电窗口默认在收到来电时弹出,可配置成隐藏,在收到来电通知时调用会议来电应答接口来应答:
- 会控按钮
- 自定义会议信息窗口
注意事项
- 只有需要更改会议界面默认显示样式时,才需要调用该接口,若默认样式已满足要求,可以不调用该接口。
- 该接口为异步接口,返回值只代表接口是否调用成功,实际业务处理结果在对应的回调函数中返回。
方法定义
1
|
HWM_SDK_AGENT_API hwmsdk::HwmErrCode Config(char uiConfig[HWM_MAX_CONFIG_LEN]); |
Config接口不能连续调用,如果需要调用两次Config接口,一定要等第一次OnConfigResult回调函数处理完成后,再调用第二次Config。
回调函数
1
|
virtual void OnConfigResult(hwmsdk::HwmErrCode ret, const char* reason) {}; |
参数描述
参数 |
是否必须 |
类型 |
描述 |
---|---|---|---|
uiConfig |
是 |
char[] |
Json对象字符串"{"frame":object}", object对象有格式要求,若不匹配则配置不生效。详细规则见以下表格。 |
key |
value类型 |
描述 |
---|---|---|
name |
string |
会议窗口名称。如图1中的窗口名称(MyApp)。 |
linkPrefix |
string |
会议窗口中分享的会议链接前缀。如图2中复制出来的会议链接。 |
confMenu |
object |
|
isUseExternalConfInfoWnd |
bool |
会议窗口中自定义分享会议信息框开关。如图6中的窗口。"true" :开启 ;"false" :关闭,默认 "false" 关闭。 |
isUseExternalAddressBook |
bool |
会议窗口中使用外部通讯录头像信息的开关。"true": 使用 ;"false": 不使用,默认 "false"不使用 |
isHideConfIncomingWindow |
bool |
是否隐藏会议来电弹窗。"true":隐藏,会议来电不弹窗;"false"不隐藏,正常弹窗,默认不隐藏,正常弹窗。 |
defaultWindowMode |
int |
会议窗口模式。0 通常;1最大化;2全屏。默认通常。 |
isCloseSideWindow |
bool |
是否关闭侧边窗口: "false": 不关闭;"true":关闭。默认不关闭。 |
flowControlInitShowPos |
int |
共享工具栏初始化位置:0:顶部 1:底部。默认显示顶部。 |
defaultWindowMonitor |
int |
会议窗口入会时默认创建在哪个显示器:0主显示器,1副显示器。默认在主显示器。 |
isHideTransferHostBeforeLeave |
bool |
是否隐藏离会时指定主持人功能按钮:"false": 不隐藏;"true":隐藏。默认不隐藏。 |
isUploadKeyLog |
bool |
是否自动收集日志的开关。"true":收集;"false": 不收集。默认"true"收集。 |
key |
value类型 |
描述 |
---|---|---|
toolBar |
object |
|
titleBar |
object |
会议窗口上的标题栏配置对象。如图2中的会议信息。 |
statusBar |
object |
会议窗口左上角的状态栏配置对象。如图8中的按钮 |
key |
value类型 |
描述 |
---|---|---|
button |
object[] |
|
customButton |
object[] |
key |
value类型 |
描述 |
---|---|---|
button |
object[] |
会议窗口左上角的状态栏上的按钮配置对象。如图8中的按钮。 |
key |
value类型 |
描述 |
---|---|---|
id |
string |
按钮的唯一标识。具体id与按钮的对应关系见表9。 |
showAsAction |
string |
是否显示。只有2个取值,“never”:不显示,“ifRoom”:显示。 |
isCustomizedClick |
bool |
是否点击注入。true:点击注入,用户点击按钮时发送通知消息,SDK不做点击响应处理。 |
key |
value类型 |
描述 |
---|---|---|
id |
string |
第三方自定义的按钮id。如“customMenu”。 |
title |
string |
第三方自定义按钮的显示的名称。如“自定义按钮”。 |
buttonImg |
string |
第三方自定义按钮的图标路径,使用绝对路径。如“to/path/image.svg”,支持svg/png等格式 注:需要UTF8编码。 |
buttonPos |
int |
第三方自定义按钮的位置。0:工具栏更多菜单,1:底部工具栏,2:共享工具栏 |
subMenu |
object[] |
第三方自定义按钮的子菜单项。*(最多配置到三级:深入两次) |
key |
value类型 |
描述 |
---|---|---|
id |
string |
第三方自定义的按钮id。如“customMenu”。 |
title |
string |
第三方自定义按钮的显示的名称。如“自定义按钮”。 |
buttonImg |
string |
第三方自定义按钮的图标路径,使用绝对路径。如“to/path/image.svg”,支持svg/png等格式 注:需要UTF8编码。 |
subMenu |
object[] |
第三方自定义按钮的子菜单项。 |
按钮名称 |
按钮id |
说明 |
---|---|---|
麦克风 |
"microphone" |
可隐藏 |
扬声器 |
"speaker" |
可隐藏 |
摄像头 |
"camera" |
可隐藏 |
邀请 |
"invite" |
可隐藏,可注入 |
离开 |
"leave" |
可隐藏,可注入 |
共享 |
"share" |
可隐藏,可注入 |
与会者 |
"attendee" |
可隐藏,可注入 |
呼叫其它号码 |
"call_other_number" |
可隐藏,可注入 |
反馈 |
"feedback" |
可隐藏,可注入 |
举手/手放下 |
"hands_up" |
可隐藏 |
申请主持人/释放主持人 |
"change_chairman_auth" |
可隐藏 |
改名 |
"rename" |
可隐藏 |
锁定会议 |
"lock_conf" |
可隐藏 |
标注 |
"annotation" |
可隐藏 |
授予远程控制 |
"remote_control" |
可隐藏 |
停止共享 |
"stop_share" |
可隐藏 |
聊天 |
"chat" |
可隐藏,可注入 |
导出与会者 |
"export_participants" |
可隐藏 |
入会范围 |
"attendee_access_control" |
可隐藏 |
允许共享 |
"lock_Share" |
可隐藏 |
字幕功能:开启字幕、字幕翻译 |
"subtitle" |
可隐藏 |
安全 |
"security" |
可隐藏 |
邀请共享、取消共享 |
"invite_or_cancel_share" |
可隐藏 |
隐藏无视频与会者 |
"hide_no_video_view" |
可隐藏 |
视频画面智能排序 |
"video_smart_sorting" |
可隐藏 |
虚拟背景 |
"virtual_background" |
可隐藏 |
网络检测 |
"network_detection" |
可隐藏 |
全场静音/取消全场静音 |
"mute_all" |
可隐藏 |
允许与会者解除静音 |
"allow_unmute" |
可隐藏 |
打开/关闭双屏模式 |
"dual_screen" |
可隐藏 |
录制 |
"record" |
可隐藏 |
投票 |
"vote" |
可隐藏 |
共享画面质量策略:清晰度优先、流畅度优先 |
"share_strategy" |
可隐藏 |
共享时隐藏视频窗口 |
"share_hide_video" |
可隐藏 |
共享时包含电脑声音 |
"share_audio" |
可隐藏 |
复制会议信息 |
"copy_conf_info" |
可注入 |
全员移入等候室 |
"moveall_to_waitingroom" |
可隐藏 |
与会者详情 |
"participant_detail" |
可注入,见图9 |
复制观众链接 |
"copy_audience_conf_info" |
可注入 |
key |
value类型 |
描述 |
---|---|---|
confDetail |
object[] |
如图2中的会议信息。showAsAction设置成never后,不显示会议信息。 |
key |
value类型 |
描述 |
---|---|---|
showAsAction |
string |
是否显示。只有2个取值,“never”:不显示,“ifRoom”:显示。 |
button |
object[] |
会议信息窗口上的按钮配置对象。 |
{ "frame":{ "name":"MyApp", "linkPrefix":"https://www.demo.com/", "isUseExternalConfInfoWnd":false, "isUseExternalAddressBook":false, "confMenu":{ "titleBar":{ "confDetail":{ "showAsAction":"never", "button":[ { "id":"copy_conf_info", "isCustomizedClick":false } ] }, "statusBar": { "button": [ { "id": "record", "showAsAction": "never" } ] }, "toolBar":{ "customButton": [ { "id": "customMenu", "title": "自定义按钮", "buttonImg": "D:/demoResource/icon-whiteboard.svg", "buttonPos": 1 }], "button":[ { "id":"microphone", "showAsAction":"ifRoom" }, { "id":"speaker", "showAsAction":"ifRoom" }, { "id":"camera", "showAsAction":"ifRoom" }, { "id":"invite", "showAsAction":"ifRoom", "isCustomizedClick":true }, { "id":"leave", "showAsAction":"ifRoom", "isCustomizedClick":true }, { "id":"share", "showAsAction":"never", "isCustomizedClick":true }, { "id":"attendee", "showAsAction":"ifRoom", "isCustomizedClick":true }, { "id":"call_other_number", "showAsAction":"ifRoom", "isCustomizedClick":true }, { "id":"feedback", "showAsAction":"never" }, { "id":"hands_up", "showAsAction":"never" }, { "id":"change_chairman_auth", "showAsAction":"never", "isCustomizedClick":false }, { "id":"rename", "showAsAction":"never" }, { "id":"lock_conf", "showAsAction":"never" }, { "id":"annotation", "showAsAction":"never" }, { "id":"remote_control", "showAsAction":"never" }, { "id":"stop_share", "showAsAction":"never" }, { "id":"chat", "showAsAction":"ifRoom", "isCustomizedClick":true }, { "id":"export_participants", "showAsAction":"never" }, { "id":"attendee_access_control", "showAsAction":"never" }, { "id":"network_detection", "showAsAction":"never" }, { "id":"mute_all", "showAsAction":"never" }, { "id":"allow_unmute", "showAsAction":"never" }, { "id":"dual_screen", "showAsAction":"never" }, { "id":"record", "showAsAction":"never" }, { "id":"vote", "showAsAction":"never" } ] } } } }
由于函数Config的uiConfig是字符数组,需要把上述的json转换成字符串形式,请参考下面的示例代码。
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
/** * UI界面配置 */ int hwmSDKConfigUI::hwmSDKStartUIConfigTotal() { CString start = "{\"frame\":{"; //会议窗口名称 CString name = "\"name\":\"MyApp\""; //会议链接前缀 CString linkPrefix = "\"linkPrefix\":\"https://www.demo.com/\""; //自定义外部会议信息框开关 CString isUseExternalConfInfoWnd = "\"isUseExternalConfInfoWnd\":\"false\""; //外部通讯录开关 CString isUseExternalAddressBook = "\"isUseExternalAddressBook\":\"false\""; CString menuStart = "\"confMenu\":{"; //会议信息 CString titleBar = "\"titleBar\":{\"confDetail\":{\"showAsAction\":\"ifRoom\"}}"; CString toolBarStart = "\"toolBar\":{"; //自定义按钮 CString customMenuStart = "\"customButton\":["; CString customMenu1 = "{\"id\":\"customMenu1\",\"title\":\"自定义按钮1\"}"; CString customMenu2 = "{\"id\":\"customMenu2\",\"title\":\"自定义按钮2\"}"; CString customMenuEnd = "]"; //会控按钮 CString buttonStart = "\"button\":["; CString inviateButton = "{\"id\":\"invite\",\"showAsAction\":\"ifRoom\",\"isCustomizedClick\":true}"; CString leaveButton = "{\"id\":\"leave\",\"showAsAction\":\"ifRoom\",\"isCustomizedClick\":true}"; CString callButton = "{\"id\":\"call_other_number\",\"showAsAction\":\"ifRoom\",\"isCustomizedClick\":true}"; CString attendeeButton = "{\"id\":\"attendee\",\"showAsAction\":\"ifRoom\",\"isCustomizedClick\":true}"; CString shareButton = "{\"id\":\"share\",\"showAsAction\":\"ifRoom\",\"isCustomizedClick\":true}"; CString annotationButton = "{\"id\":\"annotation\",\"showAsAction\":\"never\"}"; CString stopshareButton = "{\"id\":\"stop_share\",\"showAsAction\":\"never\"}"; CString feedbackButton = "{\"id\":\"feedback\",\"showAsAction\":\"never\"}"; CString remotecontrolButton = "{\"id\":\"remote_control\",\"showAsAction\":\"never\"}"; CString handsupButton = "{\"id\":\"hands_up\",\"showAsAction\":\"never\"}"; CString changechairmanButton = "{\"id\":\"change_chairman_auth\",\"showAsAction\":\"never\"}"; CString renameButton = "{\"id\":\"rename\",\"showAsAction\":\"never\"}"; CString lockconfButton = "{ \"id\":\"lock_conf\",\"showAsAction\":\"never\"}" CString chatButton = "{\"id\":\"chat\",\"showAsAction\":\"never\"}"; CString exportButton = "{\"id\":\"export_participants\",\"showAsAction\":\"never\"}"; CString accessButton = "{\"id\":\"attendee_access_control\",\"showAsAction\":\"never\"}"; CString buttonEnd = "]"; CString toolBarEnd = "}"; CString menuEnd = "}"; CString end = "}}"; CString customMenu = customMenuStart + customMenu1 + "," + customMenu2 + customMenuEnd; CString button = buttonStart + inviateButton + "," + leaveButton + "," \ + callButton + "," + attendeeButton + "," + shareButton + "," + annotationButton + "," + stopshareButton + ","\ + feedbackButton + "," + remotecontrolButton + "," + handsupButton + "," + changechairmanButton + "," + renameButton + ","\ + lockconfButton + "," + chatButton + "," + exportButton + "," + accessButton + buttonEnd; CString menu = menuStart + "," + titleBar + toolBarStart + customMenu + "," + button + toolBarEnd + menuEnd; CString config = start + name + "," + linkPrefix + "," + isUseExternalConfInfoWnd + "," + isUseExternalAddressBook + "," + menu + end; //转换成UTF8格式 string uiConfig = CTools::UNICODE2UTF(config); int ret = hwmsdkagent::Config(uiConfig); return ret; } |