默认情况下,Android 不支持许多媒体文件格式(如 .mkv 等文件)。但是像 MXPlayer 和 MoboPlayer 这样的播放器可以让你播放这样的文件。这些应用程序如何工作? 是否有任何编程教程或文章解释它是如何完成的?
最佳答案
Android 默认不支持所有媒体格式。因此,为了支持不受支持的格式,像 MoboPlayer 这样的应用程序通过 JNI 使用 Java 和 native 代码的组合来执行标准的媒体播放器任务。
要了解更多信息,让我们看看媒体播放器如何播放媒体文件,以及 MoboPlayer 如何执行这些操作,就像 Android 中的应用程序一样。
媒体播放器的典型任务
播放器需要执行以下任务 (a) 解复用文件格式并提取视频/音频 (b) 解码视频和音频 (c) 显示视频并播放音频。让我们考虑一下在像播放器这样的 MoboPlayer 的情况下如何处理这三个区域。
文件格式解复用
默认情况下,Android 不支持所有文件格式容器。例如,不支持 ASF(WMV 文件的文件格式)。因此,玩家需要拥有自己的分路器来完成这项工作。 libavformat(由 FFMPEG 使用)是领先的开源多路分解库。
视频/音频解码
libavcodec(由 FFMPEG 使用)是一个领先的开源解码器库,可以解码解复用流并生成未压缩的原始输出帧。因此它经常被像 MoboPlayer 这样的播放器使用。
视频展示
显示视频有两个选项。播放器使用 SurfaceView
缓冲区或 OpenGL 加速缓冲区。 Android 将 java Surface 对象(底层 Surface Flinger 对象的抽象)转换为名为 NativeWindow
的内部 native 对象,然后 native 代码可以访问该对象。
从 ICS (Android 4.0) 开始,Android 也提供对 OpenGL 加速缓冲区(SurfaceTexure
和 TextureView
)的访问。这些也可用于显示视频。
音频播放
播放器可以直接与Java层提供的AudioTrack
对象交互,播放解码后的音频样本。
关于android - MXPlayer 和 MoboPlayer 等 Media Player Android 应用程序如何播放不受支持的文件格式(如 MKV)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9654714/