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

MLVBLiveRoom 方案 - 客户端部分

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

本文用于介绍移动直播 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 删除。

评论
作者已关闭评论
2 条评论
热度
最新
请问使用MLVBLiveRoom这套方案怎么获取生成的推流地址和StreamName
请问使用MLVBLiveRoom这套方案怎么获取生成的推流地址和StreamName
11点赞举报
参考roomservice这篇文档,get_anchor_url 接口可以获取推流地址,推流地址里面有流id。
参考roomservice这篇文档,get_anchor_url 接口可以获取推流地址,推流地址里面有流id。
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
选择最佳云服务器的9个步骤
将业务迁移到云服务器,可以降低成本、简化工作流程,并消除对IT硬件的需求。对于小型企业来说,最大的好处就是能够专注于核心业务活动,让云服务器能够解决维护、备份、可用性和数据安全等令人担忧的IT问题。
静一
2018/03/15
1.8K0
选择最佳云服务器的9个步骤
如何挑选一台云服务器
以前,我作为一个个人开发者,倒腾过一些入门级别的云服务器,玩玩技术,不太在意云服务器的性能。
五分钟学算法
2023/01/10
20.6K0
如何挑选一台云服务器
虚拟主机和云服务器有什么区别,我们应该如何选择?[通俗易懂]
虚拟主机已经有了一段时间的历史,近几年随着其技术的不断成熟,以及其低廉的价格,成为众多站长的首选对象。但近两年云计算的出现,衍生出云服务器这个产物。这时,很多站长便对虚拟主机与云服务器应该如何选择感到困扰,不知是选择技术比较成熟的虚拟主机,还是选择最新的云服务器。
全栈程序员站长
2022/09/12
6K0
云计算数据中心与传统IDC的区别是什么?
云计算爱好者
2018/01/03
9.7K0
什么是云计算?什么是云服务器?有什么用?
很多人都听过云计算和云服务器这几个概念,那么到底什么是云计算、什么是云服务器呢?云服务器又有什么用呢?提供腾讯云特惠1折秒杀活动的“尊托云数-zuntop.com”就带大家一起来了解一下。
用户5175848
2019/07/18
21.6K0
什么是云计算?什么是云服务器?有什么用?
云服务器的“弹性”体现在哪些方面?
弹性云服务器具有良好的可拓展性,支持用户随时在线对服务器的内存、系统盘和带宽进行灵活调整;凭借集群部署的成本优势,极大程度降低了IT部署与业务运维成本;由于服务分散在多台主机、甚至多个机房,所以不容易彻底宕机,抗灾容错能力强,能够确保长时间在线,让网站运行更加安全、可靠。
用户6049522
2019/09/09
2.7K0
云服务器和虚拟主机的区别
1、技术原理:云服务器是基于庞大的服务器资源池,是在一组集群主机上虚拟出多个类似独立主机的部分,集群中每个主机上都有云服务器的一个镜像;虚拟主机是服务器划分出的一部分,因此也叫做虚拟空间,在服务器当中划分出一定的磁盘空间放置web程序组件,提供数据的存放和传输功能。
全栈程序员站长
2022/09/12
18.7K0
云服务器已经初步替代了传统服务器,企业上云是趋势
大多数的企业、机构逐步转向云服务器,IT基础上不再采用传统服务器。只有一些传统企业没有上云,他们也在加快信息化进程,把业务送上云端。有研究机构调查显示,只有5%组织用户单纯依赖于传统服务器,95%已经转移到云计算服务。云服务器的崛起,使传统服务器大势已去。
尊托云数
2018/11/29
5.5K0
云服务器已经初步替代了传统服务器,企业上云是趋势
虚拟主机和云服务器怎么选?
虚拟主机已经有了一段时间的历史,近几年随着其技术的不断成熟,以及其低廉的价格,成为众多站长的首选对象。但近两年云计算的出现,衍生出云服务器这个产物。这时,很多站长便对虚拟主机与云服务器应该如何选择感到困扰,不知是选择技术比较成熟的虚拟主机,还是选择最新的云服务器。
用户6429551
2019/10/10
27.4K0
虚拟主机和云服务器怎么选?
买云服务器需要单独购买硬盘吗 云服务器与传统差异
在操作云服务器的时候,用户们可能会存在一些关于硬盘的疑问,比如说如果买云服务器需要单独购买硬盘吗之类的问题,在了解这个问题之前,要先明白云服务器是什么,简单来说,云服务器就是一种虚拟的物理服务器,又称之为云计算或者是云主机,在这个云服务器之中,它是结合了三个优势,也就是计算、网络和存储。
用户8715145
2021/12/22
15.4K0
腾讯云服务器与普通服务器区别在哪?如何选择?
腾讯云服务器与普通的IDC机房或服务器厂商相比,腾讯云服务器CVM具有高可用性、安全性和弹性优势。小编从以上几个方面详细说下这二者的区别及如何选择。
用户6583026
2019/10/29
8.1K0
腾讯云服务器与普通服务器区别在哪?如何选择?
云服务器和虚拟主机有什么区别,该选择哪种类型?
昨天转载了昝辉老师的SEO优化文章,文章曾提到关于主机是否会对SEO有影响,结果影响不大,除非因作弊导致的连带责任,但是在选择主机的时候可能就犯难了。我记得在前些年,虚拟机是最火的因为便宜,对于新手站长来说能免费就不花钱,景安很长时间有免费的主机,我之前也一直再用,还不错,只是去年景安的免费虚拟机全部停运了,挺可惜。今年开始盛行云服务器,价格比虚拟机稍稍贵一些,但是新用户基本都是1折起,这么算下来跟虚拟机售价一样了,至于怎么选择,我们一起探讨一下。
李洋博客
2023/03/03
6.3K0
云服务器和虚拟主机有什么区别,该选择哪种类型?
云服务器的“弹性”指的是什么?
我们都知道云计算拥有弹性扩展的特性,所谓的弹性,即云端的可用资源能够随着用户的需求而灵活变化、自由升降,在业务高峰或低谷期,均能匹配适量的资源,既不捉襟见肘、也不过分浪费。弹性云服务器,简单地说,是指运行在云计算环境中的虚拟服务器,支持用户自由调度计算资源,不受传统硬件设备的限制。
用户2416682
2019/07/23
12.6K0
云服务器的“弹性”指的是什么?
服务器租用、服务器托管、云服务器哪个好?
企鹅号小编
2018/01/08
112.7K2
服务器租用、服务器托管、云服务器哪个好?
云服务器与普通服务器有哪些区别?
云服务器无需提前购买硬件,即可迅速创建或释放任意多台云服务器,一切计算均在云端实现,降低开发运维的难度和整体IT成本。
用户10425169
2023/04/17
9.3K0
云服务器注册教程
本文介绍了云服务器的优势,以及如何快速注册账户,并演示了如何创建的虚拟专用服务器(VPS)。
无代码Dev
2024/03/21
2560
云服务器注册教程
网络工程师必知——虚拟主机和云服务器有什么区别
虚拟主机就是利用网络空间技术,把一台服务器分成许多的“虚拟”的主机,每一台网络空间都具有独立的域名和IP地址,具有完整的Internet服务器功能。网络空间之间完全独立,在外界看来,每一台网络空间和一台独立的主机完全一样。效果一样,但费用却大不一样了。由于多台网络空间共享一台真实主机的资源,每个网络空间用户承受的硬件费用、网络维护费用、通信线路的费用均大幅度降低,Internet真正成为人人用得起的网络。
网络技术联盟站
2021/02/22
6K0
如何架设云服务器?架设云服务器的方式有哪些?
随着云服务器所表现出的优异性能,目前有很多企业都有将独立服务器更换为云服务器,来为企业提供基础的网络服务的需求,但是很多企业对于搭建云服务器并不是十分专业。那么下面就来了解一下如何架设云服务器?架设云服务器的方式有哪些呢?
用户8715145
2021/08/27
17.1K0
推荐阅读
相关推荐
选择最佳云服务器的9个步骤
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档