iOS

# 体验提升

# 1. 媒体设备检测

插件提供独立的媒体检测界面,可以检测麦克风/扬声器/摄像头是否可用,以及进行通话设置如虚拟背景墙,查看版本信息。

img

var webPlugin = new WebPlugin();

/**
  * @desc 显示或隐藏设备管理窗口
  * @param {boolean} show - 是否显示
  */
webPlugin.ShowSettingWindow(true);

// 设置界面打开或者隐藏的结果回调
webPlugin.OnShowSettingWindow = function(result, reason) {
  console.log('ShowSettingWindow', result, reason);
}

# 2. 打开关闭涂鸦

var webPlugin = new WebPlugin();

/**
  * @desc 打开涂鸦
  * @param {boolean} open - 打开/关闭
  */
webPlugin.OpenDoodle(true);

/**
  * @desc 涂鸦打开关闭通知
  * @param {boolean} Open 打开/关闭
  */
webPlugin.OnDoodleOpenNotify = function(open) {
  console.log('OnDoodleOpenNotify', open);
};

# 3. 显示或隐藏开发信息窗口

在通话内才会显示具体信息。

img

var webPlugin = new WebPlugin();

/**
  * @desc 显示或隐藏开发信息窗口
  * @param {boolean} show - 是否显示
  */
webPlugin.StatisticDevelopWindow(true);

// 显示或隐藏开发信息窗口的结果回调
webPlugin.OnStatisticDevelopWindow = function(result, reason) {
  console.log('StatisticDevelopWindow', result, reason);
}

# 4. 打开或者关闭根因码

根因码窗口可以看到 SDK 的事件码

img

var webPlugin = new WebPlugin();

/**
  * @desc 打开或者关闭根因码
  * @param {boolean} show - 是否显示
  */
webPlugin.ShowCauseCodeWindow(true);

# 5. SDK 事件上报

SDK 事件上报给前端,一般为通知、警告、提示等

var webPlugin = new WebPlugin();

/**
  * @desc 事件通知,可用于界面提示
  * @param {string} type - 提示类型 Error|Warn|Info
  * @param {string} message - 提示内容
  */
webPlugin.OnEventNotify = function (type, message) {
  alert(message);
};

# 6. 网页事件交互

网页事件交互,确认、取消等。

var webPlugin = new WebPlugin();

/**
  * @desc 网页事件交互:确认、取消等。
  * @param {String} type 类型
  * @param {String} content 内容
  */
webPlugin.WebEvent(type, content);
// 取消截图
webPlugin.WebEvent("CancelSnapshot", SDK_STATE.snapshotInfo.snapShotFilePath)

# 7. 控制通话内播放音频

可以在通话内播放本地音乐,使对端可以听到。注意:支持 pcm、wav、ilbc、amr、opus 格式。

var webPlugin = new WebPlugin();

/**
  * @desc 控制通话内播放音频
  * @param {boolean} enable 是否开始
  * 					- true 开始
  * 					- false 结束
  * @param {string} filePath 播放地址(支持pcm、wav、ilbc、amr、opus格式)
  * @param {boolean} loop 是否循环播放
  * 						- true 循环
  * 						- false 不循环
  */
// 播放
webPlugin.EnableAudioInputFromFile(true, filePath, loop);
// 结束
webPlugin.EnableAudioInputFromFile(false, filePath, loop);

/**
  * @desc 通话内音频播放结束上报
  */
webPlugin.OnFileAudioInputFinishResult = function() {
  console.log('OnFileAudioInputFinishResult');
};

通话内播放音频的时候控制暂停和继续。

/**
  * @desc 通话内播放音频的时候控制暂停和继续
  * @param {boolean} suspend 暂停继续
  * 					- true 暂停
  * 					- false 继续
  */
// 暂停
webPlugin.SuspendAudioInputFromFile(true);
// 继续
webPlugin.SuspendAudioInputFromFile(false);

# 8. 控制通话本端(铃声)播放音频

在通话内本端播放本地音乐,只有本端可以听到。注意:支持 pcm、wav、ilbc、amr、opus 格式。

var webPlugin = new WebPlugin();

