有奖捉虫:办公协同&微信生态&物联网文档专题 HOT

功能介绍

TXLivePusher 和 TXLivePlayer 这两个基础组件可以比较容易的实现推流和拉流功能,但如果想要实现复杂的直播连麦功能,就需要借助我们提供给您的 MLVBLiveRoom 组件,该组件基于云直播和即时通信(IM)两个 PAAS 服务组合而成,支持:
主播创建新的直播间开播,观众进入直播间观看。
主播和观众进行视频连麦互动。
两个不同房间的主播 PK 互动。
每一个直播间都有一个不限制房间人数的聊天室,支持发送各种文本消息和自定义消息,自定义消息可用于实现弹幕、点赞和礼物。
说明
连麦互动功能支持中国内地(大陆)地区使用,暂不支持中国港澳台/境外地区。




功能体验

我们提供了 iOS、Android 以及微信小程序三个平台上的直播连麦体验,它们均是使用 MLVBLiveRoom 组件实现的直播加连麦功能:
iOS 进入 App Store 安装应用“小直播”,注册一个账号即可开始体验。
Android 下载 apk 安装包,安装“小直播”,注册一个账号即可开始体验。
微信小程序 打开微信,选择发现 > 小程序,搜索“腾讯视频云”,单击“移动直播”功能即可体验。




代码对接

Step1. 下载 LiteAVSDK 和 MLVBLiveRoom 组件

直播 SDK 提供的连麦能力需要依赖三个组件:
LiteAVSDK:闭源,负责直播推流,直播拉流,以及连麦视频通话功能。
TIMSDK:闭源,负责构建直播聊天室,以及聊天室中用户之间的消息传输功能。
MLVBLiveRoom:开源,基于 LiteAVSDK 和 TIMSDK 搭建一个支持连麦互动和消息互动的“直播间”。
我们已将上述组件均托管在 Github 上,clone 下来便可使用,关键组件的具体获取路径如下表所示:
所属平台
LiteAVSDK
TIMSDK
MLVBLiveRoom 组件
示例代码
iOS
Android
说明
除上述示例外,针对开发者的接入反馈的高频问题,腾讯云提供有更加简洁的 API-Example 工程,方便开发者可以快速的了解相关 API 的使用,欢迎使用。

Step2. 申请 License

下载 LiteAVSDK 后需要 License 授权才能使用,请阅读 License 申请 了解 License 的申请方法和使用方法。
iOS 建议在[AppDelegate application:didFinishLaunchingWithOptions:]中添加:
[TXLiveBase setLicenceURL:LicenceUrl key:Key];
Android 建议在 application 中添加:
TXLiveBase.getInstance().setLicence(context, LicenceUrl, Key);

Step3. 购买连麦套餐包

由于连麦功能会使用到高速专线来降低音视频传输延迟,这部分功能需要额外购买套餐包才能开通,否则直播 SDK 的各端 SDK 只能使用云直播的普通服务(推流和拉流),并不能开启连麦功能。
仅限老用户前往 云直播控制台 > 直播 SDK > 直播连麦,单击购买连麦包
注意
旧版移动直播连麦资源包已下线,仅限连麦老用户购买。
默认开通连麦服务需要先购买正式的连麦套餐包(非体验包),开通后可选择继续购买套餐包进行消费抵扣,也可以按照后付费日结计费进行结算。
若您购买的套餐包为体验包,用尽后次日会自动停止连麦服务,超出部分仍会按照后付费计费。
使用连麦的双方按连麦时长计费,普通观众观看会先通过直播混流,将连麦画面混合后通过 CDN 播放来降低播放成本。
观众观看混流后产生的直播费用,按照直播流量/带宽计费。
直播混流功能会产生标准转码费用,按照输出的分辨率和时长计费。

Step4. 在应用管理中添加一个新的应用

进入云直播控制台 > 直播SDK>应用管理,单击创建应用。待应用创建完成后,记录其 SDKAPPID 信息。
说明
该操作的目的是创建一个即时通信 IM 应用,并将当前直播账号和该即时通信 IM 应用绑定起来。即时通信 IM 应用能为小直播 App 提供聊天室和连麦互动的能力。

