作者 |
李超 展晓凯 魏晓红 |
丛书名 |
Web开发技术丛书 |
出版社 |
机械工业出版社 |
ISBN |
9782107161843 |
简要 |
简介 |
内容简介书籍计算机书籍 ---------------------------8082407 - WebRTC音视频实时互动技术:原理、实战与源码分析--------------------------- 本书分成四大部分: ? 第1部分为基础篇,主要介绍 WebRTC是干什么的,大体结构是怎样的。我们该如何下载源码,如何对源码进行编译以及 WebRTC 的目录结构是如何安排的,每个目录的主要作用是什么。 实际上,目前90% 的同学还不清楚WebRTC 的源码该如何下载,源码下载后该如何编译。之所以会有这个问题是因为 WebRTC 的代码量过于庞大,必须要命名用它自己的工具进行下载。而困难点在于国内不能直接访问 WebRTC 的源码地址,这就给很多学习者带来了特别大的困难。 另一方面, WebRTC 的编译工具也是自己写的,不是我们通常使用的编译工具。 因此,对于一个新手来说,可以几周甚至几个月都搞不定这件事儿。 ? 第2部分为应用该,在这部分核心的目的是要向读者讲明白如何通过 WebRTC 实现 1对1 的通信。要实现一个 1:1 的实时通信系统,必然要涉及到很多知识。如 SDP协议,媒体协商过程,NAT穿越,信令通信等等相关的知识。因此,在这部分我以实现 WebRTC 1对1实时通信为目的,让读者讲解必要的知识,从而为后面知识的讲解打好基础。 ? 第3部分是本书的核心内容,首先向读者讲解 WebRTC 的整体框架,让他们对 WebRTC 有个全局的认识,之后再逐步向他们介绍 WebRTC 如何采集音视频灵敏据,如何进行音视频的编解码,如何播放声音,如何渲染视频等相关的知识。 ? 第4部分是提高篇,在这部分我会向读者讲解我们在使用 WebRTC 时经常要解决的一些问题。如 如何给 WebRTC 增加模块,即目录是的增加 x264 视频编解码模块,AAC音频编解码模块,在WebRTC中是如何将多路音频进行混音的, WebRTC是如何进行回音清除的等相关的内容。 . ---------------------------7067183 - 音视频开发进阶指南:基于Android与iOS平台的实践--------------------------- 本书采用从零开始,逐级深入的方式写作,以项目实战为阶段性目标,外加实际生产环境下的特殊案例作为优化方案,让读者可以全方位掌握移动平台下音视频开发的大部分内容。首先介绍实现视频播放器和录制需要的基础知识,然后通过案例讲解如何实现视频播放器和一个视频录制的应用。但是一款录制的应用,要想上线,其实还要进行给音频视频美化,所以在提高篇,介绍了相应的内容,并给出了一个实际生产环境中的案例,之后,指导读者进阶,把前面学到的基础内容应用到直播中。后,给出排错方法和工具,和大家分享如何更有效率地开发应用程序。 |
目录 |
[套装书具体书目] 7067183 - 音视频开发进阶指南:基于Android与iOS平台的实践 - 9787111585824 - 机械工业出版社 - 定价 79 8082407 - WebRTC音视频实时互动技术:原理、实战与源码分析 - 9787111685012 - 机械工业出版社 - 定价 89 ---------------------------8082407 - WebRTC音视频实时互动技术:原理、实战与源码分析--------------------------- 第 1 章 音视频直播的前世今生 1 1.1 音视频的历史 1 1.2 移动互联网 3 1.3 音视频直播的两条技术路线 3 1.4 音视频直播的现状 5 1.5 音视频直播的未来 6 1.6 小结 7 第 2 章 为什么要使用 WebRTC8 2.1 自研直播客户端架构8 2.1.1 拆分音视频模块 9 2.1.2 跨平台 10 2.1.3 插件化管理11 2.1.4 其他 13 2.2 WebRTC 客户端架构14 2.3 小结 16 第 3 章 音视频实时通信的本质 17 3.1 两种指标 18 3.1.1 实时通信延迟指标 18 3.1.2 音视频服务质量指标 19 3.2 实时通信的主要矛盾 20 3.2.1 增加带宽 20 3.2.2 减少数据量22 3.2.3 适当增加时延 24 3.2.4 提高网络质量 24 3.2.5 快速准确地评估带宽 25 3.3 小结 25 第 4 章 构建WebRTC一对一信令服务器 27 4.1 WebRTC 一对一架构27 4.2 细化架构 28 4.3 信令 29 4.3.1 信令定义 29 4.3.2 信令时序 30 4.3.3 信令传输协议的选择 31 4.4 构建信令服务器 31 4.4.1 信令服务器的实现方案32 4.4.2 信令服务器的业务逻辑32 4.4.3 信令服务器的实现 33 4.4.4 信令服务器的安装与部署 35 4.4.5 信令服务器的完整代码37 4.5 小结 40 第 5 章 WebRTC 实现一对一通信 41 5.1 浏览器对 WebRTC 的支持41 5.2 遍历音视频设备 42 5.3 采集音视频数据 44 5.4 MediaStream 与 MediaStreamTrack 47 5.5 本地视频预览47 5.6 信令状态机 49 5.7 RTCPeerConnection52 5.7.1 创建 RTCPeerConnection 对象 52 5.7.2 RTCPeerConnection 与本地 音视频数据绑定 53 5.7.3 媒体协商 54 5.7.4 ICE 55 5.7.5 SDP 与 Candidate 消息的 交换 57 5.7.6 远端音视频渲染 58 5.7.7 客户端完整例子 59 5.8 小结 82 第 6 章 WebRTC 中的 ICE 实现 83 6.1 Candidate 种类与优先级83 6.2 ICE 策略 85 6.3 P2P 连接 87 6.3.1 完全锥型 NAT 89 6.3.2 IP 限制锥型 NAT90 6.3.3 端口限制锥型 NAT 91 6.3.4 对称型 NAT92 6.3.5 NAT 类型检测 93 6.3.6 如何进行 NAT 穿越 97 6.4 网络中继 101 6.4.1 TURN 协议中转数据 101 6.4.2 WebRTC 使用 TURN 协议 102 6.4.3 STUN/TURN 服务器的 安装与部署103 6.5 小结 105 第 7 章 WebRTC 中的 SDP 106 7.1 SDP 标准规范106 7.2 WebRTC 中 SDP 的整体 结构 108 7.3 媒体信息 110 7.3.1 音频媒体信息 111 7.3.2 视频媒体信息 112 7.3.3 SSRC 与 CNAME 114 7.4 PlanB 与 UnifiedPlan 115 7.5 WebRTC 如何保证数据 安全 117 7.6 RTP 扩展头 119 7.7 服务质量 120 7.8 SDP 详解 122 7.9 ORTC 131 7.10 小结 131 第 8 章 各端的互联互通 132 8.1 WebRTC Native 的核心 132 8.2 Android 端的实现 134 8.2.1 申请权限 134 8.2.2 引入 WebRTC 库 136 8.2.3 构造 PeerConnection- Factory 138 8.2.4 创建音视频源 138 8.2.5 视频采集 139 8.2.6 视频渲染 142 8.2.7 创建 PeerConnection 144 8.2.8 建立信令系统 146 8.3 iOS 端的实现146 8.3.1 申请权限 146 8.3.2 引入 WebRTC 库 147 8.3.3 构造 RTCPeerConnection- Factory 148 8.3.4 创建音视频源 149 8.3.5 视频采集 150 8.3.6 本地视频预览 151 8.3.7 建立信令系统 153 8.3.8 创建 RTCPeer- Connection155 8.3.9 远端视频渲染 158 8.4 PC 端与 Mac 端的实现 159 8.5 小结 159 第 9 章 网络传输协议 RTP 与 RTCP 160 9.1 如何选择 UDP 与 TCP 160 9.2 RTP 162 9.2.1 RTP 协议头163 9.2.2 RTP 的使用165 9.2.3 RTP 扩展头167 9.2.4 RTP 中的填充数据 170 9.3 RTCP 171 9.3.1 RTCP 报文分类 171 9.3.2 RTCP 协议头 172 9.3.3 WebRTC 的反馈报文 173 9.4 小结 174 第 10 章 WebRTC 拥塞控制 175 10.1 WebRTC 的拥塞控制算法175 10.1.1 Goog-REMB176 10.1.2 Transport-CC 181 10.1.3 基于丢包的拥塞评估算法 原理184 10.1.4 WebRTC 拥塞控制 流程184 10.2 拥塞控制算法比较185 10.2.1 拥塞控制的准确性 186 10.2.2 与 TCP 连接并存时的公 平性187 10.2.3 同种类型连接的公 平性188 10.2.4 拥塞控制算法在丢包 情况下的表现 189 10.3 小结 191 第 11 章 WebRTC 源码分析入门 192 11.1 WebRTC 源码的选择 193 11.2 WebRTC 开发环境的搭建193 11.2.1 配置软硬件环境194 11.2.2 安装依赖工具包195 11.2.3 获取并编译 WebRTC 代码195 11.3 国内 WebRTC 镜像196 11.4 WebRTC 结构 197 11.4.1 WebRTC 主 197 11.4.2 modules 198 11.5 小结 200 第 12 章 分析 WebRTC 源码的必经 之路 201 12.1 信令服务器实现分析 201 12.1.1 信令服务器的组成 202 12.1.2 信令服务器的工作流程 203 12.2 PeerConnection 客户端分析 206 12.2.1 运行 peerconnection_ client 206 12.2.2 peerconnection_client 的组成 207 12.2.3 界面的展示 213 12.2.4 视频的渲染 218 12.2.5 WebRTC 的使用 220 12.2.6 信令的处理 225 12.3 小结 229 第 13 章 WebRTC 源码分析 231 13.1 WebRTC 的数据流 231 13.2 WebRTC 线程模型 234 13.2.1 WebRTC 线程的创建与使用 234 13.2.2 线程切换 236 13.3 网络传输 250 13.3.1 网络接收与分发模块类关系图 250 13.3.2 网络连接的建立251 13.4 音视频数据采集 256 13.4.1 音频采集与播放256 13.4.2 视频采集与渲染258 13.5 音视频编解码 261 13.5.1 音频编码 261 13.5.2 音频解码 265 13.5.3 视频编码 267 13.5.4 视频解码 270 13.6 小结 272 ---------------------------7067183 - 音视频开发进阶指南:基于Android与iOS平台的实践--------------------------- 推荐序一 推荐序二 前言 第1章 音视频基础概念 1 1.1 声音的物理性质 1 1.1.1 声音是波 1 1.1.2 声波的三要素 2 1.1.3 声音的传播介质 3 1.1.4 回声 3 1.1.5 共鸣 4 1.2 数字音频 4 1.3 音频编码 6 1.4 图像的物理现象 7 1.5 图像的数值表示 8 1.5.1 RGB表示方式 8 1.5.2 YUV表示方式 9 1.5.3 YUV和RGB的转化 10 1.6 视频的编码方式 10 1.6.1 视频编码 10 1.6.2 编码概念 11 1.7 本章小结 13 第2章 移动端环境搭建 14 2.1 在iOS上如何搭建一个基础项目 14 2.2 在Android上如何搭建一个基础项目 21 2.3 交叉编译的原理与实践 26 2.3.1 交叉编译的原理 26 2.3.2 iOS平台交叉编译的实践 27 2.3.3 Android平台交叉编译的实践 33 2.3.4 使用LAME编码MP3文件 38 2.4 本章小结 42 第3章 FFmpeg的介绍与使用 43 3.1 FFmpeg的编译与命令行工具的使用 43 3.1.1 FFmpeg的编译 43 3.1.2 FFmpeg命令行工具的使用 51 3.2 FFmpeg API的介绍与使用 60 3.3 FFmpeg源码结构 68 3.3.1 libavformat与libavcodec介绍 68 3.3.2 FFmpeg通用API分析 69 3.3.3 调用FFmpeg解码时用到的函数分析 70 3.3.4 调用FFmpeg编码时用到的函数分析 71 3.3.5 面向对象的C语言设计 72 3.4 本章小结 74 第4章 移动平台下的音视频渲染 75 4.1 AudioUnit介绍与实践 75 4.2 Android平台的音频渲染 84 4.2.1 AudioTrack的使用 85 4.2.2 OpenSL ES的使用 87 4.3 视频渲染 90 4.3.1 OpenGL ES介绍 90 4.3.2 OpenGL ES的实践 91 4.3.3 上下文环境搭建 98 4.3.4 OpenGL ES中的纹理 104 4.4 本章小结 109 第5章 实现一款视频播放器 110 5.1 架构设计 110 5.2 解码模块的实现 115 5.3 音频播放模块的实现 118 5.3.1 Android平台的音频渲染 118 5.3.2 iOS平台的音频渲染 119 5.4 画面播放模块的实现 121 5.4.1 Android平台的视频渲染 121 5.4.2 iOS平台的视频渲染 122 5.5 AVSync模块的实现 124 5.5.1 维护解码线程 124 5.5.2 音视频同步 125 5.6 中控系统串联起各个模块 127 5.6.1 初始化阶段 127 5.6.2 运行阶段 128 5.6.3 销毁阶段 129 5.7 本章小结 130 第6章 音视频的采集与编码 131 6.1 音频的采集 131 6.1.1 Android平台的音频采集 131 6.1.2 iOS平台的音频采集 134 6.2 视频画面的采集 137 6.2.1 Android平台的视频画面采集 137 6.2.2 iOS平台的视频画面采集 146 6.3 音频的编码 156 6.3.1 libfdk_aac编码AAC 156 6.3.2 Android平台的硬件编码器MediaCodec 158 6.3.3 iOS平台的硬件编码器AudioToolbox 161 6.4 视频画面的编码 166 6.4.1 libx264编码H264 166 6.4.2 Android平台的硬件编码器MediaCodec 172 6.4.3 iOS平台的硬件编码器 175 6.5 本章小结 184 第7章 实现一款视频录制应用 185 7.1 视频录制的架构设计 185 7.2 音频模块的实现 188 7.2.1 音频队列的实现 189 7.2.2 Android平台的实现 191 7.2.3 iOS平台的实现 194 7.3 音频编码模块的实现 198 7.3.1 改造编码器 198 7.3.2 编码器适配器 199 7.4 画面采集与编码模块的实现 202 7.4.1 视频队列的实现 202 7.4.2 Android平台画面编码后入队 203 7.4.3 iOS平台画面编码后入队 204 7.5 Mux模块 205 7.5.1 初始化 206 7.5.2 封装和输出 208 7.5.3 销毁资源 212 7.6 中控系统串联起各个模块 213 7.7 本章小结 214 第8章 音频效果器的介绍与实践 215 8.1 数字音频基础 215 8.1.1 波形图 215 8.1.2 频谱图 217 8.1.3 语谱图 219 8.1.4 深入理解时域与频域 219 8.2 数字音频处理:快速傅里叶变换 222 8.3 基本乐理知识 229 8.3.1 乐谱 229 8.3.2 音符的音高与十二平均律 231 8.3.3 音符的时值 233 8.3.4 节拍 233 8.3.5 MIDI格式 234 8.4 混音效果器 235 8.4.1 均衡效果器 236 8.4.2 压缩效果器 239 8.4.3 混响效果器 240 8.5 效果器实现 243 8.5.1 Android平台实现效果器 243 8.5.2 iOS平台实现效果器 252 8.6 本章小结 255 第9章 视频效果器的介绍与实践 256 9.1 图像处理的基本原理 256 9.1.1 亮度调节 257 9.1.2 对比度调节 258 9.1.3 饱和度调节 259 9.2 图像处理进阶 259 9.2.1 图像的卷积过程 260 9.2.2 锐化效果器 260 9.2.3 高斯模糊算法 262 9.2.4 双边滤波算法 263 9.2.5 图层混合介绍 264 9.3 使用FFmpeg内部的视频滤镜 266 9.3.1 FFmpeg视频滤镜介绍 266 9.3.2 滤镜图的构建 267 9.3.3 使用与销毁滤镜图 269 9.3.4 常用滤镜介绍 270 9.4 使用OpenGL ES实现视频滤镜 272 9.4.1 加水印 273 9.4.2 添加自定义文字 278 9.4.3 美颜效果器 282 9.4.4 动图贴纸效果器 284 9.4.5 主题效果器 288 9.5 本章小结 291 第10章 专业的视频录制应用实践 292 10.1 视频硬件解码器的使用 292 10.1.1 初始化信息准备 292 10.1.2 VideoToolbox解码H264 294 10.1.3 MediaCodec解码H264 298 10.2 音频效果器的集成 304 10.2.1 Android音效处理系统的实现 305 10.2.2 iOS音效处理系统的实现 308 10.3 一套跨平台的视频效果器的设计与实现 309 10.4 将特效处理库集成到视频录制项目中 315 10.4.1 Android平台特效集成 316 10.4.2 iOS平台特效集成 321 10.5 本章小结 325 第11章 直播应用的构建 327 11.1 直播场景分析 327 11.2 拉流播放器的构建 329 11.2.1 Android平台播放器增加后处理过程 329 11.2.2 iOS平台播放器增加后处理过程 332 11.3 推流器的构建 335 11.4 第三方云服务介绍 340 11.5 礼物系统的实现 341 11.5.1 Cocos2dX项目的运行原理 342 11.5.2 关键API详解 344 11.5.3 实现一款动画 348 11.6 聊天系统的实现 350 11.6.1 Android客户端的WebSocket实现 351 11.6.2 iOS客户端的WebSocket实现 352 11.7 本章小结 353 第12章 直播应用中的关键处理 354 12.1 直播应用的细节分析 354 12.1.1 推流端细节分析 354 12.1.2 拉流端细节分析 355 12.2 推流端的关键处理 355 12.2.1 自适应码率的实践 356 12.2.2 统计数据保证后续的应对策略 361 12.3 拉流端的关键处理 363 12.3.1 重试机制的实践 364 12.3.2 首屏时间的保证 366 12.3.3 统计数据保证后续的应对策略 370 12.4 本章小结 371 第13章 工欲善其事,必先利其器 372 13.1 Android平台工具详解 372 13.1.1 ADB工具的熟练使用 372 13.1.2 MAT工具检测Java端的内存泄漏 377 13.1.3 NDK工具详解 387 13.1.4 Native层的内存泄漏检测 389 13.1.5 breakpad收集线上Crash 396 13.2 iOS使用Instruments诊断应用 399 13.2.1 Debug Navigator 399 13.2.2 Time Profiler 400 13.2.3 Allocations 402 13.2.4 Leaks 403 13.3 本章小结 405 附录A 通过Ne10的交叉编译输入理解ndk-build 406 附录B 编码器的使用细节 415 附录C 视频的表示与编码 423 |