渐进式流技术,或如何通过网络观看4k视频而不会感到烦恼



如今,以100 Mbit / s的互联网速度,任何人都不会感到惊讶,但是如何使用它却存在一个问题。 所有基本操作都无法完全加载网络。 同时,您想在线观看的沉重的4k-8k音频和视频格式更受欢迎。 看着互联网的高速发展,出现了一个逻辑问题-为什么不呢? 如何掌握提供商提供的全速? 无论是在客户端还是在服务端。 在本文中考虑所有这些问题。

我做了一个非常不错的软件产品,我想更详细地讲述一下那里的一切安排。 有许多新技术。 也许是因为很长一段时间没有人在这个行业中发明任何东西,而现在已经到了。 本文不仅适用于开发人员,也适用于普通人。 我试图解释一切尽可能简单。

1.让我们从当今数据传输技术的基础开始。
许多人对高速数据传输算法的知识有很大的空白-超过10 Mbit / s ...让我们填补这些空白:

空间#1。 问题是,作为最佳方案,目前无线电传输技术的整体集中在连续数据传输上。

如果传输是恒定的,即使以低于最大速率的速度传输,通过wi-fi \ 3G \ 4G甚至有线传输的所有内容都将以最快的速度传输。 这比间歇传输要快得多,但要以最大速度进行。

原因:

  • 为了恢复通信,将更多服务信息添加到流量中;
  • 在恢复通信时,服务器可以降低客户端等级,并以较低的速度(可能由于其他客户端的出现)提供数据,或者根本不提供数据。 即使在家庭Wi-Fi网络中,路由器也可以降低额定值,例如,由于有Wi-Fi真空吸尘器。 即 这适用于客户端超过2个的所有网络。 一般来说,几乎每个人都:-)

空间#2。 复制数据时,任何程序都使用一种“存储桶”,该存储桶从源中提取数据并将其传输到目的地。 因此,根据数据传输速率,此存储桶必须具有不同的大小 。 这很容易理解:如果您用茶匙将一桶水捞起,比捞起杯子要花更长的时间。

空间#3。 为了提高通过网络下载数据的速度,应使用RAM。 记录传入数据时的任何最短毫秒延迟都将注入数秒,数分钟和数小时。 为防止这种情况发生,您需要先将数据写入RAM,然后再写入永久性介质(硬盘)上更大容量的“存储桶”。 否则,数据传输速度将急剧下降。

仅复制文件就足够了。

2.这些差距只是冰山一角。 使用正常的文件传输就足够了,但是如果我们的文件是多媒体文件,我们必须开始在线播放该怎么办。 现代多媒体文件无法完全放入RAM,因此您必须考虑将其保存到磁盘。

最好的策略是从上述关于空间的角度构建的:

  • 无论播放如何,都应连续进行数据加载;
  • 为了确保倒带,有必要创建另一个数据加载流;
  • 为了克服启动时的条幅,由于接收到技术数据(编解码器等),必须进行预加载。 根据经验,我找到了公式:整个文件的大小为* 0.002或0.2%。

这足以播放Flac文件。

3.事实证明,在线流式传输将合理而充分地利用我们的通信渠道,需要RAM和磁盘空间。 否则,该通道将无法充分利用。

从这里开始分支数据加载算法! 如果没有技术细节,我将以大概的数量提供它们:

  • 为了不将数据下载两次,必须对流进行冲突。 即 如果我们开始这条赛道并迅速退至中间,则到达中间的第一股溪流将中断其工作。
  • 这样就不会两次下载数据,如果已经加载数据,则不应创建流。
  • 对于正常播放,需要播放器流与下载数据的流之间复杂的交互逻辑。

我做了所有这些,还有更多。 原来绝对很棒。 数据飞腾,播放不会中断。 Flac文件在播放1-3秒后就完全下载了。 这就足以播放Full HD视频。

4.问题在于我们的媒体文件大小差异很大。 对于重约80-120 GB的4k蓝光电影,没有任何效果。 播放器在开始时创建了15个线程,并且它们都共享速度,这当然还不足以等待播放器正在等待的主线程。 数据以最大速度加载,是的……他们下载了整个频道,但4k视频挂起并播放得比幻灯片慢。 事实证明,很多视频流对4k视频有害,但是在边界之后,全高清带来的好处变成了4k视频的危害?

结果,一切都取决于通道的速度。 为了优化线程,您需要了解两件事:

a)所需的播放速度,计算方式为:(文件大小/持续时间(以秒为单位))* 8。

b)播放器当前正在使用的主流加载数据的速度。

如果我们管理数据的加载,那么我们绝对有机会衡量下载速度。 现在,每个线程都知道其速度(以Mbps为单位),这不会对性能造成额外的成本。 确保确定播放器当前正在处理哪个流。 所有这些都以通常的多线程模式启动。 但是,一旦播放器以秒为单位计算了媒体文件的持续时间并发送了该数据,所有流将获得固定的必要播放速度。 此后,所有流量(主流除外)都会将必要的速度与主流的速度进行比较,如果主流速度较低,则会暂停。 此外,主线程会逐渐提高其速度,并且一旦超过所需速度的两倍(如我所做的那样),就会从暂停中暂停所有次要流。

