前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MLVBLiveRoom 方案 - 客户端部分

MLVBLiveRoom 方案 - 客户端部分

原创
作者头像
腾讯云-chaoli
修改2022-01-14 20:05:07
10.7K0
修改2022-01-14 20:05:07
举报

本文用于介绍移动直播 MLVBLiveRoom 方案的客户端部分,MLVBLiveRoom 方案包含了两部分内容:客户端 MLVBLiveRoom 组件 + 房间管理服务 RoomService。RoomService 说明见 https://cloud.tencent.com/developer/article/1488765

**特别注意:

目前腾讯云 MLVBLiveRoom 方案已有方案替代,新的方案效果表现更佳。如您有直播连麦需求请参考文档接入新方案


功能介绍

主播 PK 是在秀场直播场景中经常使用的一种吸引热度的方式,两个分处不同房间的主播可以相互分屏连麦(视频通话),主播与主播之间的延迟可以达到 500ms 以内,而观众在不需要切换流地址的情况下,就可以在原来的 CDN 直播流中看到主播 PK 的效果。

MLVBLiveRoom

主播 PK 是 MLVBLiveRoom 组件的一项基本功能(MLVBLiveRoom 还支持观众同主播连麦),它分成 Client 和 Server 两个部分:

  • 终端部分(Client) MLVBLiveRoom 组件的终端部分是对腾讯视频云 LiteAVSDK(主要用于音视频,包括 TXLivePusher、TXLivePlayer 等接口) 和 IMSDK (主要用于收发消息,包括 TIMManager 和 TIMConversation 等接口)的封装。直接使用 LiteAVSDK 和 IMSDK 实现直播 + 主播PK功能是非常耗时耗力的,但通过 MLVBLiveRoom 组件,您可以直接调用 createRoom,enterRoom 和 leaveRoom 等接口就可以完成您想要的直播 + 主播PK功能。
  • 后台部分(Server) RoomService 是 MLVBLiveRoom 对应的后台组件,其职责有两个:一是房间管理(直播间的增、删、改、查)和成员管理(维护房间里有几个人正在推流,主要是连麦场景下使用,主播PK场景暂未使用);二是对腾讯云直播服务、实时音视频服务以及 IM 云通讯服务的控制(主要通过腾讯云的后台 REST API 进行调用)。

终端对接

step1: 下载 SDK 开发包
  • LiteAV SDK 位于 ZIP 包解压后的 SDK 文件夹中,用于实现音视频相关功能
  • IM SDK 位于 ZIP 包解压后的 SDK 文件夹中,用于实现 IM 通讯相关功能
  • MLVBLiveRoom 位于 ZIP 包解压后的 Demo \ lvb 文件夹中,代码开源,方便您进行调试和定制。
step2: 登录(login)

MLVBLiveRoom 单靠一个终端的组件无法独自运行,它依赖一个后台服务为其实现房间管理和状态协调,这个后台服务我们称之为房间服务RoomService)。而要使用这个房间服务,MLVBLiveRoom 就需要先进行登录(login)。

step3: 获取房间列表(getRoomList)

不管是主播还是观众,都需要有一个房间列表,调用 MVLBLiveRoom 的 getRoomList 接口可以获取到该列表。列表中每一个房间都有其对应的 roomInfo,是在 createRoom 时传入的,推荐您将 roomInfo 定义为 json 格式,这样可以有很强的扩展性。

如果您希望使用自己的房间列表,这一步可以省略,但是需要您在 step 4 中自行指定 roomID,且全局不能有重复。

step4: 主播开播(createRoom)

主播要开播,需要先调用 MVLBLiveRoom 的 startLocalPreview 接口开启本地摄像头预览,该函数需要传入一个 view 对象,该对象用于显示摄像头的视频影像。这期间 MLVBLiveRoom 会申请摄像头使用权限,同时,主播也可以对着摄像头调整一下美颜和美白的具体效果。

之后,通过调用 createRoom 接口,MLVBLiveRoom 会在后台的房间列表中新建一个直播间,同时主播端会进入推流模式。

参数roomID 如果您在调用 createRoom 时不填写 roomId,后台会为您分配一个 roomID, 并通过 createRoom 的回调接口返回给您。如果您希望自己管理房间列表,roomID 可以由您的服务器分配,那么只需要在调用 createRoom 时填写您后台分配的 roomId 即可。

step5: 观看直播(enterRoom)

