更新记录
1.0.2(2023-11-03)
1、ios修复首次权限提示弹起问题。 2、ios优化屏幕分享清晰度。 3、插件包剔除ios拓展配置文件。
1.0.1(2023-11-02)
1、基于webRTC的单人音视频通话、多人音视频通话、桌面分享功能的uniapp原生插件,支持android、ios平台。 2、无需第三方服务支持,本地部署插件服务端,TURN中继即可使用。 3、插件服务端包含WebSocket、http的IM 、信令交换等呼叫相关操作的服务。
平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:6.0 - 12.0 | armeabi-v7a:支持,arm64-v8a:支持,x86:未测试 | 适用版本区间:12 - 16 |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios
注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择
一、插件申明
1、本插件服务端需要私有化部署,示例项目中的服务端地址只能用于体验,不能用于生产环境。
2、本插件严禁用于任何违法犯罪的业务,否则造成任何法律后果由使用者自行承担。
插件使用过程中有任何疑问可加入QQ群提问,技术交流QQ群号:754183242,也可添(Tel):****
二、功能简介
1、单人音频实时通话支持接听、挂断、开启/关闭麦克风、开启关闭扬声器、开启悬浮窗。
2、单人视频实时通话支持接听、挂断、开启/关闭麦克风、开启/关闭扬声器、前后摄像头切换、视频窗口切换、桌面共享、开启悬浮窗。
3、多人音频会议支持接听、挂断、开启/关闭麦克风、开启/关闭扬声器、邀请成员、成员麦克风打开/关闭、退出会议、结束会议、开启悬浮窗。
4、多人视频会议支持接听、挂断、开启/关闭麦克风、开启/关闭扬声器、开启/关闭摄像头、邀请成员、成员麦克风打开/关闭、退出会议、结束会议、桌面共享、开启悬浮窗。
三、接口说明
const webrtcPlugin = uni.requireNativePlugin('Hoxin-WebrtcPlugin');
1.设置配置信息
字段名 | 必须的 | 含义 |
---|---|---|
self.id | 是 | 当前用户ID |
self.name | 是 | 当前用户名称 |
self.logo | 是 | 用户LOGO头像地址 |
api.host | 是 | 服务端地址 |
api.token | 否 | 当前用户token,当前demo 可不传,服务端实现登录接口后可再传 |
ice.servers | 是 | turn或者sutn服务配置 |
webrtcPlugin.setupAppConfig({
"self.id":10000,
"self.name":"远方",
"self.logo":"http://api.xxxxxx.com/file/user-icon/10000",
"api.host":"http://api.hoxin.farsunset.com",
"api.token":"XXXXXXXXXXXX",
"ice.servers":[
{
"uri":"turn:turn.farsunset.com:3478",
"password":"coturnv5",
"username":"coturn"
},
{
"uri":"stun:stun.l.google.com:19302"
}
]
});
2.更新通讯录列表
同步通讯录。用于选择联系人,不包含当前用户
webrtcPlugin.setupContactList({
"friends":[
{
"id":10000,
"name":"远方",
"logo":"http://api.xxxxxx.com/file/user-icon/10000"
},
{
"id":10001,
"name":"张三",
"logo":"http://api.xxxxxx.com/file/user-icon/10001"
}
]
});
3.拨打单人语音通话
id:被叫UID
webrtcPlugin.callSingleVoice({
"id":10000
});
4. 拨打单人视频通话
id:被叫UID
webrtcPlugin.callSingleVideo({
"id":10000
});
5. 拨打多人语音通话
字段名 | 是否必填 | 含义 |
---|---|---|
maximumNumber | 否 | 最多通话人数(包含自己),默认是9 |
members | 否 | 如果是从群发起,传群成员列表(排除自己),否则不传,从通讯录选择 |
webrtcPlugin.callRoomVoice({
"maximumNumber":"9",
"members":[
{
"id":10000,
"name":"远方",
"logo":"http://api.xxxxxx.com/file/user-icon/10000"
},
{
"id":10001,
"name":"张三",
"logo":"http://api.xxxxxx.com/file/user-icon/10001"
}
]
});
6.拨打多人视频通话
字段名 | 是否必填 | 含义 |
---|---|---|
maximumNumber | 否 | 最多通话人数(包含自己),默认是9 |
members | 否 | 如果是从群发起,传群成员列表(排除自己),否则不传,从通讯录选择 |
webrtcPlugin.callRoomVideo({
"maximumNumber":"9",
"members":[
{
"id":10000,
"name":"远方",
"logo":"http://api.xxxxxx.com/file/user-icon/10000"
},
{
"id":10001,
"name":"张三",
"logo":"http://api.xxxxxx.com/file/user-icon/10001"
}
]
});
7.收到单人通话来电
收到单人通话来电,包含语音和视频通话来电
webrtcPlugin.onSingleIncomingCall({
"sender":10000,
"action":900,
"content":"xxxxxxx",
"extra":"xxxxxxx",
"timestamp":1681025412032
});
8.收到多人通话来电
收到多人通话来电,包含语音和视频通话来电
webrtcPlugin.onRoomIncomingCall({
"member.logo":{
"10000":"http://xxx.xx.xx/10000.jpg",
"10001":"http://xxx.xx.xx/10001.jpg",
"10002":"http://xxx.xx.xx/10002.jpg"
},
"message.sender":10000,
"message.action":910,
"message.content":"xxxxxxx",
"message.extra":"xxxxxxx",
"message.timestamp":1681025412032
});
9.通话事件消息透传
通话相关事件消息透传,包含ICE和通话接通挂断等事件消息 由插件处理所有来电通知事件流程。
webrtcPlugin.onWebrtcEventMessage({
"sender":10000,
"action":900,
"content":"xxxxxxx",
"extra":"xxxxxxx",
"timestamp":1681025412032
});
10. 新增联系人
通讯录增增联系人
webrtcPlugin.addContact({
"id":10000,
"name":"远方",
"logo":"http://api.xxxxxx.com/file/user-icon/10000"
});
11. 删除联系人
通讯录删除联系人 id:用户UID
webrtcPlugin.removeContact({
"id":10000
});
12. 重拨多人语音通话
字段名 | 是否必填 | 含义 |
---|---|---|
maximumNumber | 否 | 最多通话人数(包含自己),默认是9 |
idList | 是 | 与会人员UID列表(排除自己) |
members | 否 | 如果是从群发起,传群成员列表(排除自己),否则不传,从通讯录选择 |
webrtcPlugin.recallRoomVoice({
"maximumNumber":"9",
"idList":[
10000,
10001,
10002
],
"members":[
{
"id":10000,
"name":"远方",
"logo":"http://api.xxxxxx.com/file/user-icon/10000"
},
{
"id":10001,
"name":"张三",
"logo":"http://api.xxxxxx.com/file/user-icon/10001"
}
]
});
12. 重拨多人视频通话
字段名 | 是否必填 | 含义 |
---|---|---|
maximumNumber | 否 | 最多通话人数(包含自己),默认是9 |
idList | 是 | 与会人员UID列表(排除自己) |
members | 否 | 如果是从群发起,传群成员列表(排除自己),否则不传,从通讯录选择 |
webrtcPlugin.recallRoomVideo({
"maximumNumber":"9",
"idList":[
10000,
10001,
10002
],
"members":[
{
"id":10000,
"name":"远方",
"logo":"http://api.xxxxxx.com/file/user-icon/10000"
},
{
"id":10001,
"name":"张三",
"logo":"http://api.xxxxxx.com/file/user-icon/10001"
}
]
});
13.重回多人通话房间
type:当前通话的类型 10:语音 11:视频
webrtcPlugin.reenterCallRoom({
"tag":"xxxxxxxx",
"type":10,
"uid":10000,
"member":{
"10000":"远方",
"10001":"张三",
"10002":"李四"
}
});
14.添加头像信息
多人通话时有陌生人,为他们添加头像地址
webrtcPlugin.addLogo({
"id":10005,
"logo":"http://api-hoxin.farsunset.com/file/user-icon/10002"
);
四、globalEvent事件通知
var globalEvent = uni.requireNativePlugin('globalEvent');
globalEvent.addEventListener('HoxinWebrtcEvent', function(e) {
});
1.单人通话完结通知
所有单人通话事件均放在这个事件当中,根据状态来进行消息记录显示处理
字段名 | 含义 |
---|---|
data.state | 通话状态 0:已经接通 1:已经取消 2:已拒绝 3:设备正忙 4:响应超时 5:忽略来电 |
data.duration | 通话时长(毫秒) |
data.role | 通话角色 0:主叫 1:被叫 |
data.type | 通话类型 0:语音 1:视频 |
data.uid | 对方用户UID |
{
"key":"ACTION_CALL_FINISHED",
"data":{
"state":0,
"duration":60000,
"role":0,
"type":1,
"uid":10000
}
}
2.多人通话加入房间
需要通过长连接发送加入房间请求 https://www.yuque.com/yuanfangxiyang/bge3gh/omdat6#q9L4Z
字段名 | 含义 |
---|---|
data | 房间号 |
{
"key":"ACTION_CALL_SET_ROOM_TAG",
"data":"XXXXXXXXX"
}
3.多人通话退出房间
需要通过长连接发送离开房间请求 https://www.yuque.com/yuanfangxiyang/bge3gh/omdat6#Hu3or
{
"key":"ACTION_CALL_REMOVE_ROOM_TAG",
}
4.多人通话完结通知
所有多人通话事件均放在这个事件当中,根据状态来进行消息记录显示处理
字段名 | 含义 |
---|---|
data.tag | 房间号 |
data.state | 通话状态 0:已经接通 1:已经取消 2:已拒绝 3:设备正忙 4:响应超时 5:忽略来电 |
data.duration | 通话时长(毫秒) |
data.timestamp | 会议时间 房间创建时间戳(13位) |
data.type | 通话类型 10:语音 11:视频 |
data.uid | 通话发起人UID |
data.member | 参会人信息 UID:名称 |
{
"key":"ACTION_ROOM_CALL_FINISHED",
"data":{
"tag":"XXXXXXXX",
"state":0,
"duration":60000,
"timestamp":1684215415200,
"type":10,
"uid":10000,
"member":{
"10000":"张三",
"10001":"李四",
"10002":"王五"
}
}
}
5.开始单人呼叫
打开呼叫页面时触发
{
"key":"ACTION_START_CALLING",
}
6.开始多人呼叫
打开呼叫页面时触发
{
"key":"ACTION_START_ROOM_CALLING",
}
四、使用说明
1、示例代码包结构说明
2、插件接入流程
1)联系作者购买并私有化部署服务端。联系微信(Tel):****。
2)参照示例代码说明,复制示例中的SDK代码、插件代码、插件调用代码到自己的uniapp调通功能即可。
3、重要说明:
1、开源部分的H5插件(hybird)本身也能支持打包H5、android、ios三端。跟原生插件相比在部分机型上的兼容性、使用体验比原生差。
2、示例代码已做好了H5插件和原生插件的适配,能同时兼容H5插件和原生android、ios插件,购买引入原生插件即可。