为什么 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.
最近想了解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.