14

默认情况下,Android 不支持许多媒体文件格式(如 .mkv 等文件)。但是像 MXPlayer 和 MoboPlayer 这样的播放器可以让你播放这些文件。这些应用程序如何工作?是否有任何编程教程或文章解释它是如何完成的?

4

1 回答 1

14

Android 默认不支持所有媒体格式。因此,为了支持不受支持的格式,像 MoboPlayer 这样的应用程序通过 JNI 使用 Java 和本机代码的组合自行执行标准媒体播放器任务。

要了解更多信息,让我们看看媒体播放器如何播放媒体文件,以及 MoboPlayer 类似 Android 中的应用程序是如何执行这些操作的。

Typical tasks of a Media Player

播放器需要执行以下任务 (a) 解复用文件格式并提取视频/音频 (b) 解码视频和音频 (c) 显示视频并播放音频。让我们考虑在类似 MoboPlayer 的播放器的情况下如何处理这三个区域。

File format Demux

默认情况下,Android 不支持所有文件格式容器。例如,不支持 ASF(WMV 文件的文件格式)。因此,玩家需要拥有自己的解复用器来完成这项工作。libavformat(由 FFMPEG 使用)是领先的开源 demux 库。

Video/Audio decode

libavcodec(由 FFMPEG 使用)是领先的开源解码器库,可解码解复用流并生成未压缩的原始输出帧。因此,它经常被 MoboPlayer 等玩家使用。

Video display

有两种显示视频的选项。玩家使用 SurfaceView缓冲区或 OpenGL 加速缓冲区。Android 提供了一个 java Surface 对象(底层表面抛掷物对象的抽象)到一个名为 的内部原生对象NativeWindow,然后可以由原生代码访问。

从 ICS (Android 4.0) 开始,Android 也提供了对 OpenGL 加速缓冲区 (SurfaceTexureTextureView) 的访问。这些也可用于显示视频。

Audio playout

播放器可以直接与AudioTrackJava 级别提供的对象交互以播放解码的音频样本。

于 2012-07-03T15:06:25.923 回答