描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787512443174
由表及里,洞悉脉络:深入探索Android12多媒体核心
寻根溯源,揭其奥秘:以实例为引,细致讲解实战开发经验
串联知识,联网成体:由点及面,帮您全面理解相关技术
积学储能,飞跃成长:助您日益精进,成为一专多强的开发者
本书是一本 Android系统多媒体工程师的实战手册,基于 Android 12版本源码讲解,从结构上将Android系统多媒体分为5章进行介绍,包括第1章 Android系统环境篇、第2章音频篇、第3章相机篇、第4章编解码篇、第5章图形篇。
本书旨在帮助读者系统、深入、快速学习 Android系统多媒体模块,并且将其用于工作实战、兴趣研究等。本书将每个多媒体模块多余的层层封装全部剥离,去掉 Runtime和Java层的干扰,以 C 实战示例展示每个多媒体模块最重要、最本质的内容,帮助读者以最短的时间在模块之间横向迁跃学习,以应对时代快速变化产生的新需求。
本书适用于 Android系统及相关技术开发人员。
第1章 Android系统环境篇
1.1 WSL系统介绍与安装过程
1.1.1 WSL虚拟化架构介绍
1.1.2 WSLg图形化环境安装
1.2 编译 Android系统源码
1.2.1 下载、编译 Android
12源码
1.2.2 下载、编译 Android
12内核源码
1.2.3 介绍几种刷机模式
1.2.4 刷 机
1.2.5 运行 Android设备
第2章 音频篇
2.1 音频基础知识
2.1.1 奈奎斯特采样定律
2.1.2 ADC
2.1.3 DAC
2.1.4 PCM
2.1.5 DAI
2.1.6 ASLA
2.1.7 采 样
2.1.8 量 化
2.1.9 编 码
2.1.10 音频帧
2.1.11 采样率
2.1.12 通道数
2.2 常见的音频通路介绍
2.2.1 音频播放
2.2.2 音频录音
2.2.3 打电话
2.2.4 接电话
2.2.5 蓝牙打电话
2.2.6 蓝牙接电话
2.3 AudioServer 初始化过程
2.3 .1 AudioServer 服务创建过程
2.3 .2 AudioServer 进程启动过程
2.4 AudioFlinger 服务注册过程
2.4.1 AudioFlinger: :instantiate() 实例化过程
2.4.2 AudioFlingerServerAdapter 实例化过程
2.4.3 AIDL 自动生成Server 端返回值生成规则
2.5 AudioPolicyService 服务注册过程
2.6 AAudioService 服务注册过程
2.7 OpenSL ES 原理与实战
2.7.1 Android 平台 OpenSL ES 支持功能
2.7.2 OpenSL ES 关键数据结构
2.7.3 OpenSL ES 引擎播放过程
2.7.4 OpenSL ES 引擎解码音频实战
2.7.5 OpenSL ES 引擎录音过程
2.7.6 OpenSL ES 引擎录音实战
2.8 AAudioService 原理与实战
2.8.1 Android 平台 AAudio 支持的功能
2.8.2 AAudio 引擎播放音频过程
2.8.3 AAudio 引擎独占模式播放 PCM 实战
2.8.4 AAudio 引擎录音实战
2.9 Oboe 原理与实战
2.9 .1 Oboe 使用 AAudio 引擎
2.9 .2 Oboe 使用 OpenSL ES 引擎
2.9 .3 Oboe 播放音频实战
2.9 .4 Oboe 录音实战
第3 章 相机篇
3 .1 相机基础知识
3 .1 .1 PAL 制式
3 .1 .2 NTSC 制式
3 .1 .3 逐行扫描
3 .1 .4 隔行扫描
3 .1 .5 帧
3 .1 .6 场
3 .1 .7 显示分辨率
3 .1 .8 图像分辨率
3 .1 .9 ISO
3 .1 .10 光 圈
3 .1 .11 快 门
3 .1 .12 白平衡
3 .1 .13 RAW 格式
3 .2 Camera 模块层级关系
3 .3 Camera 核心服务一: media.camera
3 .3 .1 init 进程解析cameraserver.rc
3 .3 .2 CameraServer 的启动过程
3 .4 Camera 核心服务二:android. hardware.camera. [email protected]: :ICameraProvider/legacy/0
3 .5 Camera 核心服务三:[email protected]: :ICameraService/default
3 .6 Camera 通过 AIDL、HIDL 与底层通信过程
3 .6 .1 Camera2 到 CameraService 通信过程(AIDL 通信方式)
3 .6 .2 CameraService 到 Camera HIDL 通信过程
3 .6 .3 Camera HIDL 到 HAL 通信过程(HIDL 通信方式)
3 .7 Camera Preview 过程
3 .7.1 Camera Preview 准备阶段之创建与传递Surace 过程
3 .7.2 Camera Preview 之startPreview 过程时序图
3 .7.3 Camera Preview 之创建预览数据流通道过程
3 .7.4 Camera Preview 之获取相机元数据过程
3 .7.5 Camera Preview 之获取预览数据过程
3 .8 Camera 之采集视频 NV21 数据实战
第4 章 编解码篇
4.1 编解码基础知识
4.1 .1 RGB
4.1 .2 YUV
4.1 .3 视频编码
4.1 .4 视频解码
4.1 .5 封装格式
4.1 .6 像 素
4.1 .7 宏 块
4.1 .8 帧
4.1 .9 GOP 序列
4.1 .10 帧内预测
4.1 .11 帧间预测
4.1 .12 IDR 帧
4.1 .13 I 帧、P 帧、B 帧
4.1 .14 PTS
4.1 .15 DTS
4.1 .16 帧 率
4.1 .17 码 率
4.1 .18 刷新率
4.1 .19 位 深
4.1 .20 YUV 常见存储方式
4.1 .21 YUV444、YUV422、YUV420 采样模式
4.2 MediaCodec 模块层级关系
4.2.1 MediaCodec、ACodec、Codec 2.0 关系图
4.2.2 音视频编解码、 封装、 解封装流程
4.3 MediaCodec 核心服务一:android. hardware. media.omx@1 .0: :Omx/default
4.3 .1 Omx 服务加载厂商硬编解码器
4.3 .2 Omx 服务加载软编解码器
4.3 .3 vendor. media.omx 服务查询不到的问题
4.4 MediaCodec 核心服务二:android. hardware. media.omx@1 .0: :IOmxStore/default
4.5 MediaCodec 核心服务三:android. hardware. media.c2@1 .2: :IComponentStore/software
4.6 MediaCodec 视频编码部分
4.6 .1 MediaCodec 创建视频编码器过程
4.6 .2 MediaCodec 配置视频编码器过程
4.6 .3 MediaCodec 启动编码器过程
4.6 .4 MediaCodec 编码输出 H.264 数据过程
4.7 MediaMuxer 之视频封装部分
4.8 NuMediaExtractor 之视频解封装部分
4.9 AAC 音频码流分析
4.9 .1 AAC 格式帧头字段分析
4.9 .2 AAC 格式帧头解析实战
4.10 H.264 视频码流分析实战
4.10.1 H.264 编码格式构成
4.10.2 NALU 头信息结构
4.10.3 有符号与无符号指数哥伦布编解码介绍
4.10.4 零阶无符号指数哥伦布编码和解码示例
4.10.5 零阶有符号指数哥伦布编码和解码示例
4.10.6 解析 H.264 码流的SPS、PPS 实战
4.11 MediaCodec 之音视频编解码实战
4.11 .1 MediaCodec 之 YUV 编码实战
4.11 .2 MediaCodec 之 H.264 解码实战
4.11 .3 MediaCodec 之 PCM 编码实战
4.11 .4 MediaCodec 之 AAC 解码实战
4.12 MediaMuxer 音视频封装与 NuMediaExtractor 解封装实战
4.12.1 MediaMuxer 之 H.264 封装实战
4.12.2 NuMediaExtractor 之 mp4 解封装视频实战
4.12.3 MediaMuxer 之 AAC 封装实战
4.12.4 NuMediaExtractor 之 mp4 解封装音频实战
第5 章 图形篇
5 .1 图形基础知识
5 .1 .1 View
5 .1 .2 Surface
5 .1 .3 SurfaceHolder
5 .1 .4 SurfaceView
5 .1 .5 GLSurfaceView
5 .1 .6 SurfaceTexture
5 .1 .7 TextureView
5 .1 .8 SurfaceFlinger
5 .1 .9 BufferQueue
5 .1 .10 Gralloc
5 .1 .11 HWC
5 .1 .12 EGL
5 .1 .13 EGLSurface
5 .1 .14 OpenGL ES
5 .1 .15 Vulkan
5 .1 .16 VSYNC
5 .1 .17 DRM
5 .1 .18 Fence 同步机制
5 .2 SurfaceFlinger 模块通信关系
5 .3 HWC 服务启动过程
5 .3 .1 第一部分: 加载 HWC 底层库
5 .3 .2 第二部分: HWC 底层库函数创建映射关系
5 .3 .3 第三部分: 将 HWC 底层库能力传给上层
5 .4 SurfaceFlinger 服务启动过程
5 .4.1 第一部分: 服务启动过程
5 .4.2 第二部分: 初始化并设置渲染引擎对象过程
5 .4.3 第三部分: 创建并设置 HWC 客户端对象过程
5 .5 Gralloc 跨硬件申请图形共享 Buffer 过程
5 .6 OpenGL 控制 GPU 合成、 显示过程
5 .6 .1 第一部分:EGL 加载 GPU 通信库过程
5 .6 .2 第二部分: OpenGL 通过 GPU 渲染、 合成过程
5 .6 .3 第三部分:EGL 通过 DRM 显示过程
5 .7 HWC 合成提交 DRM 显示过程
5 .8 图形实战案例
5 .8.1 正常渲染实战
5 .8.2 离屏渲染实战
5 .8.3 Fence 同步机制实战
5 .8.4 OpenGL 渲染nv21 格式视频实战
5 .8.5 ION 跨硬件使用共享内存实战
5 .8.6 映射 GPU 显存实战
5 .8.7 DRM 输出显示实战
Android 系统至今已经迭代到 Android14, 系统代码越来越庞大。 很多工程师刚开始接触到 Android 系统源码, 由于对代码背后的设计框架不了解, 在其中绕来绕去, 往往是一头雾水, 丧失了继续探索的耐心。 市面上缺少针对 Android 系统级多媒体的书籍, 有些开发者开始时只是关注一些细枝末节的东西, 没有找到正确打开 Android 源码路线图的方法, 所以学起来比较痛苦。
Android 系统多媒体模块的复杂度比较高, 每个模块( 例如音频、 相机、编解码等) 都需要一个或多个垂直领域的工程师来开发维护, 这就造成工程师只能垂直专注在某一个模块, 无法快速跨模块上手开发, 因为每个模块之间都有很深的知识壁垒。 特别是对于多媒体领域更是如此, 开发者往往在自己不熟悉的多媒体模块, 一头扎进 Android 源码, 往往是处于一个只见树木、 不见森林的状态, 陷入一种迷茫的状态。
本书旨在解决模块之间快速横跨的问题, 就像要伐倒一棵树, 首先要找到它的根部, 再找到它的树干, 接着是细枝末节, 这才是正确做事的逻辑。而不是先在它的枝叶花费很多时间, 那样往往也没有什么进展。 只有先找到树根和树干在哪儿, 在这个基础上再分析它的细枝末节才会有好的效果。
本书对多媒体每个模块的主线路径进行拆解, 每个模块都是从最核心流程开始讲解, 再到实战应用, 这样更能开拓一个开发者的视野和深度理解Android 系统多媒体模块。
为了满足读者能在 Windows 上开发 Android 源码, 且不用再单独安装虚拟机环境, 第1 章就讲解使用微软在 Windows 10 以上系统提供的 WSL(全称 Windows Subsystemfor Linux) 编译 Android 源码, 并且提供了图形化版本 WSLg( Windows11 才支持 WSLg) , 即在 WSL 中可以运行Linux 图形应用程序。 这样就解决了开发者频繁切换操作系统的烦恼, 同时可以使用Windows 丰富的应用程序和Linux 系统进行开发工作, 可谓是一举两得。
在多媒体模块部分, 先帮读者扫盲, 从基础概念开始, 接着讲解整个模块的架构图, 然后讲解模块的核心服务, 最后讲解代码实战练习, 这样循序渐进便于理解; 同时采用大量架构图、 时序图、 流程图帮助读者看清模块之间的联系, 通过图文结合的方式, 使读者既能从整体把握 Android 系统多媒体的每个模块层次架构, 又能深入主干脉络的核心要点。
目前很多企业为了降本增效而进行裁员, 在这样的环境中, 成为一个一专多能的工程师往往比较受欢迎, 在市场上也更有竞争力。
本书的读者对象如下:
Android 系统开发人员;
Android 多媒体应用开发人员;
Android 音频开发人员;
Android 编解码开发人员;
Android 相机开发人员;
Android 图形开发人员;
Android 多媒体开发人员;
想了解高性能音频的开发人员;
想了解 WSL 如何开发 Android 源码的开发人员。
由于作者的水平有限, 书中难免会出现一些错误或者不准确的地方, 恳请广大读者批评指正。
致 谢
感谢我的母亲, 是她在背后默默地支持着我。
感谢我的爱人, 是她一直在我写作过程中鼓励我。
感谢好友刘兴光, 以专业的视角帮忙审稿, 提出了许多宝贵的意见。
感谢北京航空航天大学出版社的大力支持和帮助, 使我的作品得以出版。
感谢广大读者朋友的厚爱和支持。
赵广建
2024 年2 月
评论
还没有评论。