假设场景:主播A、主播B、观众C
连麦前:
连麦中:
连麦后:
如下示意图:
qsStringify(obj) {
if (typeof obj !== 'object' || obj === null) {
return ''
}
const objKeys = Object.keys(obj)
const keys = []
for (let i = 0; i < objKeys.length; ++i) {
const key = objKeys[i]
if (obj[key] === null) {
continue
}
keys[i] = `${key}=${obj[key]}`
}
return keys.join('&')
},
// streamId为用户自定义变量
// appscene: 视频通话/videocall、在线直播/live、语音通话/audiocall、语音聊天室/voicechatroom
// 生成url后将其赋值给live-pusher的url即可进行推流
const pusherUrl = `trtc://cloud.tencent.com/push/${pusherConfig.streamId}?${
this.qsStringify({
sdkappid: pusherConfig.sdkAppID,
userId: pusherConfig.userId,
usersig: pusherConfig.userSig,
streamId: pusherConfig.streamId,
appscene: pusherConfig.appscene,
})
}`
// 生成url后将其赋值给live-player的src即可进行拉流
const playurl: `trtc://cloud.tencent.com/play/${this.data.streamId}?${
this.qsStringify({
streamId: this.data.streamId,
userId,
sdkappid: sdkAppID,
usersig: userSig,
})
}`
推拉流可通过live-pusher/player自身标签赋值或者wx提供的方法进行控制,参考文档:
live-pusher.html live-player.html
livePusherContext.html livePlayerContext.html
不可以,trtc-wx.js里集成的是room协议,跨房连麦不能使用room协议,因此房间、成员列表等概念需要通过后台实现,可直接使用腾讯云IM进行集成。
此处以腾讯云IM举例,主播A可以通过IM发送自定义消息给主播B,主播B解析消息内容,发现为连麦邀请,主播B再向A发送自定义消息,A收到消息解析,发现为同意连麦邀请,这时A拉取B的音视频流(此处streamId可通过B传递过来,或者使用userId作为streamId),同时主播A发送给主播B连麦成功的消息,B收到消息拉取主播A的音视频流。
简述流程为:A发起邀请=>B收到邀请,B同意=>A收到同意,A发送连麦成功=>B收到连麦成功
如果您集成了腾讯云的IM和TRTC,它们本身就是不区分平台的,用连麦场景举例,小程序端发起的连麦邀请在native端也可收到,您可以通过自定义消息设定特殊字段进行多端统一的内容解析,而trtc本身更不需要做多余处理,生成url进行推拉流即可。
小程序目前只能通过调用服务端 REST API实现混流,参考文档:
混流方案的实现与上述流程大致一致,区别在于连麦时主播A、B分别去混对方的流,用户C只需要拉主播A的流即可看到主播B的画面。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。