【问题标题】:How streaming apps change video quality based on changes in network speed?流媒体应用如何根据网络速度的变化来改变视频质量?
【发布时间】:2020-04-25 00:57:35
【问题描述】:

Youtube、Hotstar 或任何其他视频播放器应用等流媒体应用如何以编程方式检测网络是否在运行时变慢,并根据网络速度的变化来改变视频质量?

【问题讨论】:

    标签: android performance mvvm architecture


    【解决方案1】:

    现在许多流媒体服务都使用基于 HTTP 的流媒体协议。但也有例外;尤其是低延迟流式传输;例如基于 WebRTC 或 Websocket 的解决方案。

    假设您使用基于 HTTP 的协议(如 HLS 或 MPEG-DASH),“流”是一个接一个下载的长链视频片段。视频片段是“TS”或“MP4”格式的文件(在某些 MP4 情况下,视频和音频被拆分为单独的文件);通常一个片段有 2 或 6 或 10 秒的音频和/或视频。

    根据播放列表或清单(或有时仅通过解码片段),播放器知道单个片段包含多少秒。它还知道下载该段需要多长时间。您可以通过将视频片段文件的(平均)大小除以下载所需的(平均)时间来衡量可用带宽。

    在下载片段比播放片段花费更多时间的那一刻,您知道一旦缓冲区为空,播放器就会停止;停顿通常被称为“缓冲”。自适应比特率(又名 ABR)是一种试图防止缓冲的技术;见https://en.wikipedia.org/wiki/Adaptive_bitrate_streaming(或谷歌的表达) - 当播放器注意到可用带宽低于视频流的比特率时,它可以切换到具有较低比特率的同一流的另一个版本(通常实现通过更高的压缩率和/或更低的分辨率——这会导致质量下降,但这比缓冲要好)

    PS #1:WebRTC 和基于 Websocket 的流解决方案不能使用这种测量技巧,必须实现其他解决方案

    PS #2:新的/即将推出的 HLS 变体(例如 LL-HLS 和 LHLS)和 MPEG-DASH 使用其他 HTTP 技术(如分块传输或 HTTP PUSH)来实现更低的延迟 - 这些通常不能很好地工作使用提到的测量技术并使用我认为超出范围的不同技术。

    【讨论】:

      【解决方案2】:

      您必须使用流媒体服务器才能做到这一点。 Wowza 服务器就是其中之一(不是免费的)。客户端和服务器将根据网络速度交换有关连接的信息并分发视频块。

      【讨论】:

      • 我的问题与这些应用程序如何在 Android 客户端检测运行时网络速度的变化有关。
      • 好的,那么你应该检查这个答案stackoverflow.com/a/11088823,因为我认为我不能帮助你做得比图书馆做得更好。我的意思是拥有真正的连接质量很复杂,您需要对其进行测试(例如在客户端计算一段视频的下载持续时间),最简单的方法是使用这个答案来获得一个近似值跨度>
      • @liltof 该代码仅根据带宽“类型”返回 true 或 false,并且不 (1) 告诉您如何找到当前带宽类型或 (2) 与视频的比特率相关.
      猜你喜欢
      • 2013-05-10
      • 2015-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-22
      • 1970-01-01
      • 2018-06-30
      相关资源
      最近更新 更多