当前位置: 首页 > news >正文

流畅度提高 100%!七牛云 QUIC 推流方案如何实现直播 0 卡顿?

不做任何开发,弱网环境下实现直播零卡顿,听上去是不是天方夜谭?看完这篇文章你就知道,七牛直播云是如何做到的。

内容目录

  1. 直播痛点-卡顿
  2. QUIC 是什么?为什么可以减少卡顿?
  3. 实测在弱网环境下 QUIC 推流效果
  4. 如何接入七牛云 QUIC 解决方案?

直播痛点-卡顿

卡顿是最影响直播体验的因素之一,也是最难解决的问题之一。在流媒体的传输链路中,任何一个环节丢包都可能导致用户观看卡顿。

其中,主播端的推流卡顿最影响观看体验,会直接影响到所有观看直播的最终用户。主播推流卡顿在部分场景会特别显著,比如户外直播就非常考验在网络状况复杂的情况下推流的稳定性。

减少卡顿一直是开发者重大的技术挑战,七牛云作为互联网直播行业的先驱又有什么样的对策呢?

Google 从 2014 年推出 QUIC 协议后一直在音视频产品上实践该协议。现在,经过一年多的探索和实践,七牛云直播云产品已经拥抱 QUIC,最新推出的直播 QUIC 推流方案可以大幅度的降低直播的卡顿问题,可以在各种复杂网络环境下给客户提供优秀的直播体验。

QUIC 是什么,为什么可以降低卡顿?

既然 QUIC 可以解决如此重要的直播体验问题,那么我们先从整体了解一下 QUIC 协议。

  1. QUIC 的定义是什么
  2. QUIC 在分层网络中所处的位置
  3. QUIC 在传输上为什么有优势

1. QUIC 协议的定义

QUIC 全称 Quick UDP Internet Connection, 是谷歌公司制定的一种基于 UDP 协议的低时延互联网传输协议。

我们知道,TCP/IP 协议族是互联网的基础。其中传输层协议只有两种: TCP 和 UDP 协议。与 TCP 协议相比,UDP 更为轻量,但是错误校验也要少得多。由于 UDP 是不可靠协议,不保证按序送达,所以其可靠性比不上 TCP 协议。

QUIC 传输层基于 UDP 协议但却是一种可靠的传输协议,因为它将很多可靠性的验证策略从系统层转移到应用层来做,这样可以使用更适合现代流媒体传输的拥塞控制策略。

2. QUIC 在网络传输中所处的位置


从图上可以看出,QUIC 传输层用 UDP 协议替代了 TCP。

3. QUIC 在传输上为什么有优势

从上面所有对 QUIC 的定义上来看,很明显 QUIC 的对比对象是 TCP。所以下面所有的优势的枚举都是基于 QUIC 和 TCP 的比较。

3.1 更出色的拥塞控制

虽然例如 HTTP/2 或者 SPDY 协议现在都支持将页面的多个数据通过一个数据链接进行传输,该特性也确实能够加快数据的传输速度。但是由于 TCP 协议在处理包时是有严格顺序的,所以还是会遇到队首阻塞的问题。

比如发生如下图所示场景下的问题时,当其中一个数据没有发送成功,TCP 连接需要等待这个包完成重传之后才能继续进行。因此,即使逻辑上一个 TCP 连接上并行的在进行多路数据传输,其他毫无关联的数据也会因此阻塞。
(Source: QUIC: next generation multiplexed transport over UDP)


QUIC 协议直接通过传输层使用 UDP 协议就可以避免该问题的发送。由于 UDP 协议没有严格的顺序要求,当一个数据包遇到问题需要重传时只会影响该数据包对应的资源,其他独立的资源不会受到影响而阻塞传输。

3.2 QUIC 更加灵活