观众通过 MLVBLiveRoom 的 enterRoom 接口可以进入直播间观看视频直播,enterRoom 函数需要传入一个 view 对象,用于显示直播流的视频影像。

另外,进入房间后,调用 MLVBLiveRoom 的 getAudienceList 接口可以获取观众列表,这里的列表不是全量数据,如果少于30 个人就全部返回,如果多于 30 个人,就只返回新进入的 30 个人。(出于性能方面的考虑, 而且 UI 界面上最多能也就能放下 10 个头像。)

step6: 主播PK(sendPKRequest)

主播PK是两个房间的主播在直播的同时,互相拉取对方的视频流,建立实时视频通话互动,每个房间的观众都可以看到两个主播互动的过程,流程图如下:

a. 选择目标主播

调用 getRoomList 获取当前正在直播的主播列表, 返回在线主播的详细信息,包含昵称、头像、用户ID等;然后显示一个 UI 列表,以便选择一个主播进行PK。

b. 启动 PK
  • 第一步(主播一):调用 sendPKRequest ,向主播二发起 PK 请求。
  • 第二步(主播二):会收到 onRecvPKMessage回调通知,之后可以展示一个 UI 提示,询问主播二要不要接受 PK。
  • 第三步(主播二):可以调用 responseRoomPK接受 PK 请求(accept),也可以拒绝 PK 请求;如果接受了 PK 请求(reject),请同时调用 startPK 播放主播一的视频流。
  • 第四步(主播一):通过 RequestPKCallback 可以了解到 PK 请求是否被接受。
  • 第五步(主播一):如果 PK 请求被接受,请调用 startPK 播放主播二的视频流。

函数 PlayPK 除了完成拉流播放的功能;同时会触发后台混流,即把对方主播的视频流叠加到自己的流上。普通观众不需要重新拉流,可以自动观看到两个主播PK的视频画面。

c. 结束 PK

主播PK过程中,任何一方都可以主动结束PK,假设主播一主动结束PK

  • 第六步(主播一):调用 sendC2CCustomMessage(stop) ,向主播二发起结束 PK 的请求;同时调用 stopRemoteView结束播放主播二的视频流。
  • 第七步(主播二):会收到 onRecvPKMessage回调通知。
  • 第八步(主播二):调用 stopPK 结束播放主播一的视频流。

函数 stopPlayPKStream 除了结束播放视频流,同时会取消后台混流。普通观众不需要重新拉流,可以自动切换到直播模式。

step7: 弹幕消息(sendMsg)

MVLBLiveRoom 自带了消息发送接口,可以通过 sendRoomTextMsg 函数发送普通的文本消息(用来弹幕),也可以通过sendRoomCustomMsg 发送自定义消息(用于点赞,送花等等)。

通过 IMLVBLiveRoomListenerCallback 里的 onRecvRoomTextMsgonRecvRoomCustomMsg 可以收取聊天室里别人发来的文本消息和自定义消息。

注意 腾讯云 IM 每秒钟最多可以收取 40 条以上的消息,如果您要把所有这些消息都按照接收频率刷新到屏幕 UI 上,那您的直播体验一定是非常卡顿的,这里一定要注意刷新频率控制。 有太多的客户在测试期间顺顺利利,APP一上线就卡的不行,都是这个原因导致的。

后台对接

MLVBLiveRoom 为什么需要 login?

MLVBLiveRoom 单靠一个终端的组件无法独自运行,它依赖一个后台服务为其实现房间管理和状态协调,这个后台服务我们称之为房间服务RoomService)。而要使用这个房间服务,MVLBLiveRoom 就需要先进行登录(login)。

选择【云直播控制台】>【直播SDK】>【应用管理】,单击【创建应用】开始创建一个新的应用。

说明: 这一步的目的是创建一个 TIM 即时通信 IM 应用,并将当前直播账号和即时通信 IM 应用绑定起来,即时通信 IM 应用主要提供聊天室和连麦互动的能力。

获得 login 所需参数

RoomService 需要终端调用 login(loginInfo, callback) 登录成功后才能使用,其中loginInfo中sdkappid、userid、userName、userAvatar四个信息都可以在客户端写死,但是 UserSig 必须由您的后台服务器签发,因为让 Client 计算 UserSig 就需要将签名私钥写在终端的代码里,这会有私钥被 hack 窃取的安全风险。

RoomService 所使用的 UserSig 的签发同 IM 云通讯服务是一样的,所以同一个 UserSig 既可以用来登录 IM,又可以用来登录 RoomService,您可以参考文档 派发UserSig 进行接入。

