差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
im:applet:multiuserconference [2020/02/14 02:42] zhangdong [接口说明] |
— (当前版本) | ||
---|---|---|---|
行 1: | 行 1: | ||
- | ====== 集成文档 ====== | ||
- | **多人音视频SDK**基于微信小程序live-pusher、live-player组件, | ||
- | 小程序实时音视频目前只支持多人音视频会议,尚不支持1对1的通话,如果有1对1的需求也可以用多人会议的场景去实现,相当于会议中只有两个人。音视频SDK依赖IM SDK,所以集成前要先集成IM,把IM SDK放在全局变量wx下,let WebIM = wx.WebIM = require('sdk/connection'),可以参考[[https://github.com/easemob/webim-weixin-xcx|demo]]中src/comps/chat/multiEmedia的集成。 | ||
- | ==== 下载 ==== | ||
- | |||
- | 下载**emedia_for_miniProgram.js**。 | ||
- | * 通过github [[https://github.com/easemob/webim-weixin-xcx|仓库地址]] | ||
- | * 通过官网下载[[http://www.easemob.com/download/im|下载地址]] | ||
- | |||
- | 音视频SDK在src/emedia/emedia_for_miniProgram.js | ||
- | |||
- | ==== 集成 ==== | ||
- | 直接引用js: 拷贝文件 emedia_for_miniProgram 到小程序工程文件夹,使用 require 将 SDK 集成到项目中即可: | ||
- | <code javascript> | ||
- | var emedia = require("../emedia/emedia_for_miniProgram.js"); | ||
- | </code> | ||
- | ==== 集成步骤 ==== | ||
- | === 发起会议 === | ||
- | == 1.调用 createConference,在回调中可以得到confr对象;创建者默认为管理员 == | ||
- | <code javascript> | ||
- | emedia.mgr.createConference(confrType, password).then(function(confr){ | ||
- | //confr 即为创建的会议 | ||
- | //将ID password 发送给其他人 | ||
- | }) | ||
- | </code> | ||
- | == 2.加入会议 == | ||
- | <code javascript> | ||
- | emedia.mgr.joinConferenceWithTicket(confrId, ticket, ext).then(function(confr){ | ||
- | //confr 即为创建的会议 | ||
- | }) | ||
- | </code> | ||
- | == 3.发布本地视频流 == | ||
- | <code javascript> | ||
- | emedia.mgr.pubStream(rtcId).then(function(res){ | ||
- | // 将返回的res.data.rtmp 赋值给live-pusher的src就可以推流了 | ||
- | }) | ||
- | </code> | ||
- | == 4.sdk调用emedia.mgr.onMemberJoin(member, stream) 告知进入的人 == | ||
- | == 5.sdk调用emedia.mgr.onStreamAdded(member, stream) 告知进入的人发布的流情况,在这个回调里拿到视频流去调subStream订阅流 == | ||
- | == 6.可根据需要进行订阅emedia.mgr.subStream(streamId) == | ||
- | == 7.onMemberExited:当有人离开会议,onRoleChanged自己在会议中角色改变;onStreamRemoved某人取消流发布;onConferenceExit会议退出 == | ||
- | |||
- | === 其他人进入会议 === | ||
- | == 1.调用 joinConference,再回调中可以得到confr对象;创建者默认为管理员 == | ||
- | <code javascript> | ||
- | emedia.mgr.joinConference(confrId, password, ext).then(function(confr){ | ||
- | //confr 加入会议 | ||
- | }) | ||
- | </code> | ||
- | == 2.sdk调用emedia.mgr.onMemberJoin(member, stream) 告知进入的人 == | ||
- | == 3.sdk调用emedia.mgr.onStreamAdded(member, stream) 告知进入的人发布的流情况 == | ||
- | == 4.可根据需要进行订阅 == | ||
- | <code javascript> | ||
- | emedia.mgr.subStream(streamId).then(function(res){ | ||
- | //将返回的res.data.rtmp赋值给live-player的src就可以播放了 | ||
- | }) | ||
- | </code> | ||
- | == 5.onMemberExited:当有人离开会议,onRoleChanged自己在会议中角色改变;onStreamRemoved某人取消流发布;onConferenceExit会议退出 == | ||
- | |||
- | ==== SDK回调 ==== | ||
- | 1.有人加入会议,其他人调用joinXX等方法,如果加入成功,已经在会议中的人将会收到 | ||
- | <code javascript> | ||
- | emedia.mgr.onMemberJoined = function (member) {}; | ||
- | </code> | ||
- | |||
- | 2.有人退出会议 | ||
- | <code javascript> | ||
- | emedia.mgr.onMemberExited = function (member) {}; | ||
- | </code> | ||
- | |||
- | 3.有媒体流添加;比如有人调用pubStream之后。 | ||
- | <code javascript> | ||
- | emedia.mgr.onStreamAdded = function (member, stream) {}; | ||
- | </code> | ||
- | 4.有媒体流移除; | ||
- | <code javascript> | ||
- | emedia.mgr.onStreamRemoved = function (member, stream) {}; | ||
- | </code> | ||
- | 5.角色改变; | ||
- | <code javascript> | ||
- | emedia.mgr.onRoleChanged = function (role) {}; | ||
- | </code> | ||
- | 6.会议退出;自己主动退出,服务端主动关闭; | ||
- | <code javascript> | ||
- | emedia.mgr.onConferenceExit = function (reason, failed) { | ||
- | reason = (reason || 0); | ||
- | switch (reason){ | ||
- | case 0: | ||
- | reason = "正常挂断"; | ||
- | break; | ||
- | case 1: | ||
- | reason = "没响应"; | ||
- | break; | ||
- | case 2: | ||
- | reason = "服务器拒绝"; | ||
- | break; | ||
- | case 3: | ||
- | reason = "对方忙"; | ||
- | break; | ||
- | case 4: | ||
- | reason = "失败,可能是网络或服务器拒绝"; | ||
- | if(failed === -9527){ | ||
- | reason = "失败,网络原因"; | ||
- | } | ||
- | if(failed === -500){ | ||
- | reason = "Ticket失效"; | ||
- | } | ||
- | if(failed === -502){ | ||
- | reason = "Ticket过期"; | ||
- | } | ||
- | if(failed === -504){ | ||
- | reason = "链接已失效"; | ||
- | } | ||
- | if(failed === -508){ | ||
- | reason = "会议无效"; | ||
- | } | ||
- | if(failed === -510){ | ||
- | reason = "服务端限制"; | ||
- | } | ||
- | break; | ||
- | case 5: | ||
- | reason = "不支持"; | ||
- | break; | ||
- | case 10: | ||
- | reason = "其他设备登录"; | ||
- | break; | ||
- | case 11: | ||
- | reason = "会议关闭"; | ||
- | break; | ||
- | } | ||
- | }; | ||
- | </code> | ||
- | |||
- | ==== 接口说明 ==== | ||
- | |||
- | 1.常量 | ||
- | <code javascript> | ||
- | // 会议类型 | ||
- | emedia.mgr.ConfrType = { | ||
- | COMMUNICATION: 10, //普通会议模式 | ||
- | COMMUNICATION_MIX: 11, //大会议模式 | ||
- | LIVE: 12, //直播模式 | ||
- | }; | ||
- | |||
- | // 角色 | ||
- | emedia.mgr.Role = { | ||
- | ADMIN: 7, //管理员(可推送视频、可解散会议、可踢人、可变更其他人角色,会议创建者默认为管理员) | ||
- | TALKER: 3, // 主播(可发言、可观看) | ||
- | AUDIENCE: 1 // 观众(仅可以观看) | ||
- | }; | ||
- | </code> | ||
- | |||
- | 2.conference|confr | ||
- | <code javascript> | ||
- | // 会议对象 | ||
- | { | ||
- | confrId:"TS_X296786295944036352C27", | ||
- | id:"TS_X296786295944036352C27", | ||
- | password: "password123", | ||
- | roleToken:"roleToken", | ||
- | ticket:"ticket", | ||
- | type:12 | ||
- | } | ||
- | </code> | ||
- | 3.member | ||
- | <code javascript> | ||
- | // 成员对象 | ||
- | { | ||
- | "ext":{ //emedia.mgr.joinConference(confrId, password, {role: 'admin'})/* 用户可自定义扩展字段*/); | ||
- | "role":"admin" | ||
- | }, | ||
- | "id":"MS_X197721744293023744C19M197756407719972865VISITOR", | ||
- | "globalName":"easemob-demo#chatdemoui_yss000@easemob.com", | ||
- | "name": "yss000" | ||
- | } | ||
- | </code> | ||
- | 4.stream | ||
- | <code javascript> | ||
- | // 视频流对象 | ||
- | { | ||
- | "id":"RTC2__Of_C19M197756407719972865VISITOR", | ||
- | "voff":0, //1 视频关闭 | ||
- | "aoff":0, //1 音频关闭 | ||
- | "memId":"MS_X197721744293023744C19M197756407719972865VISITOR", | ||
- | "owner": member ,//member对象 | ||
- | "rtcId":"RTC1" | ||
- | } | ||
- | </code> | ||
- | |||
- | 5.创建会议 | ||
- | <code javascript> | ||
- | /** | ||
- | * @method createConference 创建会议 | ||
- | * @param {string} confrType 会议类型 | ||
- | * @param {string} password 会议密码 | ||
- | * @param {boolean} rec 是否录制 默认false | ||
- | * @param {boolean} recMerge 是否合并 默认false | ||
- | */ | ||
- | emedia.mgr.createConference(confrType, password).then(function(confr){ | ||
- | //confr 即为创建的会议 | ||
- | }) | ||
- | </code> | ||
- | 6.获取加入会议ticket | ||
- | <code javascript> | ||
- | /** | ||
- | * @method getConferenceTkt 申请tickit | ||
- | * @param {string} confrId 会议id | ||
- | * @param {string} password 会议密码 | ||
- | */ | ||
- | emedia.mgr.getConferenceTkt(confrId, password).then(function(tickit){ | ||
- | |||
- | }) | ||
- | </code> | ||
- | 7.销毁会议 | ||
- | <code javascript> | ||
- | /** | ||
- | * @method destroyConference 解散会议 | ||
- | * @param {string} confrId 会议id | ||
- | */ | ||
- | emedia.mgr.destroyConference(confrId).then(function(){ | ||
- | |||
- | }) | ||
- | </code> | ||
- | 8.踢人 | ||
- | <code javascript> | ||
- | /** | ||
- | * @method kickMembersById 踢人 | ||
- | * @param {string} confrId 会议id | ||
- | * @param {Array} memberNames 踢出的人 | ||
- | */ | ||
- | emedia.mgr.kickMembersById(confrId, memberNames).then(function(){ | ||
- | |||
- | }) | ||
- | </code> | ||
- | 9.改变角色 | ||
- | <code javascript> | ||
- | /** | ||
- | * @method grantRole 改变角色 | ||
- | * @param {string} confrId 会议id | ||
- | * @param {Array} memberNames 人员 | ||
- | * @param {string} role 角色 | ||
- | */ | ||
- | emedia.mgr.grantRole(confrId, memberNames, role).then(function(){ | ||
- | |||
- | }) | ||
- | </code> | ||
- | |||
- | 10.使用用户名密码加入会议,可自定义ext,其他会议成员将会看到 | ||
- | <code javascript> | ||
- | /** | ||
- | * @method joinConference 加入会议 | ||
- | * @param {string} confrId 会议id | ||
- | * @param {string} password 会议密码 | ||
- | * @param {Object} ext 扩展 | ||
- | */ | ||
- | emedia.mgr.joinConference(confrId, password, ext).then(function(){ | ||
- | |||
- | }) | ||
- | </code> | ||
- | 11.使用ticket加入会议,可自定义ext,其他会议成员将会看到 | ||
- | <code javascript> | ||
- | /** | ||
- | * @method joinConferenceWithTicket 加入会议 | ||
- | * @param {string} confrId 会议id | ||
- | * @param {string} ticket 会议ticket | ||
- | * @param {Object} ext 扩展 | ||
- | */ | ||
- | emedia.mgr.joinConferenceWithTicket(confrId, ticket, ext).then(function(){ | ||
- | |||
- | }) | ||
- | </code> | ||
- | 12.退出会议 | ||
- | <code javascript> | ||
- | emedia.mgr.exitConference(); | ||
- | </code> | ||
- | 13.发布媒体流 | ||
- | <code javascript> | ||
- | /** | ||
- | * @method pubStream 发布视频流 | ||
- | * @param {string} rtcId 视频流id 自己发布流时rtcId = wx.emedia.util.getRtcId() | ||
- | * @param {Object} ext 用户自定义扩展,其他成员可以看到这个字段 | ||
- | */ | ||
- | emedia.mgr.pubStream(rtcId).then(function(res){ | ||
- | // res.data.rtmp 为要推流的url | ||
- | }) | ||
- | </code> | ||
- | |||
- | 14.订阅媒体流 | ||
- | <code javascript> | ||
- | /** | ||
- | * @method subStream 订阅视频流 | ||
- | * @param {string} streamId 视频流id 可以在onStreamAdded中获取其他人的视频流id | ||
- | */ | ||
- | emedia.mgr.subStream(streamId).then(function(res){ | ||
- | // res.data.rtmp 为要播放的src | ||
- | }) | ||
- | </code> |