更新记录

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

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
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):13952087591

二、功能简介

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):13952087591

2)参照示例代码说明,复制示例中的SDK代码、插件代码、插件调用代码到自己的uniapp调通功能即可。

3、重要说明:

1、开源部分的H5插件(hybird)本身也能支持打包H5、android、ios三端。跟原生插件相比在部分机型上的兼容性、使用体验比原生差。

2、示例代码已做好了H5插件和原生插件的适配,能同时兼容H5插件和原生android、ios插件,购买引入原生插件即可。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

麦克风、摄像头

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问