【video】视频直播推流拉流慢、卡顿解决方案
来源:互联网 发布:创维液晶电视连接网络 编辑:程序博客网 时间:2024/04/29 16:11
一、摘要
视频直播类App当前已经普遍采用CDN来实现访问加速,但还是经常遇到推拉流慢、卡顿的问题,一般是由于调度不精准、域名劫持、终端手机接入网络动态切换等因素导致。结合使用CDN和HTTPDNS可以比较完美解决此类问题。
二、视频直播经典加速架构
当前视频直播类App经典加速架构如下图所示:
经典加速架构中,推流阶段使用CDN就近接入实现推流加速,用户播放拉流阶段通用使用CDN来做加速。由于CDN节点分布的广泛性与边缘性确保了客户能够就近接入,与直连源站相比,通过CDN加速直播推拉流取得了非常显著的加速效果。
三、经典架构中存在的问题
尽管已经采用了CDN加速,直播类App仍然经常出现访问慢、卡顿等问题,导致大量用户投诉。主要原因是当前架构中存在以下几方面问题:
3.1 运营商Local DNS配置不合理导致无法就近接入
关于这个问题的描述参考文章App如何实现就近接入?如何改善调度不准问题?,那些年移动App域名解析踩过的坑,移动互联网时代,如何优化你的网络 —— 域名解析篇。
3.2 域名劫持
关于这个问题可以参考文章域名劫持与防范,那些年移动App域名解析踩过的坑,移动互联网时代,如何优化你的网络 —— 域名解析篇。
3.3 用户手机网络制式切换
假设用户A从移动4G切换到家中联通的wifi网络,仍然按照原先的CDN节点进行加速会出现跨ISP调度,访问质量差的悲剧事件。
四、解决办法
HTTPDNS + CDN
上述3个问题都可以通过接入HTTPDNS解决。
解决方案1: 终端源站配合的解决方案
图2 终端源站配合使用HTTPDNS的解决方案下面通过推流阶段2个场景说明改进方案如何确保调度到最佳CDN节点的:
case 1: Local DNS配置问题导致没有调度到最优节点的场景
- Step 1: 用户手机上Local DNS配置不准确,域名解析阶段为域名dn返回的是CDN节点B的IP_b,而非最优的CDN节点IP IP_a。
- Step 2: 推流的终端应用需要向CDN节点发起鉴权请求,CDN节点在收到鉴权请求后,需要提取终端的公网IP_c,然后除了转发鉴权相关信息到视频源站之外,必须带上推流终端的公网IP_c 给源站。
- Step 3: 源站收到鉴权信息和终端IP后,首先做鉴权工作,然后源站利用推流的域名dn和推流终端公网IP IP_c向HTTPDNS服务器发起请求,获取最优的CDN节点IP_a,并将IP_a回传给推流终端,告知推流终端IP_a是最佳接入节点
- Step 4: 终端推流时可以直接向CDN IP_a推流,或者等到发现出现卡顿、慢时切换到IP_a
case 2: 用户网络制式切换(如移动4G切联通wifi)的场景
Step 1: 假设之前移动4G网络下最佳CDN节点是IP_b,用户网络制式切换成联通wifi后,最佳节点换成了IP_a。网络切换后,终端第一步仍然向CDN节点IP_b推流,此时会鉴权失败。
Step 2: 重复场景1的Step 2到Step 4,推流终端最终可以找到最佳CDN节点IP_a并通过IP_a推流。
解决方案2: 轻服务端解决方案
图3 完全基于终端调用HTTPDNS的方案本方案非常清晰,当推流或者拉流出现服务质量问题(如慢、卡顿)时,立即使用HTTPDNS获取最新的最佳服务质量节点,并利用最新的节点进行推拉流。
另外,首次选用接入CDN节点时也建议使用HTTPDNS来解析决定。
其他要点
请注意,用户网络制式切换时,本架构能够自动找出最优节点并顺利切换到最优节点。
其他因调度问题导致拉流、推流阶段慢、卡顿的问题都可以通过上述方案解决。
五、总结
视频直播类App经常遇到播放质量不佳、慢、卡顿等问题,会引起客户投诉和流失,使用HTTPDNS可以基本解决这类问题。
六、附录
阿里云HTTPDNS六大优势:
1、支持全网域名解析
- 接口简单统一
- 无需对接多家HTTPDNS
2、以IP方式对外提供服务,防止自身被劫持
3、AnyCast IP支持异地容灾
各地域使用同一个IP地址提供服务
4、接入延迟低且稳定
以北京为例,测试一下阿里云HTTPDNS的访问延迟:
图4 阿里云HTTPDNS服务器RTT延迟
5、支持https接口
6、提供Android SDK/iOS SDK,方便接入
- 【video】视频直播推流拉流慢、卡顿解决方案
- 视频手术刀 video bistoury -- 直播
- 视频直播 解决方案
- 手机视频直播解决方案
- 视频直播解决方案
- RTSP/Onvif摄像机web直播遇到的时间戳问题导致的卡顿解决方案
- GCD-直播初始化卡顿问题
- 一点直播卡顿的处理思考
- 《直播疑难杂症排查》:播放卡顿
- Ijkplayer直播App卡顿问题分析
- 南京远古高清视频直播解决方案
- UITableView滑动卡顿解决方案
- android studio卡顿解决方案
- CSS3 动画卡顿解决方案
- 基于EasyDarwin云视频平台的幼儿园视频直播(手机直播/微信直播)解决方案
- 七牛云直播-Android端播放卡顿问题处理
- 《直播疑难杂症排查》之二:播放卡顿
- 《直播疑难杂症排查》之二:播放卡顿
- TcpLister和TcpClient进行文件传输
- Elasticsearch增,删,改,查操作深入详解
- 视频播放BUG记录-事件传递响应问题
- Java中引用数据类型与C++引用和指针的区别
- arch_early_init
- 【video】视频直播推流拉流慢、卡顿解决方案
- js模拟暂停
- sybase执行时间(执行效率)
- Codeforces Round #375 (Div. 2) D. Lakes in Berland 贪心
- VS2012静态库生成和使用图文教程
- Django补充(1)
- Qt程序打包发布方法(使用官方提供的windeployqt工具)
- 矩阵论笔记(二)——线性变换
- [2017-AspNet-MVC4]简单加法的演化-4-Post和Get提交的区别-客户端与服务端校验的区别