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

use*_*208 12 video android codec mkv

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

Oak*_*tes 12

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对象的渲染(底层表面flinger对象的抽象)到一个被调用的内部本机对象NativeWindow,然后可以由本机代码访问.

从ICS(Android 4.0)开始,Android也可以访问OpenGL加速缓冲区(SurfaceTexureTextureView).这些也可用于显示视频.

Audio playout

玩家可以直接与AudioTrackJava级别提供的对象进行交互,以播放解码的音频样本.

  • OakBytes 是对的。这些播放器使用专有或 FFMPEG 的第 3 方解析器/软件解码器。有的玩家也使用opengl进行展示。他们中的大多数使用 SuraceView 和它的原生对应 NativeWindow 来显示解码的视频。这在没有本机框架的情况下工作并与之平行。因此,moboplayer 还提供了使用软件或硬件解码器的选项。 (2认同)