Step5. 登录房间服务

MLVBLiveRoom 单靠一个终端的组件无法独自运行,它依赖一个后台服务为其实现房间管理和状态协调,这个后台服务我们称之为房间服务(RoomService)。而要使用这个房间服务,MLVBLiveRoom 就需要先进行登录(login)。
MLVBLiveRoom 的 login 函数需要指定相关参数:
参数
类型
填写方案
sdkAppID
数字
当前应用的 AppID,在 Step4 中可以获取到。
userID
字符串
当前用户在您的账号系统中的 ID。
userName
字符串
用户名(昵称)。
userAvatar
字符串
用户头像的 URL 地址。
userSig
字符串
登录签名,计算方法请参见 计算 UserSig
说明
由于 login 是一个需要跟后台服务器通讯的过程,建议等待 login 函数的异步回调后再调用其他函数。
后台接口限制并发为每秒100次请求,若您有高并发请求请提前 联系我们 处理,避免影响服务调用。

Step6. 获取房间列表(非必需)

说明
如果您希望使用自己的房间列表,该步骤可跳过,但需要您在 Step7 中自行指定 roomID。为避免房间号重复,建议使用主播的 userID 作为 roomID。
不管是主播还是观众都需要有一个房间列表,调用 MLVBLiveRoom 的 getRoomList 接口可以获得一个简单的房间列表:
当主播通过createRoom创建一个新房间时,房间列表中会相应地增加一条新的房间信息。
当主播通过exitRoom退出房间时,房间列表中会移除该房间。
列表中每个房间都有对应的 roomInfo,由主播通过createRoom创建房间时传入,为提高扩展性,建议将 roomInfo 定义为 JSON 格式。

Step7. 主播开播

主播开播前,需要先调用 MLVBLiveRoom 中的 startLocalPreview 接口开启本地摄像头预览,该函数需要传入 view 对象用于显示摄像头的视频影像,这期间 MLVBLiveRoom 会申请摄像头使用权限。同时,主播也可以对着摄像头调整美颜和美白的具体效果。 然后调用 createRoom 接口,MLVBLiveRoom 会在后台的房间列表中新建一个直播间,同时主播端会进入直播状态。
说明
为避免房间号重复,建议使用主播的 userID 作为 roomID。如果您不手动设置 roomID,后台将会自动为您分配一个 roomID。 如果您想要管理房间列表,可以先由您的服务器确定 roomID,再通过 createRoom、enterRoom 和 exitRoom 接口使用 MLVBLiveRoom 的连麦能力。

Step8. 观看直播

观众通过 MLVBLiveRoom 中的 enterRoom 接口可以进入直播间观看视频直播,enterRoom 函数需要传入 view 对象用于显示直播流的视频影像。
进入房间后,通过调用 getAudienceList 接口可以获取观众列表。如果少于30名观众,列表会展示全部观众信息。如果多于30名观众,列表仅展示新进入房间的30名观众的信息。

Step9. 弹幕消息

MLVBLiveRoom 包装了 TIMSDK 的消息发送接口,您可以通过 sendRoomTextMsg 函数发送普通的文本消息(用于弹幕),也可以通过 sendRoomCustomMsg 发送自定义消息(用于点赞,送花等等)。
注意
腾讯云 IM 的直播聊天室,每秒钟最多可以收取40条的消息。如果您以高于40条/次的速度刷新 UI 上的弹幕界面,很容易导致 CPU 100%,请注意控制刷新频率,避免高频刷新。

Step10. 观众与主播连麦