TCP 协议栈通常由操作系统层面来实现,例如如 Linux、Windows、iOS、Android 操作系统。因此如果要修改 TCP 协议需要从操作系统层面去做很多事情,这是一项复杂的工程。相对来说 UDP 协议在操作系统层面实现更为简单,QUIC 基于 UDP 在应用层做了很多网络拥塞控制层面的优化,帮助用户减少复杂网络下的卡顿率,提高流畅度,这是 TCP 无法做到的。

4. 小结

从以上所有的介绍中可以看出,如果我们需要使用 QUIC 改善直播体验,就是用它来代替直播中 TCP 协议所扮演的角色。大家都清楚目前直播所使用的协议都基本是 RTMP 协议,而 RTMP 协议的传输层是基于 TCP 协议。所以七牛的 QUIC 推流方案就是把 RTMP 当中的传输层协议换成 QUIC,从而达到推流卡顿率下降的效果。

QUIC 的使用效果

上面说了那么多基于 QUIC 做媒体传输的理论优势,那么有没有实际的实验测试作为理论的支撑呢?下面一起来看看七牛云 QA 团队给出的测试数据吧。

测试的参数配置:

测试方式:
使用 ATC 模拟的弱网环境下,用 srs 播放器播放 5 mins,记录流畅度和卡顿次数。

  1. 弱网配置一
    ATC配置:delay 100ms loss 1%

结果分别如图所示:

  1. 弱网配置二
    ATC配置:delay 200ms loss 10%

而在 TCP 这种网络配置下,推不起来,或者推一会就会断开。

如何接入七牛云 QUIC 解决方案

我们相信很多客户已经发现 QUIC 推流这项技术对于自己产品的意义,它可以有效减少主播由于网络问题带来的烦恼。 客户只需要换上七牛最新版本的推流 SDK ,打开客户端上的 QUIC 推流开关,配合七牛云专为直播产品打造的实时流网络,即可让你的产品体验更加流畅。

申请试用
关注公众号七牛云,了解更多信息哦~

相关文章:

  • 「不良视频」如何消灭?她手把手教你走出第一步!
  • 对象存储 JavaScript SDK 更新,即刻体验更简单·可信赖的服务
  • 【1封新邀请】想跟谷歌、七牛、kyligence等大佬面对面的交流吗?
  • 共战疫情,携手企业,「七牛云」在行动!
  • 双十一划重点!还有必考题一定要记住!
  • 秀场直播的四种实现方式,让我们从方案架构进行分析
  • 11月深圳,你不可错过的线下技术活动!
  • 轻量级大数据ETL的开发框架——​七牛云内部平台架构 QStreaming
  • 聚焦自主创新,七牛云完成华为多项兼容性认证
  • 【技术猩球】牛人分享:大数据架构师在关注什么?
  • Niu Talk 数据科学系列论坛:明晚,我们聊聊大数据与开源
  • 是什么让你在赛博空间更好看?
  • 直播新规出台!如何用技术管住乱打赏的「熊孩子」?
  • 【技术猩球】七牛云姜智:Go+ 演进之路
  • 七牛云视频模板 SDK:「剪刀手」是怎样炼成的?
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • gf框架之分页模块(五) - 自定义分页
  • Java教程_软件开发基础
  • Java新版本的开发已正式进入轨道,版本号18.3
  • Mysql5.6主从复制
  • Node项目之评分系统(二)- 数据库设计
  • python学习笔记-类对象的信息
  • Shadow DOM 内部构造及如何构建独立组件
  • 多线程 start 和 run 方法到底有什么区别?
  • 工作中总结前端开发流程--vue项目
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 手写一个CommonJS打包工具(一)
  • 网页视频流m3u8/ts视频下载
  • 学习ES6 变量的解构赋值
  • 一文看透浏览器架构
  • 赢得Docker挑战最佳实践
  • 做一名精致的JavaScripter 01:JavaScript简介
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (5)STL算法之复制
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (轉)JSON.stringify 语法实例讲解
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • *** 2003
  • .cfg\.dat\.mak(持续补充)
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .net 生成二级域名
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国
  • ?.的用法
  • [ Linux 长征路第五篇 ] make/Makefile Linux项目自动化创建工具