视频直播推流拉流慢、卡顿解决方案

本文涉及的产品
移动研发平台 EMAS,开发者版免费套餐
简介: 视频直播类App当前已经普遍采用CDN来实现访问加速,但还是经常遇到推拉流慢、卡顿的问题。这类问题一般是由于调度不精准、域名劫持、终端手机接入网络动态切换等因素导致,结合使用CDN和HTTPDNS可以比较完美解决此类问题。

一、摘要

视频直播类App当前已经普遍采用CDN来实现访问加速,但还是经常遇到推拉流慢、卡顿的问题。这类问题一般是由于调度不精准、域名劫持、终端手机接入网络动态切换等因素导致,结合使用CDN和HTTPDNS可以比较完美解决此类问题。

二、视频直播经典加速架构

当前视频直播类App经典加速架构如下图所示:

图1 视频直播类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、支持全网域名解析

(1)接口简单统一

(2)无需对接多家HTTPDNS

2、以IP方式对外提供服务,防止自身被劫持

3、AnyCast IP支持异地容灾

各地域使用同一个IP地址提供服务

4、接入延迟低且稳定

以北京为例,测试一下阿里云HTTPDNS的访问延迟:

图4 阿里云HTTPDNS服务器RTT延迟

5、支持https接口

6、提供Android SDK/iOS SDK,方便接入


钉钉搜索35248489,加入阿里云云原生应用研发平台EMAS技术交流群,探讨最新最热门的应用研发技术和实践。(或钉钉扫码加入)

相关文章
|
4月前
|
Web App开发 缓存 Linux
FFmpeg开发笔记(三十六)Linux环境安装SRS实现视频直播推流
《FFmpeg开发实战》书中第10章提及轻量级流媒体服务器MediaMTX,适合测试RTSP/RTMP协议,但不适合生产环境。推荐使用SRS或ZLMediaKit,其中SRS是国产开源实时视频服务器,支持多种流媒体协议。本文简述在华为欧拉系统上编译安装SRS和FFmpeg的步骤,包括安装依赖、下载源码、配置、编译以及启动SRS服务。此外,还展示了如何通过FFmpeg进行RTMP推流,并使用VLC播放器测试拉流。更多FFmpeg开发内容可参考相关书籍。
103 2
FFmpeg开发笔记(三十六)Linux环境安装SRS实现视频直播推流
|
编解码 视频直播 Android开发
安卓实现视频直播(rtmp)以及直播推流(NDK实现)
安卓实现视频直播(rtmp)以及直播推流
929 0
|
Web App开发 编解码 网络协议
阿里云低延时直播RTS能力升级 让直播推流效果更佳
针对主播推流使用RTMP存在的TCP链接耗时过长、拥塞控制完全依赖TCP传输层、无法提供实时带宽数据来动态调整视频编码码率等问题引起的推流延迟和卡顿。阿里云低延时直播RTS(Real-time Streaming)产品在下行UDP改造的基础上,进行上行UDP底层WebRTC技术优化,通过发布移动端、PC端推流RTS SDK插件来提升整个行业的主播推流质量,提供低延时、低卡顿、安全可靠的直播观看体验。客户端接入简单,只需要在OBS端嵌入RTS SDK即可新增一个推流协议,无需改变原有的推流端采集架构。
1942 0
|
算法 Unix 视频直播
【视频直播】推流以及播放地址的鉴权地址生成实践
针对阿里云的视频直播产品,生成推流以及播放域名的鉴权地址的流程实践方式
1269 0
【视频直播】推流以及播放地址的鉴权地址生成实践
|
视频直播 PHP
视频直播生成推流地址和播放地址的程序示例(PHP)
直播推流地址和播放地址本身没有API接口,需要在客户端自行拼接地址,然后使用推流工具或者播放器对其推流或播放。本文主要介绍如何生成直播的推流以及播放地址(PHP示例代码)。
1239 0
|
Web App开发 视频直播
视频直播推流不成功如何排查
本博文将介绍,视频直播加速配置后,推流不成功要如何进行排查及解决
10324 1
|
Web App开发 编解码 视频直播
视频直播Android推流SDK初体验
使用阿里云直播产品如何进行推流播流,可以参考视频直播快速开始进行创建直播域名推流播流。那么移动端要如何进行推流呢,视频直播提供了Android、IOS推流SDK,用户可以使用对应的SDK进行推流,本文旨在让读者可以按照文章快速的应用Android推流SDK进行推流并且了解常见推流参数的设置
8899 0
|
视频直播 PHP
视频直播生成推流和播放地址的PHP代码示例
直播推流地址和播放地址本身没有API接口,需要在客户端自行拼接地址,然后使用推流工具或者播放器对其推流或播放。本文主要介绍如何生成直播的推流以及播放地址(PHP示例代码)
1283 0
|
Java 视频直播
视频直播生成推流地址和播放地址的程序示例(Java)
直播推流地址和播放地址本身没有API接口,需要在客户端自行拼接地址,然后使用推流工具或者播放器对其推流或播放。本文主要介绍如何生成直播的推流以及播放地址(Java示例代码)
2503 0
|
JavaScript Java 视频直播
视频直播常见问题与解决办法汇总【系列三—直播推流】
直播推流初始化设置 要进行直播推流,您必须开启直播加速 > 配置直播域名 > 直播推流,详情参考 快速开始。 如何获取推流地址 直播加速配置成功后,您可以通过以下方式获取对应的推流地址。 登录 视频直播控制台。
6374 0