一、简介
在讲连麦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常量) |
补充如下差别,方便您进一步理解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返回的地址,是用自己计算的推拉流地址,分发给终端使用的。
解决:支持自己计算分发推拉流地址。播放失败问题,参考前文一步步调试,检查防盗链是否计算成功。