OpenMAX (OMX) 框架
本文分为两个部分进行讲解 Codec 部分中的 AwesomePlayer 到 OMX 服务前面介绍了 NuPlayer 最终解码都会到达 OMX 框架,也就是 OpenMAX 框架,本文开始分析编解码部分中的 AwesomePlayer 到 OMX 服务过程,也就是开启 OpenMAX 准备相关内容。Android 系统中用 OpenMAX 来做编解码,Android 向上抽象了一 层 OMXCodec,提供给上层播放器 AwesomePlayer 使用。同时有一个 IOMX 接口,在 ACodec 中可以通过 IOMX 调用 OpenMAX 组件。播放器中音视频解码器 mVideoSource、 mAudioSource 都是 OMXCodec 的实例。OMXCodec::Create 是解码器初始化的入口。OMXCodec 通过 IOMX 依赖 Binder 机制获得 OMX 服务,OMX 服务才是 OpenMAX 在 Android 中的实现。
OpenMAX 与 StageFright 框架层级的关系 StageFright 框架通过 OpenMAX 与硬件层进行通信,图 1 是 OpenMAX 和 StageFright 的 层级关系图。在图 1 中可以看到,StrageFright 层共有两路到达 OpenMAX 框架° 一路是通过 NuPlayer 到达 ACodec 类,然后直接调用 OMX IL Core 中的接口。另一路是通过 StagefrightPlayer 到 AwesomePlayer,再到达 0MXCodec 类,然后调用 OMX 组件接口进行数据传输。在以前的 AwesomePlayer 中,音频和视频数据会到 OMXCodec 中寻找对应的解码器进行 解码,如图 2 所示:IOMX 和 OMX 组件通过 Binder 通信,中间还涉及 OMXClient。OMX 中的 OMXNodelnstance 负责创建并维护不同的实例,这些实例是根据上面的需求创建的,以 Node 作为唯…标识。这样播放器中的每一个 OMXCodec 在 OMX 服务器端都有了自己对应的 OMXNodelnstance 实例。OMXMaster 维护底层软硬件解码库,根据 OMXNodelnstance 中想要 的解码器来创建解码实体组件。
OpenMAX 和 StageFright 的层级关系图
AwesomePlayer 与 OMX 的关系
版权声明: 本文为 InfoQ 作者【程思扬】的原创文章。
原文链接:【http://xie.infoq.cn/article/c030930bdae7af06513254071】。文章转载请联系作者。
评论