exoplayer2.x - Exoplayer 在处理(解码)之前是否完全下载了一个块
问题描述
Exoplayer 在处理(解密、解码)之前是否完全下载了一个块。有没有办法在块完全下载之前覆盖它并开始解码/播放。内容是 6 秒块大小的 MPEG-DASH 内容。
我正在使用最新版本的 Exoplayer。我正在尝试改进视频开始时间,从而改进此查询。此外,较小的块大小会影响视频开始时间吗?
解决方案
我认为当您说块时,您的意思是破折号段 - 术语很重要,因为 DASH 段可以包含子段,并且每个子段都可能是可解码的,但它也令人困惑,因为 ExoPlayer 代码中都使用了术语块和段。
在讨论这个领域时,记住视频下载实际上是一系列请求和响应,而不是持续不断的媒体流,这很有用。
要更早地开始解码,您通常必须请求视频的较小“片段”(试图避免绊倒术语......)。
为了可解码,视频片段通常需要从不引用任何先前帧的帧开始 - IDR 帧或流访问点 (SAP)。
查看 ExoPlayer 本身,您可以设置每个块可以下载的段数(Exoplayer 术语,用于您下载的视频的位) - 查看“DefaultDashChunkSource”中的“maxSegmentsPerLoad”属性:https://github .com/google/ExoPlayer/blob/bd54394391b0527893f382c9d641b8a55ffca765/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashChunkSource.java
但是,我认为这与您正在寻找的相反 - 您想要请求一小段视频 - 例如子片段而不是整个片段。
为此,您很可能希望查看为 DASH 和 HLS 引入的新低延迟机制 - ExoPlayer 增加了对这些机制的支持,并且有一个公共设计文档提供了对背景和方法的非常好的解释(链接正确)在撰写本文时 - 原始 ExoPlauer git 问题也供参考 - https://github.com/google/ExoPlayer/issues/4904):
本文档中的图表很好地解释了它,但对您的问题的简短回答是,是的,这种方法确实允许下载和播放更小的“片段”视频,并且确实有助于视频开始时间。
推荐阅读
- unity3d - vuforia unity 场景加载空白
- javascript - 选择列表过滤json数据
- ios - css Flip 在 iphone 8 safari 上不起作用
- html - 浏览器引擎如何工作?
- crystal-reports - 我可以将 Telerik 报告中的报告转换为任何其他报告服务吗
- php - 未捕获的 ArgumentCountError:函数 quote_smart() 的参数太少,已通过 1 个
- c# - 在 WPF 中单击时更改圆形按钮的颜色
- react-native - React Native - Ref seems to be undefined
- arrays - 使用纯 JS 或 Lodash 基于 Array 对集合键进行排序
- oracle - Oracle 12c - 自行编译的软件包