移动直播连麦PK快速调试
一、简介
在讲连麦PK之前,先讲一个概念:低延时流。
低延时流,也叫acc流,相比普通观众流(也叫cdn流)而言,它只有400ms的延时,是主播们连麦、PK时需要低延时场景时拉取的流,通话效果更好。
acc流与cdn流的主要差别,就是延时差距,
那么acc流,是如何做到这么低的延时呢,它与cdn流的差别在哪里呢,下面列举一下。
简称 |
acc流 |
cdn流 |
---|---|---|
延时 |
≤ 500ms |
≥ 3s |
链路节点 |
DC专线直达,如下图 |
DC分发OC节点,如下图 |
套餐包 |
||
播放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,有推流、拉流功能。
1、下图精简版demo,方便调试单功能,推荐使用。
2、在您下载的sdk包里面,demo源码就是精简版demo。
3、您可能是通过小直播demo接触连麦功能的,它里面的连麦功能,就是相互拉取低延时流,只是业务层多封装了一点。
2、demo推流
手机打开demo后,按照demo页面点击操作,都是简单操作。
这里需要补充两点:
1、推流可以推在线秒表画面,方便播放端对比延迟差
2、demo在New推流地址时,会同时生成拉流地址,复制在系统剪切板里面,你可以用聊天工具粘贴功能,发给拉流端的手机。
3、demo播放
把第二步获取到的低延时播放地址,放入直播播放器中,就可以播放了
请注意,demo默认是cdn播放模式,需要点击右下角的闪电符号,安卓是灰色代表低延时播放,ios是蓝色代表低延时播放。
如果未切换就直接播放低延时地址,会播放成cdn流,延时2~5S。
三、如何计算低延时防盗链
1、demo示例
在讲解如何计算自己的低延时地址之前,先看一下demo生成的一组推拉流示例。如下所示。请留意url拼接规则,下文会参考用到。
rtmp推流地址:rtmp://3891.livepush.myqcloud.com/live/3891_user_bfd89bee_692e?bizid=3891&txSecret=eecdbf7972132760a8e3a8faab7be155&txTime=5F229629
rtmp播放地址:rtmp://3891.liveplay.myqcloud.com/live/3891_user_bfd89bee_692e
flv播放地址:http://3891.liveplay.myqcloud.com/live/3891_user_bfd89bee_692e.flv
hls播放地址:http://3891.liveplay.myqcloud.com/live/3891_user_bfd89bee_692e.m3u8
低延时播放地址:rtmp://3891.liveplay.myqcloud.com/live/3891_user_bfd89bee_692e?bizid=3891&txSecret=eecdbf7972132760a8e3a8faab7be155&txTime=5F229629
2、计算总结
①、计算很简单
记住一条:用pushKey计算防盗链!
用pushKey计算防盗链!
用pushKey计算防盗链!
计算低延时防盗链,其实参考官方文档即可,如下使用md5加密
②、计算也很难
会遇到的坑点有:
a、不知道pushKey用哪个
b、不理解为什么要用pushKey计算,我明明有配置播放的playKey
c、不知道什么是bizid
d、调用startPlay接口时,用cdn播放模式,去播放低延时播放地址
e、我算对低延时防盗链了,也找到bizid了,拼接出正确格式的url,也是用的低延时播放模式去播放,
但是仍然播放失败,报错-2301。
解决办法:
a、不知道pushKey用哪个
解决思路:上直播控制台,在推流域名详情里面有"推流防盗链key"。请注意您在配置key时,要按如下格式:32位字母+数字组合。
您如果有多个推流域名,都配置了不同的pushKey,那么只有一个pushKey可用,建议您都计算播放看看。
对于这种情况,目前云直播控制台正在优化中,后续考虑会展示出:加密低延时流的pushKey。请耐心等待。
b、不理解为什么要用pushKey计算,我明明有配置播放的playKey
解决思路:低延时流校验功能,最初设计是用的pushKey,沿用至今。原因是:并不是所有直播用户,都有加密播放需求,都配置有播放key。
如前文节点对比,可以看到cdn播放与低延时播放,是不同链路的,您设置的播放防盗链key,只是作用于cdn播放校验。
c、不知道什么是bizid
解决思路:上直播控制台,在域名管理里面,找到腾讯默认的数字域名,这个数字就是bizid。如上demo用的云直播账户,默认的数字域名是3891.livepush.myqcloud.com、3891.liveplay.myqcloud.com,其中这个3891就是bizid。
d、调用statPlay接口时,用cdn播放模式,去播放低延时播放地址
解决思路:这种一般踩坑的会是终端开发工程师,sdk直播播放的接口是TXLivePlayer.startPlay(url, playType);其中这个playType是需要换成PLAY_TYPE_LIVE_RTMP_ACC常量的。
e、我算对低延时防盗链了,也找到bizid了,拼接出正确格式的url,也是用的低延时播放模式去播放,
但是仍然播放失败,报错-2301。
解决思路:1、看一下是否有买低延时套餐包。如下图所示,在云直播控制台--直播SDK--移动直播连麦页面,查看套餐包。
2、确实有问题:目前极少数客户会遇到,需要联系腾讯支持人员协助修复。简单说一下原因:有部分客户账户,是在18年之前申请创建的,当时云直播是频道模式,后来统一升级成直播码模式,导致后台服务校验上出了问题,需要单独配置一下全局pushkey。
另外有部分客户,是曾经要求云直播控制台删除pushKey,后来就算他们又配置了pushKey,但是仍然有可能校验失败,需要单独配置一下全局pushkey。
3、可用的工具
有三个方式,可以生成防盗链、拼接出url
①、控制台地址生成器
如下图示:控制台--云直播--辅助工具--地址生成器
需要说明一下,控制台地址生成器,目前只能生成推流url、和三种cdn播放url,
但是看到这里,您应该也能想到,其实推流防盗链就能用于低延时播放,
如上demo示例中,低延时地址与推流地址后面的防盗链一样,
所以您在计算推流防盗链之后,直接按如下格式拼接出低延时防盗链,一次计算到位
播放域名+推流防盗链+bizid
2、代码参考
如下图所示,在控制台--云直播--域名管理--点进推流域名页面,也有个地址生成器,最下面有代码参考,你复制即可用。目前仅提供PHP、JAVA版本的示例代码。
3、三方md5加密工具
如下,公网查询md5在线工具,可取32位小写的加密字符串,作为防盗链
四、连麦组件中的问题
1、腾讯云直播demo里面,用的是MLVBLiveRoom组件,来做连麦功能的。
连麦功能其实就是主播们相互拉群低延时流,然后混流给观众看。
在连麦时遇到黑屏问题,其实就是低延时拉流失败了。
上层表现是:观众观看正常,一上麦就彼此黑屏;
代码层表现是:播放事件回调onPlayEvent报错错误码-2301;
结合前文内容,可以把低延时流单独抽取出来播放,看看onPlayEvent,排查套餐包、防盗链的问题
代码如下所示:
2、客户在使用MLVBLiveRoom组件连麦时,也有可能遇到如下连麦问题
①、是get_anchors这个接口获取对方的低延时地址的,但是低延时拉流地址后面没有防盗链。
解决:调用get_anchors接口请求,会去您的云直播后台,找到拉流域名、pushKey,然后计算防盗链,拼接出低延时地址,返回给终端。但是您如果控制台未配置pushKey,就会出现这个问题。
需要您先配置pushKey,参考前文坑点a介绍。
另外,前文坑点e也会导致这个问题。
②、没有用get_anchors返回的地址,是用自己计算的推拉流地址,分发给终端使用的。
解决:支持自己计算分发推拉流地址。播放失败问题,参考前文一步步调试,检查防盗链是否计算成功。
- Windows下bat批处理脚本使用telnet批量检测远程端口小记
- WordPress集成PHP缩略图,并开启Nginx缓存的方法
- 分享几个WordPress本地缓存gravatar评论头像的方案
- Linux下的mongodb服务脚本,以备不时之需
- WordPress发布文章主动推送到百度,加快收录保护原创
- Nginx开启fastcgi_cache缓存加速,支持html伪静态页面
- Go-指针、传值与传引用、垃圾回收
- SEO分享:彻底禁止搜索引擎抓取/收录动态页面或指定路径的方法
- Go-defer,panic,recover
- SEO技巧:Shell脚本自动提交网站404死链到搜索引擎
- Nginx发布1.9.0版本,新增支持TCP代理和负载均衡的stream模块
- WordPress4.2升级修复补丁:解决大量404请求以及评论表情路径及尺寸异常问题
- Linux系统编译安装Redis以及主从复制配置小记
- Go-Maps
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 设计原则之开闭原则
- SpringBoot执行跨域处理
- SpringBoot对全局异常的处理封装
- 自定义springboot-starter揭秘自动配置骚操作
- 【大厂面试题】Redis中是如何实现分布式锁的?
- 最近公司招人,研发组商量了下,暂时定下这么多java面试题!
- 市面上数据库种类那么多,如何选择?
- 玩转正则!推荐一个速查、调试、验证、可视化工具
- 当一个http请求来临时,SpringMVC究竟偷偷帮你做了什么?
- Js实现文本复制
- 当一个http请求来临时,SpringMVC究竟偷偷帮你做了什么?处理器映射器与处理器篇
- anetTcpGenericConnect 详解
- 详解 MySQL 基准测试和sysbench工具
- 第六天:网络处理(anet部分)-- redis源码慢慢学,慢慢看【redis6.0.6】
- python爬王者荣耀壁纸