OpenSL ES与AAudio简单介绍
原因:在耳返功能时,如果使用AudioRecord和AudioTrack进行采集与播放会造成延迟问题,故需要涉及到openSL ES与AAudio的使用。
概况:OpenSL ES与AAudio简单理解为嵌入式跨平台免费的音频处理库,具有高性能,低延迟的特性。AAudio是作为OpenSL ES库的轻量级原生Android替代项。AAudio性能与功能上更加。但是AAudio只有在Android 8.0之后才会引入,而OpenSL ES则在2.3之后就已引入。
音频延迟是指音频信号在系统中传输所需要的时间,有关音频的延迟可以简单分为如下几个情况
音频输出延迟:是指音频样本由应用生成到通过耳机插孔或内置扬声器播放之间经历的时间。
音频输入延迟:是指设备音频输入(如麦克风)接收音频信号到这些音频数据可供应用使用所经历的时间。
往返延迟:是指输入延迟,应用处理时间和输出延迟的总和。
轻触延迟:是指用户轻触屏幕与轻触事件被应用接收到所有经历的时间。
预热时间:是指数据第一次在缓冲区加入队列后到启动音频管道所需要的时间。
以上就是各个环节中可能会存在的延迟时间。针对以上减少延迟时间如下:
减少输入延迟:从音频路径中移除任何不需要的信号处理操作,避免重采样,设置缓冲区大小。
减少输出延迟:提供与设备的最佳采样率和缓冲区大小匹配的音频数据。
减少预热延迟:提前将静音数据缓冲区加入队列。
AAudio:是在Android O(android 8.0)版本中引入的全新Android C API。该API中不包括音频设备枚举,解码等部分功能。支持的样本格式为PCM_16和PCM_FLOAT,而且内部还具有独立的样本转换模块。
OpenSL ES(Open Sound Library for Embedded Systems)无授权费,跨平台,针对嵌入式系统精心优化的硬件音频加速API。Android2.3即开始支持OpenSL ES标准,但是不同的版本支持的方法也不同,故涉及到一些兼容性问题。该模块中不支持音频编解码,支持的样本格式为PCM_16,其他格式不能保证兼容所有平台。
以上两种模块的优势:
1:避免音频数据频繁在natvie层与java层拷贝,提高效率。
2:相比如JAVA api更灵活控制参数。
以上两个模块都可以在NDK安装路径下的platforms文件夹下对应平台中找到对应.so。
针对以上两种模块的调用封装在google提供的Oboe模块中。https://github.com/google/oboe
总结:以上就是简单的针对AAudio于OpenSL ES的简单介绍,具体使用和细节后续补充。
OpenSL ES与AAudio简单介绍相关推荐
- 使用Android高性能音频--OpenSL ES和AAudio
AAudio的概念介绍: AAudio 是作为 OpenSL ES 库的轻量级原生 Android 替代项而开发. 与 OpenSL ES 相比,AAudio API 不仅较小,而且容易使用. AAu ...
- Android 耳返实践 OpenSL ES AAudio Oboe
耳返概述: 耳返主要实现监听的功能,在低延时的情况下可以给主播一个比较真实音频的反馈,在演唱会等专业场景里比较常用. 技术实现上来说就是要时时的把录制进的音频数据立刻播放出去,当然这个过程要低延迟. ...
- Android音视频【十三】OpenSL ES介绍基于OpenSL ES实现音频采集
人间观察 勿再别人的心中修行自己, 勿再自己的心中强求别人. 前言 最近写文章有点偷懒了,离上次写文章大概一个月了. 一般Android音频的采集在java层使用AudioRecord类进行采集. 但 ...
- 【Android 高性能音频】Oboe 播放器开发 ( 为 OpenSL ES 配置参数以获得最佳延迟 | Oboe 音频流 | Oboe 音频设备 )
文章目录 一.获得最佳延迟 二.Oboe 音频流 三.Oboe 音频设备 Oboe GitHub 主页 : GitHub/Oboe ① 简单使用 : Getting Started ② Oboe 全指 ...
- Android音视频学习系列(五) — 掌握音频基础知识并使用AudioTrack、OpenSL ES渲染PCM数据
系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...
- 音视频开发之旅(36) -FFmpeg +OpenSL ES实现音频解码和播放
目录 OpenSL ES基本介绍 OpenSL ES播放音频流程 代码实现 遇到的问题 资料 收获 上一篇我们通过AudioTrack实现了FFmpeg解码后的PCM音频数据的播放,在Android上 ...
- 音频应用(如sip与Voip),编解码API(Ringtone,SoundPool,MediaPlayer),回声消除等(Lame Speex等),OpenSL ES
3套音频播放API:MediaPlayer,SoundPool,AudioTrack. android录音项目,用单例模式集成了record,并实时转码mp3- https://github.com/ ...
- Android直播开发之旅(13):使用FFmpeg+OpenSL ES播放PCM音频
文章目录 1. OpenSL ES原理 1.1 OpenSL ES核心API讲解 1.1.1 对象(Object)与接口(Interface) 1.1.2 [OpenSL ES的状态机制](https ...
- Android音视频学习系列(十) — 基于FFmpeg + OpenSL ES实现音频万能播放器
系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...
最新文章
- angular.foreach 格式
- SAP HANA解决方案设计10问详解
- 矩形嵌套 南阳理工ACM
- 第一周小组博客作业——1701班5组
- PHP 实现冒泡排序
- OpenCV_04 几何变换:图像缩放+图像平移+图像旋转+仿射变换+透射变换+图像金字塔
- 论文浅尝 - ICLR2020 | 具有通用视觉表示的神经机器翻译
- 雷霄骅--H264视频编解码分析--目录转载
- 浅谈Dynamic 关键字系列之三(下):ExpandoObject,DynamicObject,DynamicMetaObject
- (很全面)SpringBoot 使用 Caffeine 本地缓存
- 【干货】基于内容理解的新闻推荐.pdf(附下载链接)
- 解决复制项目后名称不改变的问题:org.eclipse.wst.common.component
- markdown与latex:数学符号远远大于\gg和远远小于书写\ll
- 机器不学习:初识迁移学习
- 利用ENVI自带全球DEM数据计算区域平距高程
- android定时截取屏幕内容,Android 截取手机屏幕两种实现方案解析
- 爱奇艺网络流量分析引擎QNSM及其应用
- WebRTC之beamforming算法
- 【分享】写论文超好用的一些工具
- DeepStream初步学习