/**
  * @desc 控制通话本端(铃声)播放音频
  * @param {boolean} enable 是否开始
  * 					- true 开始
  * 					- false 结束
  * @param {string} filePath 播放地址
  * @param {boolean} loop 是否循环播放
  * 						- true 循环
  * 						- false 不循环
  */
// 播放
webPlugin.EnableRing(true, filePath, loop);
// 结束
webPlugin.EnableRing(false, filePath, loop);

/**
  * @desc 播放本地音频调用情况上报
  * @param {boolean} result - true表示调用成功,false表示调用失败
  * @param {string} action 
  * 					- Start:开始
  * 					- End:结束
  * 					- Pause:暂停
  * 					- Continue:继续
  * @param {boolean} inRoom - true表示调用通话内播放音频,false调用通话本端播放音频
  */
webPlugin.OnAudioPlayResult = function(result, action, inRoom) {
  console.log('OnAudioPlayResult', result, action, inRoom);
};

# 9. 网络状态改变通知

var webPlugin = new WebPlugin();

/**
  * @desc 网络状态改变通知
  * @param {string} state - 状态
  * - Disconnected: 断开状态
  * - VeryBad: 非常差
  * - Bad: 差
  * - Normal: 普通
  * - Good: 好
  * - VeryGood: 非常好
  * @param {string} userId: 用户id
  */
webPlugin.OnNetworkChangedNotify = function(state, userId) {
  console.log('OnNetworkChangedNotify', state, userId);
};

# 10. 断开连接上报

var webPlugin = new WebPlugin();

/**
  * 断开连接上报
  * @param {String} state 
  *  		DISCONNECT_STATE.ERROR 错误
  * 			DISCONNECT_STATE.RECONNECT 重连
  *			DISCONNECT_STATE.CLOSE 关闭
  * @param {String} message 
  * 					- state为ERROR是,message为信息
  * 					- state为RECONNECT是,message为重连个数
  * 					- state为CLOSE是,message为code
  */
webPlugin.OnPluginDisconnect = function(state, message) {
  console.log('OnPluginDisconnect state:' + state + "; message:" + message);
}

# 11. 关闭websocket之后的插件操作

可以设置当网页关闭的时候插件要怎么做,插件可以随着网页一起关闭,可以只消除状态,也可以什么都不做。

var webPlugin = new WebPlugin();

/**
	* @desc 关闭websocket之后的插件操作
	* @param {string} action - Quit插件退出(默认)、ClearState插件不退出但清除状态、Nothing无操作
	*/
webPlugin.SetActionAfterWsClose(_getValue('select-plugin-action'));

# 12. WebSocket连接上报

当WebSocket和插件连接后将会上报给网页该事件。

/**
 * @desc WebSocket连接上报
 */
webPlugin.OnPluginConnect = function() {
  console.log('OnPluginConnect');
}

# 13. 获取系统信息

获取系统信息(mac地址,ip地址,操作系统等),结果通过OnGetSystemInfoResult返回。

systemInfos ["NetworkInterfaces","DiskSpace","OsName"],对应需要获取的系统信息,如传空,则全部信息都会返回,NetworkInterfaces 网络ip/mac DiskSpace录制文件所在磁盘空间 OsName操作系统名字,例如systemInfos传["OsName"],则OnGetSystemInfoResult只会收到osName字段。因为某些系统信息(mac地址)耗时,所以可根据具体需求获取指定的系统信息。

/**
 * @desc WebSocket连接上报
 */
webPlugin.GetSystemInfo(systemInfos);

获取系统信息结果

{boolean} osName 操作系统
networkInterfaces 网络接口列表
[
  {"name":"eth0","mac":"00-50-56-C0-00-08","ip":"192.168.171.1"},
  {"name":"wlan1","mac":"0C-96-E6-2A-80-6F","ip":"172.16.2.127"},
  {"name":"eth7","mac":"00-50-56-C0-00-01","ip":"192.168.159.1"}
]
diskSpace 录制文件所在磁盘容量 单位Mb

示例代码:

webPlugin.OnGetSystemInfoResult = function (osName, networkInterfaces, diskSpace) {
  console.log('OnGetSystemInfoResult', osName, networkInterfaces, diskSpace);
}

# 14. 网页渲染视频

视频源采集EnableVideoCapture。

采集类型 camera/desktop;

