移动直播连麦PK快速调试

2020-12-14 16:52:45 浏览数 (1)

一、简介

在讲连麦PK之前,先讲一个概念:低延时流。

低延时流,也叫acc流,相比普通观众流(也叫cdn流)而言,它只有400ms的延时,是主播们连麦、PK时需要低延时场景时拉取的流,通话效果更好。

代码语言:javascript复制
acc流与cdn流的主要差别,就是延时差距,
那么acc流,是如何做到这么低的延时呢,它与cdn流的差别在哪里呢,下面列举一下。

简称

acc流

cdn流

延时

≤ 500ms

≥ 3s

链路节点

DC专线直达,如下图

DC分发OC节点,如下图

套餐包

acc套餐包,按时长计费

cdn流量包,按流量计费

播放url

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

普通的 FLV 地址

播放type

PLAY_TYPE_LIVE_RTMP_ACC(详见sdk常量)

PLAY_TYPE_LIVE_FLV(祥见sdk常量)

代码语言:javascript复制
补充如下差别,方便您进一步理解acc流

简称

acc流

cdn流

底层协议

QUIC协议,基于UDP

HTTP-FLV 协议,基于TCP

推流设备

只有sdk推流才能走QUIC链路

能推rtmp标准协议的设备,都可以推流到腾讯云

播放设备

只有sdk播放器才能播放acc流

能播放标准flv、rtmp、hls的直播播放器,都能播放腾讯云cdn流

最高并发

后台支持16路并发,终端推荐6路以内

无上限

二、快速体验

1、体验demo

官网提供了体验demo,有推流、拉流功能。

代码语言:javascript复制
1、下图精简版demo,方便调试单功能,推荐使用。
2、在您下载的sdk包里面,demo源码就是精简版demo。
3、您可能是通过小直播demo接触连麦功能的,它里面的连麦功能,就是相互拉取低延时流,只是业务层多封装了一点。

2、demo推流

手机打开demo后,按照demo页面点击操作,都是简单操作。

这里需要补充两点:

代码语言:javascript复制
1、推流可以推在线秒表画面,方便播放端对比延迟差
2、demo在New推流地址时,会同时生成拉流地址,复制在系统剪切板里面,你可以用聊天工具粘贴功能,发给拉流端的手机。

3、demo播放

把第二步获取到的低延时播放地址,放入直播播放器中,就可以播放了

代码语言:javascript复制
请注意,demo默认是cdn播放模式,需要点击右下角的闪电符号,安卓是灰色代表低延时播放,ios是蓝色代表低延时播放。
如果未切换就直接播放低延时地址,会播放成cdn流,延时2~5S。

三、如何计算低延时防盗链

1、demo示例

在讲解如何计算自己的低延时地址之前,先看一下demo生成的一组推拉流示例。如下所示。请留意url拼接规则,下文会参考用到。

代码语言:javascript复制
rtmp推流地址:rtmp://3891.livepush.myzijiebao.com/live/3891_user_bfd89bee_692e?bizid=3891&txSecret=eecdbf7972132760a8e3a8faab7be155&txTime=5F229629

rtmp播放地址:rtmp://3891.liveplay.myzijiebao.com/live/3891_user_bfd89bee_692e
flv播放地址:http://3891.liveplay.myzijiebao.com/live/3891_user_bfd89bee_692e.flv
hls播放地址:http://3891.liveplay.myzijiebao.com/live/3891_user_bfd89bee_692e.m3u8

低延时播放地址:rtmp://3891.liveplay.myzijiebao.com/live/3891_user_bfd89bee_692e?bizid=3891&txSecret=eecdbf7972132760a8e3a8faab7be155&txTime=5F229629

2、计算总结

①、计算很简单

记住一条:用pushKey计算防盗链!

用pushKey计算防盗链!

用pushKey计算防盗链!

计算低延时防盗链,其实参考官方文档即可,如下使用md5加密

②、计算也很难

会遇到的坑点有:

代码语言:javascript复制
a、不知道pushKey用哪个
b、不理解为什么要用pushKey计算,我明明有配置播放的playKey
c、不知道什么是bizid
d、调用startPlay接口时,用cdn播放模式,去播放低延时播放地址
e、我算对低延时防盗链了,也找到bizid了,拼接出正确格式的url,也是用的低延时播放模式去播放,
但是仍然播放失败,报错-2301。

解决办法:

代码语言:javascript复制
a、不知道pushKey用哪个

解决思路:上直播控制台,在推流域名详情里面有"推流防盗链key"。请注意您在配置key时,要按如下格式:32位字母 数字组合

