更新记录
2.1(2020-08-11) 下载此版本
- 更新语音聊天,接收方显示成视频的问题
- 移除对flame弹幕库的依赖 (修改改为滚屏显示)
- 添加直播(观众方)自定义商品显示接口
2.0(2020-08-05) 下载此版本
- 分开一对一,多对多api接口
- 添加直播(非cdn分发方式)
- 添加会议全体静音,静画功能
1.1(2020-07-24) 下载此版本
- 添加接收方头像与昵称配制
平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:4.4 - 11.0 | armeabi-v7a:支持,arm64-v8a:支持,x86:未测试 | × |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在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原生插件配置”->”云端插件“列表中删除该插件重新选择
腾讯云实时音视频插件
先看看效果
- 到腾讯云管理后台创建APPID并生成useSig->https://console.cloud.tencent.com
- 进入实时音频管理->https://console.cloud.tencent.com/trtc
- 创建appID ->复制useSig [https://console.cloud.tencent.com/trtc/app/detail/quickstart/1400384396]
-
useSig生成规则参照:https://cloud.tencent.com/document/product/647/17275
注意腾讯云实时语音Sdk并不是免费的
注意腾讯云实时语音Sdk并不是免费的
注意腾讯云实时语音Sdk并不是免费的
重要的事情说三遍具体收费情况自行查看:https://cloud.tencent.com/product/trtc
实例化组件
const txCall=uni.requireNativePlugin('HG-TxCall');
const modal = uni.requireNativePlugin('modal');
初始化
调用config(json)初始化
txCall.config( { "userId":this.$data.config.userid,//我的用户ID "userSig":"eJyrVgrxCdYrSy1SslIy0jNQ0gHzM1NS80oy0zLBwoZQweKU7MSCgswUJStDEwMDYwtjM0sTiExqRUFmUSpQ3NTU1MjAwAAiWpKZCxazNDK0MDM0gaotzkwHmhngVJpU5FIcHFXmXWGiXewd6VFa7OTpZx4ZkZ3v7JmV6xwQGFHo7Wti4Rtpq1QLABfrL6w_",//UserSig的密钥 "nickName":"petter",//用户昵称 "useDefaultRandomAvatar":true,//是否使用随机头像 "userAvatar":"", //头像地址 "appid":1400383633, //腾讯云申请的appID "baseUrl":"http://zf.hualin688.com/api/api/", "api":"userMsgById" } ,(ret) => { modal.toast({ message: ret.code, duration: 1.5 }); } );
参数说明
参数名 | 说明 | 必要 | 类型 | 默认值 |
---|---|---|---|---|
userId | 当前用ID | 是 | String | 无 |
userSig | 用户sig,根据用户名计算生成的加密串字符串 | 是 | String | 无 |
nickName | 显示的名称 | 是 | String | 无 |
useDefaultRandomAvatar | 是否使用随机头像 | 是 | bool | false |
userAvatar | 用户头像地址 | 否 | String | 无 |
appid | 在腾讯云创建应用的appID | 是 | int | 无 |
baseUrl | 接收邀请时获取拨号方信息的地址 | 否 | String | 无 |
api | 获取拨号方信息的api | 否 | String | 无 |
特别说明
在接收到邀请时,如果有配制baseUrl 与 api 则会使用这两个参数结合拨号方用户id生成一个get请求 get请求拼接方式如下: 如:baseUrl = http://zf.hualin688.com/api/api/ api = userMsgById 则最后请求 连接为: http://zf.hualin688.com/api/api/userMsgById?id={拨号方id} 返回数据格式必须如下:
{ "errorCode":0, "errorMessage":"\u6210\u529f", "data":{ "avatar":"http:\/\/zf.hualin688.com\/uploads\/avatar\/20200721\/ca6bdd1e22b2e454d1d48b2945b202b4.jpg", "nickName":"\u54c8\u54c8" } }
如果数据解析异常,或格式不对,将会使用默认头像 用户昵称会显示拨号方的id号
一对一语音,视频 (电话模式)
startCall(config);
txCall.startCall({
"callType":"audio",//audio表示语音,video表示视屏通话
"mode":"call",//call表示通话 meeting表示会议
"roomId":1101,//会议ID 房间号不存在,则自动创建
"targetInfo":{//目标信息
"userId":this.$data.config.targetId,//被呼叫方的ID
"nickName":"张三",//用户昵称
"userAvatar":"", //头像地址
}
}
);
参数说明
参数名 | 说明 | 必要 | 类型 | 默认值 |
---|---|---|---|---|
callType | 类型(audio,video) | 是 | String | audio |
mode | 模式(call,meeting) | 是 | String | call |
roomId | 会议ID | 否 | int | 无,在meeing模式下,必填 |
targetInfo | 目标用户信息 | 否 | object | 无,在call模式下,必填 |
targetInfo
参数名 | 说明 | 必要 | 类型 | 默认值 |
---|---|---|---|---|
userId | 目标用户ID | 是 | String | 无 |
nickName | 目标用户昵称 | 是 | String | 无 |
userAvatar | 目标头像地址 | 否 | String | 无,在useDefaultRandomAvatar为true时,随机 |
多对多语音,视频 (会议模式)
startMeeting(config); 多对多语音
txCall.startMeeting({ "type":"audio",//audio表示语音,video表示视屏通话 "roomId":1101,//会议ID 房间号不存在,则自动创建 "roomName":'房间名称', "role":'anchor',//anchor表示主持人 ,audience 表示参与者 userList:[{ id:"1", name:'petter', avatar:'', }, { id:"2", name:'petter2', avatar:'', }, { id:"3", name:'petter3', avatar:'', } ] },(ret) => { modal.toast({ message: ret.code + ","+ret.message, duration: 1.5 }); } );
多对多视频
txCall.startMeeting({ "type":"video",//audio表示语音,video表示视屏通话 "roomId":1101,//会议ID 房间号不存在,则自动创建 "roomName":'房间名称', "defaultOpenAudio":false, "defaultOpenVideo":true, userList:[{ id:"1", name:'petter', avatar:'', }, { id:"2", name:'petter2', avatar:'', }, { id:"3", name:'petter3', avatar:'', } ] },(ret) => { modal.toast({ message: ret.code + ","+ret.message, duration: 1.5 }); } );
参数说明
参数名 | 说明 | 必要 | 类型 | 默认值 |
---|---|---|---|---|
type | 会议模式 | 是 | String | audio |
roomId | 会议ID | 是 | String | 无 |
defaultOpenAudio | 默认是否上传语音 | 是 | bool | 无 |
defaultOpenVideo | 默认是否上传视频 | 是 | bool | 无 |
role | 加入会议角色 | 否 | String | anchor表示主持人 ,audience 表示参与者 |
userList | 会议参与人员列表 | 是 | Array | 无 |
添加弹幕(只对视频会议)
txCall.sendDanmaku({
avatar:'',
nickName:'petter',
content:'测试'+(Math.round(Math.random()*100))
});
开始直播(主播)
txCall.startLiveRoom({
title:'我的直播',
roomID:'1101',
});
进入直播(观众)
txCall.enterLiveRoom({
roomName:'我的直播',//房间名称
roomId:'1101',//主播房间号
anchorId:''+this.$data.config.targetId,//主播id
anchorName:'petter',//主播名称
coverUrl:'',//封面
pusher_avatar:'',//主播头像
});
添加自定义商品信息
var globalEvent = uni.requireNativePlugin('globalEvent');
globalEvent.addEventListener('customGoodEvent', function(ret) {
modal.toast({
message: "我来自直播=>"+JSON.stringify(ret),
duration: 2
});
});
txCall.setLiveCustomGoodInfo({
id:'1',//点按钮后,返回的信息
extra:'我是附加信息',//点按钮后,返回的信息
title:'我是标题',//显示标题 (最多两行)
buttonTitle:'点我',//按键内容
imgUrl:'https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1597108492&di=661604ec5280e18041da9f0f4621b4ef&src=http://pic.feizl.com/upload/allimg/170614/0913162K0-3.jpg',
content:'美女,美女,美女',//显示内容(单行)
show:true,//控制是否显示自定商品信息
});
全体静音(解除静音)视频会议有效
txCall.muteMic(true);
全体静画(解除静画) 视频会议有效
txCall.muteVideo(true);
登出腾讯云
logOut()
关闭挂断(退出会议,退出直播)
closeCall();
参数说明
此函数没有参数
异步回调说明json格式
{"code":-93,"message":""}
code值说明
代码 | 说明 |
---|---|
-93 | 会话结束 |
-94 | 会话超时 |
-95 | 对方忙 |
-96 | 无应答 |
-97 | 对方会话取消 |
-98 | 被拒绝 |
-99 | 未提供会议ID |
-100 | 未登录 |
-105 | 退出会议 |
-103 | 被邀请电话(视频) |
-102 | 有用户离开 |
-101 | 有用户进入 |
-85 | 登出 |
-90 | 登录房间 |
-88 | 房间配制成功 |
-92 | IM登录成功 |
other | 其它代码,可参考返回的message说明 |