sourceValue 采集源id;

receiveData 是否接收视频数据

webPlugin.EnableVideoCapture(enable, sourceType, sourceValue, receiveData);

# 15. 插件UI设置

# 设置视频窗口的基本属性

设置视频窗口的基本属性,包括:

  1. 通话窗口
  • 是否构造出界面,不构造可以使用自己的界面;
  • 是否显示顶部状态栏;
  • 顶部状态栏显示按钮;
  • 是否显示底部工具栏;
  • 底部工具栏显示按钮;
  • 是否展示通话视频界面中的控件;
  • 视频容器中显示的控件;
  • 视频窗体显示的位置;
  • 视频窗体是否可以拖拽拉伸;
  • 窗体是否一直处于置顶
  • 窗体坐标;
  • 窗体宽高;
  • 是否隐藏显示来电/呼叫窗口
  • 任务栏是否隐藏
  • 多人是否需要画中画布局
  • 渲染模式
  • 当发起共享时,视频窗口是否切换到小窗口模式
  • 关闭摄像头时视频通话背景颜色,HEX Color格式, 支持 #RRGGBB #RRGGBBAA,不传或者传空,则默认黑色,即#000000。
  • 关闭摄像头时,视频大窗口背景图base64,大窗口用于演讲者模式、一对一会议模式下的焦点成员。png格式图片。
  • 关闭摄像头时,视频小窗口背景图,置于大图之上base64,png格式图片。
  1. 接听窗口
  • 是否显示
  1. 呼叫窗口
  • 是否显示;
  • 呼叫页面UI样式,0:显示等待时长,1:不显示等待时长,目前只有访客生效
  • 是否显示呼叫界面功能按钮
  1. 本地录制回放窗口
  • 是否置顶
  • 是否在任务栏中隐藏
  1. 设置窗口
  • 是否置顶
  • 是否在任务栏中隐藏
  • 是否显示入会参数设置界面,该界面设置参数主要用于测试
  1. 组件设置
  • Toast:All:所有toast都打开;None:所有toast都不打开。
  • Dialog:是否显示设备相关弹窗
this.uiConfig = {
  "BridgeType": "SetUIConfig",
  // 通话窗口
  "VideoWindowConfig": {
    // 是否构造出通话界面(通话前)
    "Show": true,
    // 是否显示顶部状态栏
    "ShowTopBar": true,
    // 顶部状态栏显示按钮及顺序
    // 按钮名称:
    // - Top: 置顶按钮
    // - Min: 最小化按钮
    // - Max: 最大化按钮
    // - FullScreen: 全屏按钮
    // - Close: 关闭按钮
    "TopBarButtons": ["Top", "FullScreen", "Min", "Max", "Close"],
    // 是否显示底部工具栏
    "ShowBottomBar": true,
    // 底部工具栏显示按钮及顺序
    // 按钮名称:
    // - Speaker: 扬声器按钮
    // - Microphone: 麦克风按钮
    // - Camera: 摄像头按钮
    // - Setting: 设置按钮
    "BottomBarButtons": ["Microphone", "Camera", "Speaker", "Layout", "Setting"],
    // 是否展示通话视频界面中的控件
    "ShowContentView": true,
    // 视频容器中的控件
    // 控件名称:
    // - Name: 用户名显示
    // - Mic: 麦克风显示
    // - Wlan: 网络状态
    "ContentViews": ["Name", "Mic", "Wlan", "Request"],
    "EnableDrag": true,
    "EnableResize": true,
    "Top": false,
    "X": -1,
    "Y": -1,
    "Width": 1088,
    "Height": 710,
    // 是否展示或者隐藏,可以立即生效,前提时show允许构造界面并且在通话中。
    "Visible": true,
    // 任务栏是否隐藏
    "HideTask": false,
    "NeedPIPLayout": true,
    // 渲染模式: RENDER_FULL_SCREEN=0; RENDER_FULL_CONTENT=1; RENDER_FULL_AUTO=2;默认1。
    "RenderType": 1,
    "MinWhenShare": true, //当发起共享时,视频窗口是否切换到小窗口模式
		"VideoHoldBackgroundColor": "", // 关闭摄像头时视频通话背景颜色,HEX Color格式, 支持 #RRGGBB #RRGGBBAA,不传或者传空,则默认黑色,即#000000。
		"VideoHoldLargeIconBase64data": "", // 关闭摄像头时,视频大窗口背景图base64,大窗口用于演讲者模式、一对一会议模式下的焦点成员。png格式图片。
		"VideoHoldSmallIconBase64data": "" // 关闭摄像头时,视频小窗口背景图,置于大图之上base64,png格式图片。
  },
  // 接听窗口
  "IncomingWindowConfig": {
    "Show": true,
  },
  // 呼叫窗口
  "CallingWindowConfig": {
    "Show": true,
    "UIMode": 1, // 呼叫页面UI样式,0:显示等待时长,1:不显示等待时长,目前只有访客生效
    "CallButtons": ["Urgent", "End"]
  },
  // 录制回放窗口
  "UploadVideoWindowConfig": {
    "Top": false,
    // 任务栏是否隐藏
    "HideTask": false,
  },
  // 设置窗口
  "SettingWindowConfig": {
    "Top": false,
    // 任务栏是否隐藏
    "HideTask": false,
    // 是否显示入会参数设置界面,该界面设置参数主要用于测试
    "ShowParameterSetting": false
  },
  // 组件设置
  "WidgetConfig": {
    "Toast": {
      "ShowType": "All", // All:所有toast都打开;None:所有toast都不打开。
    },
    "Dialog": {
      "DeviceTip": true, // 是否显示设备相关弹窗
    }
  }
}

