华清远见系列图书
Android多媒体编程从初学到精通
苗忠良 宛斌 等编著
ISBN 978-7-121-12532-4 2011年5月出版
定价39.00元
16开
316 页
宣传语
深入浅出,依靠深厚行业经验讲透技术原理
循序渐进,详解典型应用案例提升实战能力
内 容 简 介
本书主要围绕着Android多媒体编程进行,纵向上,从共享内存、IPC通信、HAL、原生服务、JNI调用,以及多媒体的图像、音频、视频框架等多个层次和子系统着手;横向上,贯穿了移动互联网、Android体系应用框架、OpenMAX多媒体框架、渲染机制等方面,深入浅出地介绍了开发多媒体应用需要了解和掌握的多媒体框架及相关知识。涉及Android多媒体编程的所有主要内容。
本书内容翔实、分析深刻,是Android学习多媒体编程不可多得的资料,可以作为IT相关专业本科生和研究生,以及嵌入式领域的初、中级软件工程师的参考读物。
前 言
管理学大师Peter F. Drucker在其名著《卓有成效的管理者》中曾经说道“心智决定视野,视野决定格局,格局决定命运,命运决定未来”。对于一个人或者企业的发展而言,现实中也确实如此,能够拥有多宽广的视野,就能拥有多宽广的舞台,也就能拥有做出多大成就的机会。
随着移动通信的发展,尤其是3G技术的逐渐普及,我们的生活必将再次发生重大的变化,但3G究竟是什么,这是个重要而又令人迷茫的话题。仅从技术上讲,3G意味着更高的带宽、更快的传输速率,也意味着固定网络和移动网络在基于IP这样的传输技术上的无缝融合,计算机世界和电信世界之间的鸿沟因此变得逐渐消融,移动互联网的概念已经呼之欲出;从民生而言,3G意味着人民的生活逐渐跨越以往无法随时、随地、随心所欲地进入互联网世界的障碍,向个人通信的终极理想又迈进了坚实的一步。从行业而言,传统的以语音业务为中心的产业模式比较发生改变,通信的目的将不再仅是满足通话的需要,将更多地围绕生活、工作、学习、娱乐、医疗等内容而开展。从单纯的语音通话到满足人们随心所欲的个性化交往需求,IT界最为重要的一次产业变革已经徐徐拉开序幕。
具体到移动终端,如果说2G时代的多媒体手机意味着通信和消费电子融合的话,那么在3G时代,移动终端已经逐渐成为以计算机、通信、消费电子、内容为主的“4C”融合的最佳载体,成为我们生活中不可缺少的一部分,辅助人们完成生活、工作、学习、娱乐、保健医疗等诸多方面的诸多内容。另外随着3G移动终端的逐渐普及,基于3G的服务也将产生爆发式的增长,技术必然推动生活,生活又反过来推动技术的进步,为技术创造需求,从而极大地改变我们目前的生活现状。
建立终端竞争力的立足点也将从1G时代的语音质量到2G时代的工业设计、人机交互向着内容和服务转变,谁能把握这一趋势,谁就将在即将来临的下一个计算革命中占领先机。
2007年6月,美国Apple公司将移动电话、触摸屏、电子邮件、网页浏览、搜索和地图功能等诸多互联网功能融于通信设备的IPhone手机推向市场。伴随着这一革命性的移动终端产品,Apple公司本着对“4C”融合理念的深刻理解,随后推出了相应的应用程序商店,就此拉开了以“软件、服务”为中心的移动终端生态系统序幕,开启了新的移动计算革命。
传统的以硬件销售为中心的移动终端生态系统,正在加速朝着以“软件、服务”为中心的移动终端生态系统转变。
2007年10月,Nokia以81亿美元收购数字导航公司Navteq,2007年11月,Nokia宣布从以移动终端为主的公司转型为互联网服务公司,同时发布了全新的互联网服务品牌“Ovi”。随后动作频频,于2008年1月,Nokia耗资1.53亿美元收购著名开源软件公司Trolltech,2008年6月,Nokia以2.64亿欧元收购Symbian公司52%的股权,将Symbian OS完全置于自己的掌控之下,并随后将之完全开源,同时在在线媒体服务、社交网络等领域,Nokia也并购了多家小型公司,目前Nokia的互联网战略已经逐渐清晰,即基于手机地图、导航和位置感知的社交网络已经成为Nokia的战略核心。以Linux和Symbian的双操作系统平台构成了产品的高、低端搭配。
作为互联网时代的搜索巨头,Google本质上仍然是一家媒体公司,如何将自己的业务扩展到更多的用户群,通过在更大的用户群中为自己的客户推广产品,拓展自己的盈利增长点,从而进一步提升自己的盈利水平,迎合投资者的期望,Google显然深谙此道并勇于开拓。
2005年8月,Google收购了Android公司,Android公司是一家基于Linux内核,通过优化的Java为用户提供嵌入式平台的公司。通过特定的优化,在嵌入式终端上,极大地提高了Java的运行效率,实现了Motorola想做而没有实现的事。2008年8月,Google联合众多厂商发布了Android 1.0操作系统,从而开始了自己在移动互联网领域的精彩演绎。由于其开源、开放特性,Android迅速得到众多终端厂商的欢迎和应用,权威市场研究机构IDC预计,到2013年,Android将成为全球仅次于Symbian 的第二大智能手机操作系统。
由于Android在开源、技术等各方面的优势,Android受到了业界巨头如Lenovo、Dell、SamSung、LG、HTC、Sony Ericsson、Qualcomm、Marvell、Nvidia等的青睐。甚至山寨主们也情意款款。2011年必将成为Android历史上不可忘却的一年。
当然Android并非一款专用于移动终端的软件平台,还适用于平板电脑、机顶盒、高清电视等其他的嵌入式产品。尤其是平板电脑,在2010年的后半年,Android平台电脑开始发力,而伴随着2011年专为平台电脑而研发的Android 3.0平台的推出,Android平板电脑已经迎来了一个爆发的时刻。特别值得一提的是,在CES 2011上,王者归来的Motorola推出的XOOM平板和国内巨头Lenovo推出的LePad均给业界留下来深刻的影响,如何化解传统移动终端在办公、输入等方面的不足,推动移动终端向着真正的移动计算发展。Motorola和Lenovo从不同角度进行了卓有成效的探索。
考虑到Android平台的庞大精深,除了平台框架以外,在应用层面大致可分为传统应用如通话、多媒体应用如音乐播放器、网络应用如浏览器等,非一本小书所能包含,在本书中,笔者将只侧重于其中的多媒体内容,试图从底层到应用,逐步为大家揭开其神秘的面纱。
“道可道非常道,名可名非常名”,行业的长久变化规律殊难预料,20年前,当基于模拟技术的移动电话流行时,人们绝对无法想象,今天的移动终端领域会如此丰富多彩,承载了如此众多的生活功能。
但在较短的一个时期内,我们仍然有机会凭着对行业的较好理解来把握预期,在技术的约束中,放飞自己的思想,在新的产业变革来临之际抓住机遇,在属于自己的舞台上展现英姿,让生命之花开的更加璀璨。
适用对象
从事嵌入式软件开发的、渴望了解新生事物的初、中级软件工程师和在校本科生、研究生。
预备知识
Java SE、Ubuntu Linux等的基本知识和对嵌入式软件的兴趣和热情。
本书的组织
本书主要分为3部分。第一部分为Android的基础知识,包括第1~3章,介绍了移动互联网和Android的发展状况,以及Android开发方面的基础知识,同时对于多媒体开发涉及的多核通信进行了简要的介绍;第二部分为多媒体框架部分,包括第4~8章,针对Android采用的OpenCORE多媒体框架和OpenMAX引擎做了较详细的介绍,并针对音频、视频、图像的编/解码和原生服务分别进行了详细的阐述,同时针对Android的渲染机制和硬件加速等进行了较深入的剖析;第三部分为多媒体应用部分,包括第9~11章,针对常用的多媒体接口进行解说和实例分析。
本书的写作在内容主体上遵循自下而上的过程,从多核通信、多媒体引擎、原生服务到多媒体应用依次展开。读者可以根据自己的习惯,确定自己阅读的顺序。
致谢
苗忠良要感谢的话:
首先,非常感谢我的爷爷、爸爸、妈妈,是他们的辛勤培养造就了我今天的成就,没有他们,就没有我今天的一切,衷心的祝福他们永远快乐、健康长寿!特别感谢我的姐姐、姐夫和妹妹、妹夫,作为家中的独子,在照顾长辈方面我出力不多,是他们的付出,让我能够放心在外拼搏;另外还要感谢我的几个可爱的外甥、外甥女们,谢谢你们带给我的快乐!
其次,感谢我的夫人谌双巧女士在本书写作期间给予我的大力支持,写作是件需要巨大精力投入的事情,能够容忍我投入大部分的业余时间来完成本书的写作而不抱怨我无法抽出时间陪她,让我十分感动,本书的出版包含着她的一份极大的功劳。我的岳父岳母都是很开明的人,十分感谢他们对我生活、写作和工作上的关心和支持。
两位作者共同要感谢的话:
首先,需要感谢的是在开源领域持续奋斗的人们,九层之台,起于垒土,没有他们的辛勤努力,本书也就失去可以撰写的基础。另外,笔者在撰写本书过程中,参考了网上一些朋友的见解,在此一并表示感谢!
其次,要感谢的是电子工业出版社的编辑和策划们,尤其是责任编辑胡辛征先生,正是胡辛征先生的不断鼓励和指导,才有了本书的最终问世,在本书撰写过程中,胡辛征先生提出了不少真知灼见。很高兴能和电子工业出版社的朋友们一起推动本书的出版。
吾生亦有涯,而知亦无涯,在学术的道路上充满棘荆,需要不断探索,笔者愿与诸君一道去努力追求!
笔者
2011年02月于张江
无为斋
目 录
第1章 Android概述1
1.1 移动互联网2
1.1.1 “4C”融合3
1.1.2 物联网4
1.2 发展概况4
1.2.1 OHA联盟5
1.2.2 Android现状6
1.2.3 网络资源7
1.3 开发环境8
1.3.1 基于SDK的开发环境8
1.3.2 基于源代码的开发环境12
1.4 体系架构12
1.4.1 核心服务13
1.4.2 原生服务15
1.4.3 原生库17
1.4.4 运行时组件18
1.4.5 硬件抽象层19
1.4.6 Linux内核19
第2章 Android基础26
2.1 Hello World27
2.2 应用框架33
2.2.1 应用组件33
2.2.2 Activity和Tasks55
2.2.3 进程和线程55
2.2.4 组件生命周期56
2.3 启动过程58
2.3.1 init.rc初始化脚本59
2.3.2 服务管理器65
2.3.3 Dalvik虚拟机67
2.3.4 实时进程71
2.4 进程间通信77
2.4.1 ONC RPC远程调用78
2.4.2 IBinder通信机制79
2.5 交互过程80
2.5.1 Java JNI原生接口81
2.5.2 直接调用81
2.5.3 原生服务调用82
2.5.4 原生守护进程调用82
2.6 性能优化83
2.6.1 资源读取83
2.6.2 DEX文件和APK加载84
2.6.3 虚拟机和平台实现86
第3章 多核通信88
3.1 共享内存89
3.1.1 同步与互斥89
3.1.2 SMD数据通信90
3.1.3 SMSM状态通信96
3.2 过程调用98
3.2.1 RPC路由器99
3.2.2 RPC管道102
第4章 多媒体框架106
4.1 框架概述107
4.2 OpenMAX接口规范107
4.2.1 OpenMAX AL应用层108
4.2.2 OpenMAX IL集成层108
4.2.3 OpenMAX DL开发层113
4.3 OpenCORE框架113
4.3.1 内容策略管理114
4.3.2 多媒体引擎123
4.3.3 文件解析和组合130
4.3.4 编解码器133
4.3.5 OSCL底层移植139
4.3.6 A/V同步143
4.4 Stagefright框架145
4.5 元数据147
4.5.1 色彩模式147
4.5.2 脉冲调制148
第5章 图像框架149
5.1 Camera拍照框架150
5.1.1 Camera原生服务150
5.1.2 Camera的HAL接口156
5.1.3 Camera参数的设置160
5.2 重要数据结构162
第6章 音频框架164
6.1 音频管理框架165
6.1.1 Audio Flinger166
6.1.2 Audio Policy Service177
6.2 音频编解码过程180
6.2.1 AMR的编码过程181
6.2.2 AMR的解码过程188
6.2.3 MP3的解码过程193
第7章 视频框架197
7.1 Camera录像框架198
7.2 媒体播放服务202
7.3 视频的编解码过程205
7.3.1 视频的编码过程206
7.3.2 视频的解码过程209
第8章 渲染机制213
8.1 Surface Flinger管理器214
8.1.1 Layer的四种模式215
8.1.2 Surface渲染管理220
8.2 Skia渲染223
8.2.1 Skia图形渲染224
8.2.2 Skia图像渲染226
8.2.3 Skia UI控件234
8.3 OpenGL ES渲染235
8.4 硬件加速238
8.4.1 Overlay239
8.4.2 帧缓冲240
8.4.3 MDP242
第9章 图像应用243
9.1 基本接口244
9.2 图像的处理247
9.3 动画的处理254
第10章 音频应用262
10.1 基本接口263
10.2 Audio Manager264
10.3 音频记录的处理266
10.4 音频播放的处理267
10.5 语音识别277
10.6 SIP服务281
第11章 视频应用286
11.1 视频记录287
11.2 视频播放290
跋295
后记298
参考文献304


更多相关文章

  1. 微信Android终端SDK新手使用指南
  2. 深入理解android之IPC机制与Binder框架
  3. Android EventBus框架入门
  4. Antrus – 我搞的一个Android下的MVC开源框架
  5. Android开发——Android搜索框架(一)
  6. Android Junit 单元测试、异步测试方法简介及异步测试框架指南
  7. Android UI框架 Android UI控件类简介 android5大布局详解
  8. 一个轻量级、高可用性的 Android 版本更新框架

随机推荐

  1. Android获取设备状态栏status bar高度的
  2. android文件缓存,并SD卡创建目录未能解决
  3. android布局属性详解
  4. 阻止android软键盘自动弹出
  5. android 中 系统日期时间的获取
  6. gradle 配置文件 build.gradle 属性详解
  7. android开机启动一个Service实例
  8. Android(安卓)格式化内部存储
  9. android 发送自定义广播以及接收自定义广
  10. Android(安卓)获取SD卡路径和判断SD卡是