点击上方“LiveVideoStack”关注我们

翻译 | Alex

技术审校 | 赵军

本文来自OTTVerse,作者为Krishna Rao Vijayanagar。

ABR

Easy Tech

#007#

ABR表示Adaptive Bitrate(自适应码率),它广泛地描述了这样一个过程:视频和音频的质量和码率会根据当前网络状况的波动而发生自适应变化,以确保网络传输流畅。

ABR明显不同于CBR(Constant Bitrate)和VBR(Variable Bitrate),理解ABR将有助于我们理解视频流化中的各种概念。

  我们为什么需要ABR?

为了理解对于ABR的需求,我们先要认识到互联网上的流媒体都是“尽力而为(best-effort)”的服务。对于这些流媒体而言,无论是速度/带宽、效率,还是错误恢复能力,都无法做到绝对保证。

这与通过有线网络(传统cable网络一般被认为是可控网络)提供给机顶盒的电视不同:电视有线网络可以确保正常运行时间,并极少出现视频中断以及视频质量出现急剧变化的情况。如果你订阅了Fox的高清1080p新闻,你肯定会看到高清1080p的视频(绝对能保证)。

但是,当视频通过互联网传输时,情况就大不相同了。为什么会这样?

  带宽波动的简单解释

假设你家里的互联网带宽是10mbps。

你的电视使用一个Cat 5网线直接连接到路由器上。你有三个手机、两个平板都连接在同一网络上,你的孩子做家庭作业也要用这个网!

考虑一下所有设备都在同一时间连到同一互联网上,那它们需要消耗多少带宽?

现在,你坐下来观看自己最喜欢的节目。你的电视这时可能消耗了3mbps的带宽来播放节目。10分钟后,你的太太打开了她iPad的上的YouTube,也开始看她最喜欢的节目。

这时,电视的可用带宽突然下降(也许下降到2mbps),因为你太太也在使用同一WiFi。需要明确的是,带宽发生了突然变化(从3 mbps到2 mbps)——33%的下降!

现在最重要的问题来了——你的电视正在下载什么,以什么码率,质量呈现如何?如果你有一个单一的视频版本(Rendition, 指内容相同,但编码、分辨率、码率等不同的视频),会做什么样的选择?

让我们来反问内容提供商,为了满足不同家庭的不同带宽需求,他们应该以何种码率编码?

这基本是个不可能的任务:提供单一版本的视频或者视频编码来满足所有用户的不同带宽需求和限制。

 ABR来帮忙

根据ABR的工作原理,输入视频有多种版本(在不同码率、分辨率和帧率下),可以使用不同编解码器来满足大量带宽条件、屏幕尺寸和各种设备。

码率阶梯、配置文件和不同的视频版本     

拿到一个源视频,第一件事就是在不同版本或者配置文件下将其编码,从而形成码率阶梯。

比如,你可能要将视频在以下配置文件中进行编码:

1.    1080p 5.0 mbps

2.    720p 4.0 mbps

3.    640p 3.2 mbps

4.    480p 2.0 mbps

5.    270p 1 mbps

你可以选择任意你想要的编解码器、码率、分辨率、编解码器分辨率或帧率,但是做决策时需要格外谨慎。

比如,如果你向世界上某些地区提供视频服务,假设这些地区中99%的人都无法使用超过2mbps带宽的网络,那么编码码率超过2mbps就是在浪费时间、金钱和存储空间,对吧?

在这些配置文件中选择码率阶梯和编码后,你将这些视频打包,然后通过使用视频流协议(如DASH、HLS、HDS和MSS等)的清单或者播放列表将视频提供给播放器,即终端用户。

打包

视频打包是指将一个视频分割成多个小的片段(视频块),以便每个片段都能单独被交付或者传输给播放器,而不是一次下载整部电影。

播放器使用这个清单来理解视频是如何下载并呈现给用户的。

带宽自适应视频播放

假设视频按照上文中的码率阶梯编码,当播放器开始播放视频时,它感知到的可用带宽为20mbps(我们假设),这远大于最高码率5mbps。所以播放器可以安全地下载第一个最高码率为5mbps的视频片段(也许时长6秒钟)。然后播放器再次感知带宽,如果依然很高,那么它将再请求最高码率的视频片段。

如果带宽突然下降到5mbps,播放器将向服务器请求码率为4mbps的视频片段,因为请求5mbps的片段会有风险。然后播放器会接收并播放4mbps的视频片段。

这个过程会一直持续,直到将所有视频播放完。

我刚才所介绍的是一种简单的带宽估计和质量/码率切换方法。显然现在有多种复杂的算法用来控制和决定播放器的切换(BOLA就是其中一种)。

维基百科上有一张很有意思的图片,这张图描绘了带宽的变化以及播放器请求的视频片段码率是如何适应带宽变化的。

图片来源:By Daseddon –Own work, CC BY-SA 3.0

   总   结

在结束这篇ABR视频流文章之前,让我们复习下本文所学到的一些知识:

  • ABR表示Adaptive Bit Rate,即自适应码率

  • 它指的是媒体交付的自适应特性,其中播放器根据可用带宽请求不同码率的媒体

  • ABR技术的成功需要编码器、打包器、CDN和播放器的通力协作

对于本篇文章,你如果有想要补充的内容,欢迎在下方评论区评论。


致谢