示例代码:

var webPlugin = new WebPlugin();

webPugin.uiConfig.VideoWindowConfig.TopBarButtons = buttonList;
webPugin.uiConfig.xxxxx = xxxx;
  ......
  ......
webPugin.SetUIConfig();

设置结果回调

var webPlugin = new WebPlugin();

webPlugin.OnSetUIConfigResult = function (result, desc) {
  console.log('OnSetUIConfigResult', result, desc);
}

# 获取视频窗口的基本属性

获取插件视频窗口的基本参数

var webPlugin = new WebPlugin();

webPlugin.GetUIConfig();

获取基本参数的回调

var webPlugin = new WebPlugin();

webPlugin.OnGetUIConfigResult = function (message) {
     console.log('OnGetUIConfigResult');
}

# 16. WebSocket连接参数设置

设置websocket连接的参数,需要在创建WebPlugin对象后设置,如果想一开始就生效请在init前设置(注意是小写的init)

/**
  * @desc 设置websocket连接的参数,需要在创建WebPlugin对象后设置,如果想一开始就生效请在init前设置(注意是小写的init)
  * @param {Number} initReConnect - 初始连接重连次数,将会提示唤醒插件。initReConnect要大于disconnectReConnect。默认是10
  * @param {Number} disconnectReConnect - 使用时断开重连次数。disconnectReConnect要小于initReConnect.默认是5
  * @param {Number} wsConnectTimeout - 单位毫秒,WebSocket连接超时时间
  * @param {Number} wsReConnectTimeout - 单位毫秒,WebSocket重连连接超时时间
  */
webAgent.SetWebsocketReconnect(8, 4, 1000, 1000);

# 17. 界面状态变化上报

包括界面如下:

- SettingWindow: 设置窗口
- DoodleWindow: 涂鸦窗口
- StatisticDevelopWindow: 开发信息
- SignWindow: 签名
- DevMessageWindow: 错误信息
- RecordHistoryWindow: 本地录制回放界面
- ScreenToolbar: 屏幕分享工具条
- VideoWindow: 视频窗口

示例代码:

/**
 * @desc 界面状态变化上报
 *
 * @param {string} windowName - 窗口名称
 *  - SettingWindow: 设置窗口
 *  - DoodleWindow: 涂鸦窗口
 *  - StatisticDevelopWindow: 开发信息
 *  - SignWindow: 签名
 *  - DevMessageWindow: 错误信息
 *  - RecordHistoryWindow: 本地录制回放界面
 *  - ScreenToolbar: 屏幕分享工具条
 *  - VideoWindow: 视频窗口
 * @param {string} state - 窗口状态
 *  - open: 打开
 *  - close: 关闭
 */
webAgent.OnWindowStateChanged = function(windowName, state) {};