写点什么

OpenMAX (OMX) 框架

作者:程思扬
  • 2022 年 6 月 12 日
  • 本文字数:683 字

    阅读完需:约 2 分钟

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 的关系

发布于: 刚刚阅读数: 3
用户头像

程思扬

关注

会的越多,不会的越多 2022.01.03 加入

还未添加个人简介

评论

发布
暂无评论
OpenMAX (OMX)框架_音视频_程思扬_InfoQ写作社区