本文已获得作者Krishna Rao Vijayanagar授权翻译和发布,特此感谢。

原文链接:

https://ottverse.com/what-is-abr-video-streaming/

延伸阅读:

视频编码完全指南

Easy Tech:什么是I帧、P帧和B帧?

为什么视频压缩如此重要


讲师招募

LiveVideoStackCon 2022 音视频技术大会 上海站,正在面向社会公开招募讲师,无论你所处的公司大小,title高低,老鸟还是菜鸟,只要你的内容对技术人有帮助,其他都是次要的。欢迎通过 speaker@livevideostack.com 提交个人资料及议题描述,我们将会在24小时内给予反馈。

喜欢我们的内容就点个“在看”吧!

理解ABR及其工作原理相关推荐

  1. [diango]理解django视图工作原理

    前言:正确理解django视图view,模型model,模板的概念及其之间的关联关系,才能快速学习并上手使用django制作网页 本文主要讲解自己在学习django后对视图view的理解 在进入正文之 ...

  2. eja智能压力变送器工作原理_如何理解智能压力变送器工作原理及功能介绍

    如何理解智能压力变送器工作原理及功能介绍 智能压力变送器一般是由传感器.微处理器.存储器及模数.数模转换器组成.传感器用来检测被测量的信号,其所用材料因厂家而异.横河EJA为硅谐振式,把被测参数转换为 ...

  3. 通过自制CPU来彻底理解CPU的工作原理

    每天摸着CPU,摸了20多年,却总是无法彻底理解CPU的工作原理,还有比这更郁闷的事吗?所以我决定攻克这一世界(我个人的世界)难题,自己做一个CPU来理解CPU的工作原理. " 造一个什么样 ...

  4. 用一个实际例子理解Docker volume工作原理

    要了解Docker Volume,首先我们需要理解Docker文件系统的工作原理.Docker镜像是由多个文件系统的只读层叠加而成.当一个容器通过命令docker run启动时,Docker会加载只读 ...

  5. 用一个实际例子理解Docker volume工作原理 1

    要了解Docker Volume,首先我们需要理解Docker文件系统的工作原理.Docker镜像是由多个文件系统的只读层叠加而成.当一个容器通过命令docker run启动时,Docker会加载只读 ...

  6. 理解 HTTPS 的工作原理

    转自 https://linux.cn/article-6804-1.html 目标读者:理解HTTP协议,对称和非对称加密,想要了解HTTPS协议的工作原理. 读完本文,你能明白 什么是HTTPS, ...

  7. 十个问题理解Linux epoll工作原理

    作者:dustinzhou,腾讯 IEG 运营开发工程师 epoll 是 linux 特有的一个 I/O 事件通知机制.很久以来对 epoll 如何能够高效处理数以百万记的文件描述符很有兴趣.近期学习 ...

  8. 十个问题理解Linux epoll工作原理:惊群,

    目录 Question 1:是否所有的文件类型都可以被 epoll 监视?不是 Question 2:ep->wq 的作用是什么? Question 3:什么是 epoll 惊群? Questi ...

  9. Linux下轻松理解防火墙的工作原理及相关设置(三)firewalld服务、包括Direct Rules 和Rich Rules (地址伪装和转发)

    文章目录 firewalld概述 firewall和iptables的不同 firewalld常用命令 firewalld基本管理 1.图形化操作 firewall-config 2.命令化操作 火墙 ...

最新文章

  1. CUDA Samples: approximate image reverse
  2. To connect to files.phpmyadmin.net insecurely, use `--no-check-certificate‘
  3. [WinError 17] 系统无法将文件移到不同的磁盘驱动器
  4. 我现在的简历以及后面的更改方向
  5. 130108还原临时表空间
  6. 思科无线服务器,【CISCO wlan】思科无线网络_3-基本配置v2.pdf
  7. PHP两个二维数组数据处理:字段值相等,则赋值给另一个数组
  8. 双主动桥隔离双向DC-DC变换器(五)硬件设计和优化
  9. 750ti显卡能支持服务器吗,《守望先锋》显卡实测:750Ti降服全特效
  10. php支付宝发卡源码,个人发卡系统支付宝即时到帐大气源码
  11. linux学习资料(转帖收藏)
  12. Gabor变换(1)
  13. CocoaPods禁止显示警告inhibit_all_warnings
  14. 设计一款理财产品并发布推广
  15. child_process使用记录
  16. python 如何把字符串转换成浮点数
  17. 锤子发布会的那些梗-2016年10月18号
  18. android极光推送声音,【极光推送】iOS APNS 自定义铃声
  19. CTFshow-Web入门writeup
  20. 链脉名片创始人陈润阳谈什么是新营销?

热门文章

  1. 提高调试.net cf程序效率一些技巧
  2. 学习ASP.NET Core Razor 编程系列十八——并发解决方案
  3. Linux驱动之Input子系统要点分析
  4. 【Android开发】消息处理类(Handler)与消息类(Message)介绍
  5. 职业生涯发展技巧20则
  6. VBS的疑惑,它们不考虑效率吗?
  7. CodeForces - 813E Army Creation(主席树+思维)
  8. 洛谷 - P2774 方格取数问题(最小割-最大流+奇偶拆点)
  9. POJ - 1734 Sightseeing trip(最小环+输出路径)
  10. mysql分表组件_利用Sharding-Jdbc组件实现分表