您如果有多个推流域名,都配置了不同的pushKey,那么只有一个pushKey可用,建议您都计算播放看看。

对于这种情况,目前云直播控制台正在优化中,后续考虑会展示出:加密低延时流的pushKey。请耐心等待。

代码语言:javascript复制
b、不理解为什么要用pushKey计算,我明明有配置播放的playKey

解决思路:低延时流校验功能,最初设计是用的pushKey,沿用至今。原因是:并不是所有直播用户,都有加密播放需求,都配置有播放key。

如前文节点对比,可以看到cdn播放与低延时播放,是不同链路的,您设置的播放防盗链key,只是作用于cdn播放校验。

代码语言:javascript复制
c、不知道什么是bizid

解决思路:上直播控制台,在域名管理里面,找到腾讯默认的数字域名,这个数字就是bizid。如上demo用的云直播账户,默认的数字域名是3891.livepush.myzijiebao.com、3891.liveplay.myzijiebao.com,其中这个3891就是bizid。

代码语言:javascript复制
d、调用statPlay接口时,用cdn播放模式,去播放低延时播放地址

解决思路:这种一般踩坑的会是终端开发工程师,sdk直播播放的接口是TXLivePlayer.startPlay(url, playType);其中这个playType是需要换成PLAY_TYPE_LIVE_RTMP_ACC常量的。

代码语言:javascript复制
e、我算对低延时防盗链了,也找到bizid了,拼接出正确格式的url,也是用的低延时播放模式去播放,
但是仍然播放失败,报错-2301。

解决思路:1、看一下是否有买低延时套餐包。如下图所示,在云直播控制台--直播SDK--移动直播连麦页面,查看套餐包。

2、确实有问题:目前极少数客户会遇到,需要联系腾讯支持人员协助修复。简单说一下原因:有部分客户账户,是在18年之前申请创建的,当时云直播是频道模式,后来统一升级成直播码模式,导致后台服务校验上出了问题,需要单独配置一下全局pushkey。

另外有部分客户,是曾经要求云直播控制台删除pushKey,后来就算他们又配置了pushKey,但是仍然有可能校验失败,需要单独配置一下全局pushkey。

3、可用的工具

有三个方式,可以生成防盗链、拼接出url

①、控制台地址生成器

如下图示:控制台--云直播--辅助工具--地址生成器

代码语言:javascript复制
需要说明一下,控制台地址生成器,目前只能生成推流url、和三种cdn播放url,
但是看到这里,您应该也能想到,其实推流防盗链就能用于低延时播放,
如上demo示例中,低延时地址与推流地址后面的防盗链一样,
所以您在计算推流防盗链之后,直接按如下格式拼接出低延时防盗链,一次计算到位
播放域名 推流防盗链 bizid

2、代码参考

如下图所示,在控制台--云直播--域名管理--点进推流域名页面,也有个地址生成器,最下面有代码参考,你复制即可用。目前仅提供PHP、JAVA版本的示例代码。

3、三方md5加密工具

代码语言:javascript复制
如下,公网查询md5在线工具,可取32位小写的加密字符串,作为防盗链

四、连麦组件中的问题

1、腾讯云直播demo里面,用的是MLVBLiveRoom组件,来做连麦功能的。

连麦功能其实就是主播们相互拉群低延时流,然后混流给观众看。

代码语言:javascript复制
在连麦时遇到黑屏问题,其实就是低延时拉流失败了。
上层表现是:观众观看正常,一上麦就彼此黑屏;
代码层表现是:播放事件回调onPlayEvent报错错误码-2301;

结合前文内容,可以把低延时流单独抽取出来播放,看看onPlayEvent,排查套餐包、防盗链的问题

代码如下所示:

2、客户在使用MLVBLiveRoom组件连麦时,也有可能遇到如下连麦问题

①、是get_anchors这个接口获取对方的低延时地址的,但是低延时拉流地址后面没有防盗链。

解决:调用get_anchors接口请求,会去您的云直播后台,找到拉流域名、pushKey,然后计算防盗链,拼接出低延时地址,返回给终端。但是您如果控制台未配置pushKey,就会出现这个问题。

需要您先配置pushKey,参考前文坑点a介绍。

另外,前文坑点e也会导致这个问题。

②、没有用get_anchors返回的地址,是用自己计算的推拉流地址,分发给终端使用的。

解决:支持自己计算分发推拉流地址。播放失败问题,参考前文一步步调试,检查防盗链是否计算成功。

0 人点赞