为什么 Google 的 ExoPlayer 不再使用 Android 低级 api MediaExtractor?

Why Google's ExoPlayer stop using Android low leve api MediaExtractor anymore?

最近想了解ExoPlayer的工作原理,研究了他们的源代码。

在编码/解码部分,我发现 TrackRenderer 包装了来自 MediaCodec class 的低级别 api,并将其用于 decode/encode 数据。

但对于提取部分,我只找到一个 class -> FrameWorkSampleSource.java,它使用低级别 api MediaExtractor,它已被弃用,甚至在 ExoPlayer 2.0 中消失了。

为什么 exoplayer 不使用这种低级别 api 从源中提取数据有什么原因吗?我认为这是在 android 设备中提取媒体数据的唯一方法.....

谢谢

ExoPlayer 使用用 Java 编写的自定义提取器,请参阅 this package

至于为什么:

There are a few reasons:

  • MediaExtractor uses a threading model that's not well suited to ExoPlayer.
  • It also doesn't provide as much control over buffering as we'd like.
  • Implementation of the extractors under MediaExtractor varies between versions of Android.
  • Extractors under MediaExtractor lack some functionality that we're able to support in ExoPlayer extractors.

https://github.com/google/ExoPlayer/issues/2580