本文用于介绍移动直播 MLVBLiveRoom 方案的客户端部分,MLVBLiveRoom 方案包含了两部分内容:客户端 MLVBLiveRoom 组件 + 房间管理服务 RoomService。RoomService 说明见 https://cloud.tencent.com/developer/article/1488765
**特别注意:
功能介绍
主播 PK 是在秀场直播场景中经常使用的一种吸引热度的方式,两个分处不同房间的主播可以相互分屏连麦(视频通话),主播与主播之间的延迟可以达到 500ms 以内,而观众在不需要切换流地址的情况下,就可以在原来的 CDN 直播流中看到主播 PK 的效果。
主播 PK 是 MLVBLiveRoom 组件的一项基本功能(MLVBLiveRoom 还支持观众同主播连麦),它分成 Client 和 Server 两个部分:
MLVBLiveRoom 单靠一个终端的组件无法独自运行,它依赖一个后台服务为其实现房间管理和状态协调,这个后台服务我们称之为房间服务(RoomService)。而要使用这个房间服务,MLVBLiveRoom 就需要先进行登录(login)。
不管是主播还是观众,都需要有一个房间列表,调用 MVLBLiveRoom 的 getRoomList 接口可以获取到该列表。列表中每一个房间都有其对应的 roomInfo,是在 createRoom 时传入的,推荐您将 roomInfo 定义为 json 格式,这样可以有很强的扩展性。
如果您希望使用自己的房间列表,这一步可以省略,但是需要您在 step 4 中自行指定 roomID,且全局不能有重复。
主播要开播,需要先调用 MVLBLiveRoom 的 startLocalPreview 接口开启本地摄像头预览,该函数需要传入一个 view 对象,该对象用于显示摄像头的视频影像。这期间 MLVBLiveRoom 会申请摄像头使用权限,同时,主播也可以对着摄像头调整一下美颜和美白的具体效果。
之后,通过调用 createRoom 接口,MLVBLiveRoom 会在后台的房间列表中新建一个直播间,同时主播端会进入推流模式。
参数roomID 如果您在调用 createRoom 时不填写 roomId,后台会为您分配一个 roomID, 并通过 createRoom 的回调接口返回给您。如果您希望自己管理房间列表,roomID 可以由您的服务器分配,那么只需要在调用 createRoom 时填写您后台分配的 roomId 即可。
观众通过 MLVBLiveRoom 的 enterRoom 接口可以进入直播间观看视频直播,enterRoom 函数需要传入一个 view 对象,用于显示直播流的视频影像。
另外,进入房间后,调用 MLVBLiveRoom 的 getAudienceList 接口可以获取观众列表,这里的列表不是全量数据,如果少于30 个人就全部返回,如果多于 30 个人,就只返回新进入的 30 个人。(出于性能方面的考虑, 而且 UI 界面上最多能也就能放下 10 个头像。)
主播PK是两个房间的主播在直播的同时,互相拉取对方的视频流,建立实时视频通话互动,每个房间的观众都可以看到两个主播互动的过程,流程图如下:
调用 getRoomList 获取当前正在直播的主播列表, 返回在线主播的详细信息,包含昵称、头像、用户ID等;然后显示一个 UI 列表,以便选择一个主播进行PK。
函数 PlayPK 除了完成拉流播放的功能;同时会触发后台混流,即把对方主播的视频流叠加到自己的流上。普通观众不需要重新拉流,可以自动观看到两个主播PK的视频画面。
主播PK过程中,任何一方都可以主动结束PK,假设主播一主动结束PK
函数 stopPlayPKStream 除了结束播放视频流,同时会取消后台混流。普通观众不需要重新拉流,可以自动切换到直播模式。
MVLBLiveRoom 自带了消息发送接口,可以通过 sendRoomTextMsg 函数发送普通的文本消息(用来弹幕),也可以通过sendRoomCustomMsg 发送自定义消息(用于点赞,送花等等)。
通过 IMLVBLiveRoomListenerCallback 里的 onRecvRoomTextMsg 和 onRecvRoomCustomMsg 可以收取聊天室里别人发来的文本消息和自定义消息。
注意 腾讯云 IM 每秒钟最多可以收取 40 条以上的消息,如果您要把所有这些消息都按照接收频率刷新到屏幕 UI 上,那您的直播体验一定是非常卡顿的,这里一定要注意刷新频率控制。 有太多的客户在测试期间顺顺利利,APP一上线就卡的不行,都是这个原因导致的。
MLVBLiveRoom 为什么需要 login?
MLVBLiveRoom 单靠一个终端的组件无法独自运行,它依赖一个后台服务为其实现房间管理和状态协调,这个后台服务我们称之为房间服务(RoomService)。而要使用这个房间服务,MVLBLiveRoom 就需要先进行登录(login)。
选择【云直播控制台】>【直播SDK】>【应用管理】,单击【创建应用】开始创建一个新的应用。
说明: 这一步的目的是创建一个 TIM 即时通信 IM 应用,并将当前直播账号和即时通信 IM 应用绑定起来,即时通信 IM 应用主要提供聊天室和连麦互动的能力。
RoomService 需要终端调用 login(loginInfo, callback)
登录成功后才能使用,其中loginInfo中sdkappid、userid、userName、userAvatar四个信息都可以在客户端写死,但是 UserSig 必须由您的后台服务器签发,因为让 Client 计算 UserSig 就需要将签名私钥写在终端的代码里,这会有私钥被 hack 窃取的安全风险。
RoomService 所使用的 UserSig 的签发同 IM 云通讯服务是一样的,所以同一个 UserSig 既可以用来登录 IM,又可以用来登录 RoomService,您可以参考文档 派发UserSig 进行接入。
腾讯云采用了两套通道实现直播+主播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 地址 |
您完全不需要了解 MLVBLiveRoom 的内部原理便可轻松接入,但是如果您确实感兴趣,可以通过下图了解其内部运作机制。
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 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有