步骤
角色
详情
第一步
观众
观众调用requestJoinAnchor()向主播发起连麦请求。
第二步
主播
主播会收到MLVBLiveRoomDelegate#onRequestJoinAnchor(AnchorInfo, String)通知,之后可以展示一个 UI 提示,询问主播要不要接受连麦。
第三步
主播
主播调用responseJoinAnchor()确定是否接受观众的连麦请求。
第四步
观众
观众会收到MLVBLiveRoomDelegate.RequestJoinAnchorCallback回调通知,得知请求是否被同意。
第五步
观众
观众如果请求被同意,则调用 startLocalPreview() 开启本地摄像头,如果 App 还没有取得摄像头和麦克风权限,会触发 UI 提示用户授权摄像头和麦克风的使用权限。
第六步
观众
观众调用joinAnchor()正式进入连麦状态。
第七步
主播
当观众进入连麦状态后,主播就会收到MLVBLiveRoomDelegate#onAnchorEnter(AnchorInfo)通知。
第八步
主播
主播调用startRemoteView()就可以看到连麦观众的视频画面。
第九步
观众
如果直播间里已经有其他观众正在跟主播进行连麦,那么新加入的这位连麦观众也会收到onAnchorJoin()通知,用于展示(startRemoteView())其他连麦者的视频画面。
第九步
主播或观众
主播或观众随时都可以通过quitJoinAnchor()接口退出连麦状态,同时,主播还可以通过kickoutJoinAnchor()接口移除连麦观众。
说明
MLVBLiveRoom 在设计上最多支持10人同时连麦,但出于兼容低端 Android 终端和实际体验效果的考虑,建议将同时连麦人数控制在6人以下。

Step11. 主播间跨房间 PK

主播间跨房 PK 常被用于活跃直播平台的氛围,提升打赏频率,对平台的主播人数有一定要求。目前常见的主播 PK 方式是将所有愿意 PK 的主播“圈”在一起,再后台进行随机配对,每次 PK 都有一定时间要求,例如5分钟,超过后即结束 PK 状态。 由于我们暂时未在 MLVBLiveRoom 的房间服务里加入配对逻辑,因此目前仅提供了基于客户端 API 接口的简单 PK 流程,您可以通过即时通信 IM 服务的消息下发 REST API 接口,由您的配对服务器,将配对开始、配对结束等指令发送给指定的主播,从而实现服务器控制的目的。如果采用此种控制方式,下述步骤中的第三步实现为默认接受即可。
步骤
角色
详情
第一步
主播 A
主播 A 调用requestRoomPK()向主播 B 发起连麦请求。
第二步
主播 B
主播 B 会收到MLVBLiveRoomDelegate#onRequestRoomPK(AnchorInfo)回调通知。
第三步
主播 B
主播 B 调用responseRoomPK()确定是否接受主播 A 的 PK 请求。如果采用服务器配对的 PK 方案,此处可以默认接受,不需要由主播 B 来决策。
第四步
主播 B
主播 B 在接受主播 A 的请求后,即可调用startRemoteView()来显示主播 A 的视频画面。
第五步
主播 A
主播 A 会收到MLVBLiveRoomDelegate.RequestRoomPKCallback回调通知,可以得知请求是否被同意,如果请求被同意,则可以调用startRemoteView()显示主播 B 的视频画面。
第六步
主播 A或 B
主播 A 或 B 均可以通过调用quitRoomPK()接口结束 PK 状态。

常见问题

直播 SDK 是不是使用 RTMP 协议进行连麦?

不是。腾讯云采用了两种传输通道才实现了直播 + 连麦功能:
直播采用标准的 HTTP-FLV 协议,使用标准 CDN 线路,没有并发观看人数的限制,且带宽成本很低,但延迟一般在3s以上。
连麦采用 UDP 协议,使用专用加速线路,延迟一般在500ms以内,但由于线路成本较高,因此采用连麦时长进行计费。



通道
直播通道
连麦通道
通讯延迟
≥ 3s
≤ 500ms
底层协议
HTTP-FLV 协议
UDP 协议
价格/费用
最高并发
无上限
≤ 10人
TXLivePusher
setVideoQuality 为 SD、HD、FHD
setVideoQuality 为 MAIN_PUBLISHER、SUB_PUBLISHER
TXLivePlayer
PLAY_TYPE_LIVE_FLV
PLAY_TYPE_LIVE_RTMP_ACC
播放URL
普通的 FLV 地址
带防盗链签名的 RTMP-ACC 地址