实现原理

1. 两种“通道”

腾讯云采用了两套通道实现直播+主播PK功能,其中直播采用标准的 (RTMP + FLV )协议,走标准CDN线路,没有并发观看人数的限制,且带宽成本很低,但延迟一般在2s以上。主播PK采用私有的 UDP 协议,走特殊专线线路,延迟一般在500ms左右,但最多支持16人同时视频通话,且单路费用高于普通直播。

通道

直播通道

连麦通道

通讯延迟

≥ 3s

≤ 500ms

底层协议

HTTP-FLV 协议

UDP 协议

价格/费用

按带宽计费

按时长计费

最高并发

无上限

≤ 16人

TXLivePusher

setVideoQuality 为 SD、HD、FHD

setVideoQuality 为 MAINPUBLISHER

TXLivePlayer

PLAYTYPELIVEFLV

PLAYTYPELIVERTMPACC

播放 URL

普通的 FLV 地址

带防盗链签名的 RTMP-ACC 地址

2. 内部原理

您完全不需要了解 MLVBLiveRoom 的内部原理便可轻松接入,但是如果您确实感兴趣,可以通过下图了解其内部运作机制。

FAQ

1、MLVBLiveRoom实现了哪些功能?

答:实现了:

①:主播建房直播,观众进房观看。

②、直播间内发字幕互动。

③、观众申请与主播连麦

④、两个房主PK

⑤、云直播后台混流,观众观看连麦、PK画面时,不需要切换播放地址。

⑥、录制后台录制整场直播,回看文件存储在点播后台,回调播放url。

暂未实现:

①、点赞、打赏。可以通过调用IM自定义消息实现。

②、主播邀请观众上麦。可以由主播向观众发送C2C消息邀请上麦。

③、实时统计房间人数、点赞数。可在业务服务器统计增删改查。

2、跑通MLVBLiveRoom,需要改动哪些地方,购买哪些服务?

答:只需要在直播控制台开通房间管理服务,然后用你们云通信的sdkappid登录mlvbliveroom,就可以使用自己的直播服务了。

需要购买服务

①、cdn流量包(获赠直播licence)

②、acc连麦服务

③、IM套餐包

3、直播通用场景下的心跳保护方案?

答:LiteAVSDK和云直播后台都有保护机制。

①、LiteAVSDK有断网重连保护,setConnectRetryCount、setConnectRetryInterval可以设置断网下的重连次数和重连时间间隔。默认是3次、每次3S,这期间sdk内部断开会自动重连推流,如果都没有重连上,会有断流事件。需要手动调用startPusher重新推流。

②、云直播后台如果在70S内收到的音视频数据都是空的,会主动断开连接,后台会回调断流事件。

③、综上的直播保护方案,如果主播手机app意外被杀进程,sdk不会重连,等70又太久了。所以mlvbliveroom采用主动发送http心跳包的方式:当主播推流成功后,会向roomService发送心跳包,每5S发一次,后台的心跳超时时长是30S,当终端心跳超时,roomService后台就会关闭直播间。

4、如何录制整场直播,如何只录制连麦、PK时的片段?

答:在云直播控制台打开全局录制就可以录制整场直播。录制的视频文件会存在腾讯云点播里面,所以需要开通点播服务。

点播后台有剪裁接口,可以对已录制的视频进行剪裁出对应的时间片段。

全局录制会把所有的流id都录制下来。

5、如何知道一场直播结束了?

答:主播退房时终端上报

LiteAVSDK有断流事件,云直播后台也有断流回调。但是sdk会有断网重连保护机制,导致云直播后台会在短时间里出现3次推流、断流的回调。

最好的做法是主播关闭房间时发请求上报服务器直播结束,后台可根据腾讯云的流状态回调做检测保护。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • MLVBLiveRoom
  • 终端对接
    • step1: 下载 SDK 开发包
      • step2: 登录(login)
        • step3: 获取房间列表(getRoomList)
          • step4: 主播开播(createRoom)
            • step5: 观看直播(enterRoom)
              • step6: 主播PK(sendPKRequest)
                • step7: 弹幕消息(sendMsg)
                • 后台对接
                  • 获得 login 所需参数
                  • 实现原理
                    • 1. 两种“通道”
                      • 2. 内部原理
                      • FAQ
                      相关产品与服务
                      云直播
                      云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档