播放器技术共享(2): 缓冲区管理

电脑杂谈  发布时间:2020-07-01 01:19:20  来源:网络整理

网页音频播放器缓冲条_腾讯视频缓冲播放不了_mp4 要缓冲完才能播放

这是系列文章中的第二篇,主要涉及播放器的缓冲区管理.

在上一篇文章中,我们提到了缓冲区用于将单线程模型的数据流转换为多线程模型,从而可以有效地抵抗网络的抖动和解码,防止频繁的阻塞和也要充分利用它. 下图显示了多核CPU的计算能力:

播放器的读取线程将IO和Parser模块输出的“未编码”音频和视频数据包放入“帧缓冲区”队列中,并将解码后的数据存储在“显示缓冲区”队列中.

让我们深入研究. 这个“帧缓冲区”和“显示缓冲区”扮演什么角色?

2.1帧缓冲区

帧缓冲区,作为“读取线程”和“解码线程”之间的缓冲池,它主要扮演三个角色:

1. 抵抗网络抖动

2. 抵抗解码抖动

3. 避免因花屏而导致被动帧丢失

腾讯视频缓冲播放不了_mp4 要缓冲完才能播放_网页音频播放器缓冲条

假设没有“帧缓冲区”,即: IO->解析器->整个过程是串行的,那么将存在以下潜在问题:

1. 当IO网络不稳定(例如: 短暂的拥塞,无法读取数据)时网页音频播放器缓冲条,整个数据链将被卡住,并且只能等待IO恢复

2. 也会出现“抖动”,因为解码一些复杂的视频帧将花费很长时间. 如果卡住,则同一IO模块只能等待.

3. 因为整个过程是串行的,所以每个帧必须是IO->解析器->将在完成后读取并处理下一帧. 然后,当网络抖动时,将出现服务器端的TCP. 协议栈缓存更多数据. 当网络恢复后,当网络交付给客户端时,由于接收不及时,TCP传输队列已满,并且发生被动帧丢失,由于数据不完整,导致随后的解码屏幕.

2.2显示缓冲区

显示缓冲区,作为“解码线程”和“显示线程”之间的缓冲池,主要发挥三个作用:

1. 实现“声像同步”的必要条件

2. 抵抗渲染抖动

假设没有“显示缓冲区”,即: ->渲染器整个过程是串行的,那么将存在以下潜在问题:

1. 无论是视频帧还是音频数据,解码后都会立即发送到渲染模块,并且无法添加音频和图片同步的逻辑处理

2. 如果渲染模块中存在“抖动”,则会直接阻止,并且无法异步解码帧缓冲区中的数据,这会降低效率

网页音频播放器缓冲条_腾讯视频缓冲播放不了_mp4 要缓冲完才能播放

了解缓冲区的功能,让我们看一下缓冲区中的数据是如何填充的?

缓冲区的数据填充主要分为两种情况,第一种称为“主动缓冲”,另一种称为“被动缓冲”

主动缓冲: 指播放器主动挂起缓冲区的数据消耗,等待数据产生者逐渐填充数据直到达到一定条件然后恢复

被动缓冲: 这意味着数据消耗的速度无法赶上生产速度,从而被动地将数据保留在缓冲区中

主动缓冲主要用于按需场景. 为了减少频繁的冻结,在视频开始播放之前网页音频播放器缓冲条,数据将被缓冲一段时间(例如: 10秒),然后开始播放. 当缓冲区中的数据由于网络抖动和其他原因而被消耗时,它将再次开始缓冲,依此类推.

如图所示,假设播放器缓冲区中的数据低于低水位,它将主动暂停播放并开始缓冲过程,直到缓冲区中的数据达到M水位为止.

被动缓冲(主要是在直播情况下)可能有两个原因:

1. 手机和其他设备的解码性能不足,例如对1080P高清晰度视频进行软解码,导致视频解码和渲染速度无法赶上视频读取速度,从而导致数据在“帧缓冲区”中积累

2. 网络的频繁抖动会阻止客户端及时获取数据以进行解码和渲染. 当网络恢复后,数据将被快速传送,但是播放器无法快速使用它(因为播放速率是固定的,除非添加了追逐帧的逻辑,否则后续文章将对其进行详细介绍) )

腾讯视频缓冲播放不了_mp4 要缓冲完才能播放_网页音频播放器缓冲条

了解缓冲区的作用后,如何确定这两个缓冲区的大小?首先,我们需要知道这两个缓冲区大小究竟会影响或确定什么?

1. 缓冲区越大->抗抖动能力越强

2. 缓冲区越大->内存使用率越高

3. 缓冲区越大->播放延迟越大

可以看出,缓冲区越大越好. 需要根据实际使用情况决定.

“显示缓冲区”实际上是解码线程和渲染线程之间的桥梁. 由于解码和渲染之间的抖动不频繁,因此不需要特别大的缓冲区. 最小约为3帧. 在生产中,一帧正在消耗,一帧在缓冲区中处于待机状态.

“帧缓冲区”用于抵抗网络抖动. 网络抖动通常更频繁,抖动时间有时更长,因此应将“帧缓冲区”设置为较大,但是前提是它会影响内存和回放延迟.

对于现场广播场景,为了防止“被动帧丢失”,默认情况下通常将“帧缓冲区”设置为“无限”. 当缓冲区达到某个阈值时,将开始一些诸如活动帧丢失或多次回放的操作. 快速使用缓冲内容的方式,从而减少内存和延迟.

在以下情况下,播放器将主动清除缓冲区中的数据:

1. 播放器重置

2. 播放进度条被拖动

腾讯视频缓冲播放不了_mp4 要缓冲完才能播放_网页音频播放器缓冲条

3. 消除累积的延误

4. 系统内存警报

ijkplayer的使用非常广泛. 让我们以它为例,看看播放器缓冲区的真实情况是什么?

1. 播放器开机后,缓冲100ms,然后开始播放

2. 如果卡住了(缓冲区为空),请暂停播放,将缓冲区缓冲到1000ms,然后开始播放

3. 如果再次卡住,则缓冲到2000ms并重播,依此类推,直到5000ms

可以看到其缓冲区的最大阈值逐渐增加,这是对用户体验的最佳优化,因为如果用户网络不是很糟糕,则无需等待5秒钟就无需先进行缓冲.

p>

此处共享播放器的缓冲区管理. 如有任何疑问,请致信lujun.hust@gmail.com进行交流. 此外,也欢迎大家关注我的新浪微博@卢_俊或微信公众号@Jhuster,获取最新文章和信息.


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/bofangqi/article-264190-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...