导读: 随着云信 RTC 业务的不断推进, RTC 多媒体引擎中引入的算法越来越多,比如视频的人脸检测、美颜、CNN 基础库,音频的回音消除、啸叫检测、语音增强等。这些算法的代码跟 WebRTC 代码高度耦合,并且不同算法接口不统一,很容易造成算法集成效率低、移植困难、SDK 包体积不断变大等诸多问题。我们通过设计音视频算法插件化方案,以解决上述问题。
文 | Iven
网易云信
OMX概述
OpenMAX(Open Media Acceleration)开放多媒体加速层,是一个免费并且跨平台的多媒体应用标准,由 Khronos 组织开发维护**。为多媒体编解码、图形库和其他用于音频、视频、图像、语音等算法定义一个通用的规范**,让应用程序的开发者更专注于产品上层应用的开发,而不用花更多的时间在重写通用函数上。OMX 已经在多个媒体框架中应用, 如 ffmepg、gStreamer、Android 系统的 stagefright 多媒体框架等。
OMX 框架自上而下包含了应用层(Application Layer,AL)、集成层 (Integration Layer,IL)、开发层(Development Layer,DL)。使用 OMX 框架时, 可以根据实际需要,三层同时实现,也可以只实现其中某一层。
应用层(OpenMax AL)
这一层是多媒体应用和多媒体中间层的标准接口,它使得多媒体应用在多媒体接口上具有可移植性。
OpenMAX AL 层是 OpenMAX 规范 API 集的最上层接口,对于上层多媒体应用的开发只需要关注 OpenMAX AL 层的接口。实际由于应用层业务的多样性,很少会直接用这一层的标准 API 来构建应用。
集成层(OpenMax IL)
该层使多媒体应用和多媒体框架可以以统一的方式访问多媒体编解码组件和底层组件,为用户屏蔽了底层的细节。
每个组件及其相关的具体实现都被封装在组件接口的内部。OpenMAX IL API 允许用户去加载、控制、连接及卸载各独立的组件。对多媒体数据的处理功能进行系统级抽象,以解决许多截然不同的媒体系统之间的可移植性问题。这种极具灵活性的内核结构使得集成层能够很容易的实现几乎所有的多媒体应用情形,并且能够很好的与现有的基于图像的多媒体框架相结合。
OpenMax IL 主要概念
IL Client
Open MAX IL 应用程序接口的调用者被称为 IL 客户端,访问 IL 内核或 IL 组件的软件层,是一个典型的功能块,如多媒体框架(GStreamer)、Open MAX AL 或应用程序。
IL 客户端与 Open MAX IL 内核进行交互,利用 IL 内核加载和卸载组件、在组件间建立直接通信以及获得组件方法的入口。