根据观察,然后,一段时间后,主流的速度再次下降,所有辅助流再次进入暂停状态,因此直到数据被下载或回放完成为止。 这种灵活的策略可以在并行并行处理数据加载并在必要时将其压缩为一个流时,完全下载通信通道,同时确保最快地下载数据回放所需的数据。 此策略在10 MB和100 GB文件上同样有效。 为了在网络上畅玩无损,不可能提出更好的选择。 如果您有任何建议,我将很高兴在评论中进行讨论。

适用于播放任何4k-8k大小的媒体文件。

当以原始质量传输数据时,渐进式流是最快的流类型。 为了提高数据传输速率,它使用RAM和多线程。 数据异步加载到回放流中,但与之交互。 在回放期间,将测量数据采集的速度,并且将有效流的数量调整为适用于可用数据通道。
目前,世界上有一种增加高分辨率视频数量的大趋势,并且用于播放它的设备的普及也在增长。


资料来源www.vox.com

比特率4k视频很大,但不是很高。 当今最高效的VP9编解码器以15 Mbps的速度压缩4k视频。 带有音频的声音大约是15.5。 一部100 GB的蓝光电影的比特率约为60 Mb / s。 世界上任何想要观看4k视频的人都具有这些Internet速度。 这意味着现在可以在线观看4k视频!

尽管上述算法很简单,但实现看起来非常复杂。 由于缺乏正确的数据传输算法的实施,视频和音频质量下降的流技术被迫破坏内容。 我假设许多人和公司都有(以上)知识鸿沟,当然,在实现此算法方面也有困难。 因此,他写了一篇文章以简化对这种流方法的理解。

使用版权制作此算法会有些困难,但总的来说也是可行的。 保存到磁盘并读取时,有必要对数据进行加密。 看起来像是对用户的敌对行动,但该怎么办。 一些公司正在这样做。

现在让我们看一下传统流媒体与渐进式视频相比的缺点:

  • 无法预加载下一个文件\来预测和准备下一个动作;
  • 即使Internet暂时断开/速度中断,声音/图像也会出现明显的模糊感;
  • 在仍然有大量数据要加载的时候,通信通道没有被充分使用,并且有一半的回放时间是空闲的;
  • 无法播放4k-8k的视频,即使通过无带条幅的wi-fi也是如此。 持续的阵阵沟通和速度跃升至最大无法忍受,即使整个电影中的家庭Wi-Fi都是2小时或更长时间;
  • 播放4k内容时,这会带来更大的负担,因为播放器需要在RAM中保留200-300 MB的视频数据(以所需的60 Mb / s的速度)。 通过渐进式流传输算法播放时,这不再是必需的,因为播放是从磁盘而不是通过网络进行的。

根据这些要点,很明显,像以前一样,无法流式传输什么。 当然,您可以将速度\内存\高速缓存提高十倍,但是为什么呢,如果今天的速度已经足够而问题出在算法上。 错误的算法迟早会陷入僵局。 如今,渐进式流传输是唯一使您能够稳定舒适地在线观看4k 100 GB电影的技术。

作为该技术工作方式的一个示例,我编写了一个多媒体应用程序- 媒体库播放器。 它支持所有格式。 为了演示功能,您需要运行它。 打开演示站点,然后转到“电影(TOP)/ 4k电影”目录树。 在这里您可以选择任何电影并观看。 为了支持所有格式,您应该将播放器模块从ExoPlayer切换到VlcPlayer。
在这种情况下,将使用上述所有数据采集算法。 我的应用程序支持以下协议:nmdc \ http \ ftp \ samba以及Mega.nz云。

以最小的延迟播放重达100 GB的4k视频文件,并以最快的速度下载到内存中。 您可以通过简单地暂停来预加载更多数据,但这通常不是必需的。 播放始终稳定,如果不稳定,则频道速度接近播放所需的速度。

由于上述差距,最大的公司的政策不太正确,这会减慢进度并经常阻止完全使用可用的设备和通信渠道。

该应用程序可将缓存保存到外部媒体,但是由于从Google访问外部媒体的过程很复杂,因此目前主要由Samsung设备和Android 5.0+版本支持。 将来,将出现对外部USB媒体的全面支持。

通常,该算法可大大提高流式传输数据的质量和速度,无论是30-50 MB的小文件还是50-120 GB的大文件。

从角度来看,可以使用:

  • 用于在手机,电视和其他设备上高质量播放4k-8k媒体内容;
  • 在虚拟现实中以高分辨率显示体积场景;
  • 结合类似洪流的点对点协议;
  • 可在任何设备上以高分辨率播放高质量的音乐。 实验测试表明,2 Mbps的不稳定通信通道足以满足此要求。

Source: https://habr.com/ru/post/zh-CN452766/


All Articles