首页 > 解决方案 > Exoplayer 在处理(解码)之前是否完全下载了一个块

问题描述

Exoplayer 在处理(解密、解码)之前是否完全下载了一个块。有没有办法在块完全下载之前覆盖它并开始解码/播放。内容是 6 秒块大小的 MPEG-DASH 内容。

我正在使用最新版本的 Exoplayer。我正在尝试改进视频开始时间,从而改进此查询。此外,较小的块大小会影响视频开始时间吗?

标签: exoplayer2.xmpeg-dash

解决方案


我认为当您说块时,您的意思是破折号段 - 术语很重要,因为 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):

本文档中的图表很好地解释了它,但对您的问题的简短回答是,是的,这种方法确实允许下载和播放更小的“片段”视频,并且确实有助于视频开始时间。


推荐阅读