付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】Android音频开发(5):音频数据的编解码
前面四篇文章分别介绍了音频开发必备的基础知识、如何采集一帧音频、如何播放一帧音频、如何存储和解析wav格式的文件,建议有兴趣的小伙伴们先读一读,本文则重点关注如何对一帧音频数据进行编码和解码。1.Android官方的MediaCodecAPI首先,我们了解一下Android官方提供的音频编解码的API,即MediaCodec类,该API是在Andorid4.1(API16)版本引入的,因此只能工作于Android4.1以上的手机上。1.1MediaCodec基本介绍(1)提供了一套访问Android底层多媒体模块的接口,主要是音视频的编解码接口(2)Android底层多媒体模块采用的是OpenMax框架,任何Android底层编解码模块的实现,都必须遵循OpenMax标准。Google官方默认提供了一系列的软件编×××:包括:OMX.google.h364.encoder,OMX.google.h364.encoder,OMX.google.aac.encoder,OMX.google.aac.decoder等等,而硬件编解码功能,则需要由芯片厂商依照OpenMax框架标准来完成,所以,一般采用不同芯片型号的手机,硬件编解码的实现和性能是不同的(3)Android应用层统一由MediaCodecAPI来提供各种音视频编解码功能,由参数配置来决定采用何种编解码算法、是否采用硬件编解码加速等等1.2MediaCodec核心原理我不准备详细介绍MediaCodecAPI的每个函数是怎么用,示例代码大家可以在后面给出的资源链接中查看和学习。这里我准备重点介绍一下MediaCodec的核心工作原理,因为只有搞清楚了这一点,你才会明白为什么MediaCodecAPI提供的接口是这个样子的。MediaCodec使用的基本流程是:-
createEncoderByType/createDecoderByType
-
configure
-
start
-
while(1)
{
-
dequeueInputBuffer
-
queueInputBuffer
-
dequeueOutputBuffer
-
releaseOutputBuffer
}
-
stop
-
release由此可以看到,Buffer队列的操作是其最核心的部分之一,关于MediaCodec的Buffer队列,示意图如下:MediaCodec架构上采用了2个缓冲区队列,异步处理数据,下面描述的Client和MediaCodec模块是并行工作的(注:这里的Client就是指“开发者,API的使用者”):(1)Client从input缓冲区队列申请emptybuffer[dequeueInputBuffer](2)Client把需要编解码的数据拷贝到emptybuffer,然后放入
input
缓冲区队列[queueInputBuffer]
(3)MediaCodec模块从input
缓冲区队列取一帧数据进行编解码处理(4)编解码处理结束后,MediaCodec将原始数据buffer置为empty后放回input缓冲区队列,将编解码后的数据放入到output缓冲区队列(5)Client从output缓冲区队列申请编解码后的buffer
[dequeueOutputBuffer](6)Client对编解码后的buffer进行渲染/播放(7)渲染/播放完成后,Client再将该buffer放回output缓冲区队列[releaseOutputBuffer]MediaCodec在架构上,其实是采用了一种基于“环形缓冲区”的“生产者-消费者”模式,它设计了2个基于idx序号的“环形缓冲区”,注意,是2个,一个在input端,一个在output端。我曾经在Github上分享过一段LinuxC代码,名叫:“rw_queue”,就是这种环形缓冲区的简化版,大家有兴趣可以看看,地址:/Jhuster/clib/tree/master/rw_queue基于idx的环形缓冲区的总体示意图如下,图中,wp代表“写指针”,指向的是“emptybuffer”,而rp代表“读指针”,指向的是“filledbuffer”:“生产者”和“消费者”其实是共用这一个缓冲区队列,“生产者”负责从队列中取出未使用的Buffer,填入数据,然后放回队列,“消费者”则负责取出填入数据后的Buffer,进行处理,处理结束后,再把Buffer标记为“空”,退回到队列中去以供“生产者”继续填充数据。在input端,“Client”是这个环形缓冲区“生产者”,“MediaoCodec模块”是“消费者”。在output端,“MediaoCodec模块”是这个环形缓冲区“生产者”,而“Client”则变成了“消费者”。这就是其核心的工作原理,其实并不复杂,大家静下心来,很快就能理解其中的奥妙。1.3
参考资源关于MediaCodec的示例代码,网上其实也很多了,我就直接给出一些个人觉得不错的链接,有兴趣的小伙伴们可以去研究一下。(1)Android官方文档:《MediaCodec》(2)《AndroidMediaCodecstuff》(3)《HWEncoderExperiments》(4)一些开源的播放器Android源码,如VLC、ijkplayer2.第三方音频编解码的库官方的MediaCodecAPI虽然支持硬件编解码加速,但是问题和局限还是很多的,一方面是只能在Android4.1以上机型上才能使用,另一方面,由于Android手机种类繁多,厂商对底层源码的修改各不相同,导致MediaCodecAPI在实际使用中,会遇到很多坑,有很多兼容性的问题,因此,我们也可以考虑采用第三方的编解码库。这里,我简单推荐几款第三方音频编解码库(可以移植到Android平台的),大家可以直接去官网或者项目主页了解其详细信息。(1)opus编解码库很喜欢opus,低码率下opus完胜曾经优势明显的HEAAC,我曾经用它实现了一款Android局域网的VoIP网络电话应用:“飞鸽电话”,效果很不错。opus官网地址:注:如今Android5.0已经官方支持opus格式了,关于Android支持的多媒体格式列表可以查看Androiddeveloperguide:《SupportedMediaFormats》(2)Speex编解码库老牌的音频处理库,不仅是编解码,还提供了包括音频去噪、回声消除、静音检测等功能,官网地址:(3)ffmpeg大名鼎鼎的ffmpeg肯定不能错过,官网:(4)AndroidAACEncoder一款轻量级的Androidaac编码库:/timsu/android-aac-enc(5)opencore-amr-android从opencore抽取出来的amr编解码库,地址:/kevinho/opencore-amr-android(6)iLBC-AndroidiLBC是著名的WebRTC项目的音频编解码模块,iLBC-Android是从中抽取iLBC模块移植到Android平台的个人项目,地址:/lukeweber/iLBC-Android关于第三方编解码库就简单介绍到这里了,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 痛风合并症治疗指南2026
- 广东省2026年第一期电力交易员中级工能力水平评价考试(电力工程造价管理)模拟试题
- 2026年浙江省工业设计职业资格考试(工业设计综合知识)综合练习题及答案
- 第2课 丁香结(第1课时)教学设计2025-2026学年统编版六年级上册语文
- 2026年四川省交通工程职称评审理论测试(道路与桥梁工程-运营养护)(中、高级)练习题及答案
- 2026年劳动保护知识竞赛试题及答案
- 2026年湖北省襄阳市农业专业技术职务水平能力测试(农学)综合试题及答案
- 2026年湖北省十堰市专业技术职务水平能力测试(农学)训练题及答案
- 【备考2026】河南省中考模拟数学试卷4(含解析)
- 肝性脑病诊疗专家共识(2025版)
- 2026年辽宁锦州海通实业有限公司计划招录28人笔试备考试题及答案详解
- 《煤矿重大事故隐患判定标准》(2026版)解读
- 浙江省温州市瑞安市2024-2025学年六年级下学期语文期末试卷(含答案)
- 激励相容设计
- 天津交通数字科技有限公司招聘笔试题库2026
- 2026年4月自考14492学前儿童发展的观察与评价试题
- 2026人教版三年级下册道德与法治期末复习知识点总结梳理+教材问答解答
- 2025-2030中国大气等离子系统行业市场发展趋势与前景展望战略研究报告
- 2026年北京市西城区初三一模英语试卷(含答案)
- 办公室消防安全操作手册
- 医院基建委员会工作制度
评论
0/150
提交评论