标题：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 World 27
2.2  应用框架 33
2.2.1  应用组件 33
2.2.2  Activity和Tasks 55
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 Flinger 166
6.1.2  Audio Policy Service 177
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  Overlay 239
8.4.2  帧缓冲 240
8.4.3  MDP 242
第9章  图像应用 243
9.1  基本接口 244
9.2  图像的处理 247
9.3  动画的处理 254
第10章  音频应用 262
10.1  基本接口 263
10.2  Audio Manager 264
10.3  音频记录的处理 266
10.4  音频播放的处理 267
10.5  语音识别 277
10.6  SIP服务 281
第11章  视频应用 286
11.1  视频记录 287
11.2  视频播放 290
跋 295
后记 298
参考文献 304