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加速缓冲区(SurfaceTexure和TextureView).这些也可用于显示视频.
Audio playout
玩家可以直接与AudioTrackJava级别提供的对象进行交互,以播放解码的音频样本.
| 归档时间: |
|
| 查看次数: |
7564 次 |
| 最近记录: |