android - MXPlayer 和 MoboPlayer 等 Media Player Android 应用程序如何播放不受支持的文件格式(如 MKV)?

标签 android video codec mkv

默认情况下,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 加速缓冲区(SurfaceTexureTextureView)的访问。这些也可用于显示视频。

音频播放

播放器可以直接与Java层提供的AudioTrack对象交互,播放解码后的音频样本。

关于android - MXPlayer 和 MoboPlayer 等 Media Player Android 应用程序如何播放不受支持的文件格式(如 MKV)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9654714/

相关文章:

javascript - 自动提取的 YouTube 视频无法加载到精美的盒子中

shell - FFMPEG - 连接 2 个 MP4 文件,一个有视频和音频,另一个只有音频

Android 音频编解码器支持

android - DataSource.Factory 的创建方法没有得到调用

android - 测试每月应用内订阅

javascript - HTML 视频在 svg 中的 foreignObject 中不可见

signal-processing - RaptorQ 开源实现

windows - 使用什么编解码器/格式来实现最快的解码?

android - 如何将数据更改从堆栈中的上层 Activity/fragment 传播到堆栈中该类型的所有其他 Activity/fragment

android - @Parcelize 在多平台项目中