《RTC程序设计:实时音视频权威指南》[96M]百度网盘|pdf下载|亲测有效
《RTC程序设计:实时音视频权威指南》[96M]百度网盘|pdf下载|亲测有效
《RTC程序设计:实时音视频权威指南》[96M]百度网盘|pdf下载|亲测有效
《RTC程序设计:实时音视频权威指南》[96M]百度网盘|pdf下载|亲测有效
《RTC程序设计:实时音视频权威指南》[96M]百度网盘|pdf下载|亲测有效
《RTC程序设计:实时音视频权威指南》[96M]百度网盘|pdf下载|亲测有效
《RTC程序设计:实时音视频权威指南》[96M]百度网盘|pdf下载|亲测有效
《RTC程序设计:实时音视频权威指南》[96M]百度网盘|pdf下载|亲测有效
《RTC程序设计:实时音视频权威指南》[96M]百度网盘|pdf下载|亲测有效
《RTC程序设计:实时音视频权威指南》[96M]百度网盘|pdf下载|亲测有效

RTC程序设计:实时音视频权威指南 pdf下载

isbn:9787121472220
出版社 电子工业出版社
出版年 2024-03-01
页数 376页
ISBN 9787121472220
装帧 精装
评分 8.6(豆瓣)
8.90¥ 10.90¥

内容简介

本篇主要提供RTC程序设计:实时音视频权威指南电子书的pdf版本下载,本电子书下载方式为百度网盘方式,点击以上按钮下单完成后即会通过邮件和网页的方式发货,有问题请联系邮箱ebook666@outlook.com

产品特色

编辑推荐

适读人群 :音视频开发-FFmpeg-音视频-RTC-WebRTC

在图像识别和短视频大流行的今天

作者将自己多年的RTC实战经验

总结成这部非常接地气的著作

揭开实时音视频系统的神秘面纱

既有相关背景知识、理论方法

也有可实践的具体编程方法

结合大量工程实现背后的思考

帮助读者抓住业务问题核心

提供大量可信度非常高的信息源

配合每章最后的总结与自测练习题

读者自学起来将更加得心应手

全面了解实时音视频系统必备

作者有15年一线大厂相关工作经验

理论讲解深入浅出,实践案例生动易懂

本书是难得的可读性高又实用的优秀技术图书

作者说:

此书又名《我的前半生》。

拥有它,相当于拥有了十余年行业实战经验,

品味了百余本技术书籍精华,

纵览了千余年人类科技简史。

只需一顿饭钱,即可快递到家。

书香恒久远,珍品永流传。


内容简介

《RTC程序设计:实时音视频权威指南》系统地介绍了实时音视频系统的基础概念、工具、编程方法。


《RTC程序设计:实时音视频权威指南》分为10章,第1章介绍信息与文字编码的基础知识,以及跨平台网络编程的基本方法。第2、3章介绍视频的采集与渲染技术。第4、5章介绍音频的采集与渲染技术。第6章介绍编解码相关的压缩技术。第7章介绍信令与媒体流的建连过程。第8章介绍网络传输过程中的优化技术。第9章介绍实时音视频的应用与可扩展架构。第10章介绍音视频系统核心指标及其计算方法。每章既有对相关背景知识的介绍、对理论方法的说明,也有可实践的具体编程方法,章节后还附有相关的参考资料和练习题,可方便读者进一步学习与复习。


《RTC程序设计:实时音视频权威指南》适合计算机、通信相关专业的在校大学生,以及希望全面了解实时音视频系统的技术人员阅读。


作者简介

戴维

上海交通大学计算机硕士,2009年毕业后在腾讯科技工作十余年;
2020年加入字节跳动,参与实时音视频团队管理,同期任上海交通大学与复旦大学特聘企业讲师;
2023年加入月之暗面,任开发部技术研究员。

擅长通信系统架构与跨平台编程,技术功底扎实。
爱好爬山、观影和阅读科技史。


内页插图

精彩书评

《RTC程序设计:实时音视频权威指南》是一本关于多媒体技术的书。从内容组织来看,对于每个知识点,本书基本上都是先介绍背景,再介绍基本原理,然后介绍编程方法。对于编程部分,考虑到编程环境的差异,涵盖Windows、macOS/iOS和Linux多个平台。这样的写法,既有理论高度,又比较方便读者亲自实践。从知识更替的角度来看,戴维的书以RTC为视角,对多媒体编程技术做了一次比较系统的更新。在图像识别和短视频大流行的今天,这是很有必要的。

——张银奎

在生活节奏越来越快的今天,人们对音视频通信的实时性要求越来越高。《RTC程序设计:实时音视频权威指南》结合当今软硬件发展趋势,系统地从实时音视频的产生、渲染、传输到用户侧的应用、评价进行了全面剖析,理论讲解深入浅出,实践案例生动易懂,可以作为初学者及准备从事该领域工作的专业人员的参考图书。

——复旦大学教授、博士生导师 陈涛

《RTC程序设计:实时音视频权威指南》将为您揭开实时通信系统的神秘面纱,帮助您了解其必要性和掌握其实现方式,助您在RTC领域取得成功。

——看雪学苑创始人 段钢

作者将自己多年的RTC实战经验总结成这部非常接地气的著作《RTC程序设计:实时音视频权威指南》,不但对实时音视频的基础原理进行了清晰的讲解,而且与实际的工程实现相结合,帮助读者获得实用的RTC开发能力。同时,本书给出了进行功能扩展和性能优化的指导方向,方便读者继续进行深入研究。本书非常适合开发者构建自己的实时通信能力。

——字节跳动实时音视频技术负责人 宋慎义

《RTC程序设计:实时音视频权威指南》的可读性非常高,通过追溯人类历史,从更大的时间尺度上讲述了RTC技术要解决的核心问题是什么,从而更容易理解RTC技术栈的设计初衷。本书也体现了作者的专业度,书中包含大量工程实现背后的思考,帮助读者抓住业务问题核心。本书还提供了大量可信度非常高的信息源,配合每个章节最后的总结与自测练习题,读者自学起来将更加得心应手。

——LiveVideoStack联合创始人 包研


目录

第1章 信息与传输

1.1 背景介绍

1.1.1 电报与无线电

1.1.2 计算机与互联网

1.1.3 主流平台简介

1.1.4 跨平台开发

1.2 二进制世界

1.2.1 一切皆比特

1.2.2 字节管理类

1.2.3 BufferViewer

1.3 文本表示

1.3.1 ASCII 到 GBK

1.3.2 Unicode 与 UTF-8

1.3.3 TextViewer

1.4 网络编程

1.4.1 网络协议

1.4.2 Socket与线程模型

1.4.3 HelloRTC 服务器

1.4.4 HelloRTC 客户端

第2章 视频帧与采集

2.1 像素与图像

2.1.1 视觉物理

2.1.2 像素与颜色空间

2.1.3 位图与视频帧

2.2 视频采集设备

2.2.1 采集设备枚举

2.2.2 图像采集参数

2.2.3 设备的热插拔通知

2.3 平台采集接口

2.3.1 Windows 视频采集

2.3.2 macOS/iOS 视频采集

2.3.3 Android 视频采集

2.3.4 屏幕流与外部源

2.4 编码前处理

2.4.1 时间戳与计时

2.4.2 旋转角与朝向

2.4.3 视频前处理

2.4.4 管理视频帧

第3章 视频渲染

3.1 视频渲染基础

3.1.1 渲染设备

3.1.2 渲染技术

3.1.3 渲染流水线

3.2 平台渲染接口

3.2.1 Windows 渲染

3.2.2 macOS/iOS 渲染

3.2.3 Android 渲染

3.2.4 Linux 渲染

3.3 跨平台渲染

3.3.1 OpenGL编程

3.3.2 着色器编程

3.4 数字图像与视频

3.4.1 视频格式简介

3.4.2 AVI文件格式

第4章 音频采集

4.1 声音与音频帧

4.1.1 声音的物理属性

4.1.2 数字化音频

4.1.3 WAV文件与播放

4.2 音频采集设备

4.2.1 采集设备枚举

4.2.2 音量与静音

4.2.3 设备变更通知

4.2.4 音频路由选择

4.3 平台采集接口

4.3.1 Windows音频数据采集

4.3.2 macOS/iOS 音频数据采集

4.3.3 Android 音频数据采集

4.4 音频预处理

4.4.1 回声消除AEC

4.4.2 自动增益控制AGC

4.4.3 主动噪声抑制ANS

4.4.4 语音活动检测VAD

第5章 音频渲染

5.1 音频渲染基础

5.1.1 数字音频简介

5.1.2 音频渲染设备

5.1.3 音画同步

5.2 平台渲染接口

5.2.1 Windows 音频渲染

5.2.2 macOS 音频渲染

5.2.3 iOS 音频渲染

5.2.4 Android 音频渲染

5.3 高级音频渲染

5.3.1 混音与均衡

5.3.2 重采样

5.3.3 空间音频

5.3.4 音效技术

第6章 编解码压缩技术

6.1 文本压缩

6.1.1 文本压缩简介

6.1.2 霍夫曼编码

6.1.3 Deflate编解码

6.2 图像压缩

6.2.1 图像压缩简介

6.2.2 JPEG文件格式

6.2.3 JPEG解码

6.3 视频编解码

6.3.1 视频编解码器

6.3.2 MP4文件格式

6.3.3 比特率调整算法

6.4 音频编解码

6.4.1 音频编解码器

6.4.2 MP3文件格式

6.4.3 Opus编解码

第7章 信令与媒体协商

7.1 信令技术

7.1.1 信令通道

7.1.2 WebRTC 基础概念

7.1.3 RTC 信令设计

7.1.4 配置与连接点获取

7.2 媒体描述

7.2.1 SDP格式

7.2.2 SDP Offer

7.2.3 SDP Answer

7.3 媒体建连

7.3.1 STUN

7.3.2 TURN

7.3.3 ICE

7.3.4 DTLS

7.4 发布订阅

7.4.1 RTP

7.4.2 RTCP

7.4.3 SCTP

第8章 传输控制优化

8.1 拥塞控制

8.1.1 带宽探测

8.1.2 GCC算法

8.1.3 BBR算法

8.2 弱网降级

8.2.1 弱网识别

8.2.2 分级策略

8.2.3 性能降级

8.3 抖动缓存与平滑发送

8.3.1 NetEQ

8.3.2 Pacer

8.4 错误恢复

8.4.1 超时重传

8.4.2 前向纠错

第9章 可扩展架构

9.1 应用概览

9.1.1 实时通话

9.1.2 会议与教育

9.1.3 游戏语音与虚拟现实

9.2 流水线

9.2.1 Node

9.2.2 典型流水线

9.3 服务端架构

9.3.1 媒体服务器

9.3.2 高可用网络

9.3.3 全球化部署

9.4 网络设备

第10章 评价指标

10.1 总体指标

10.1.1 成功类指标

10.1.2 延迟类指标

10.1.3 卡顿类指标

10.1.4 指标拆解与归因

10.2 视频质量评估

10.2.1 客观评测

10.2.2 主观评测

10.3 音频质量评估

10.3.1 客观评测

10.3.2 主观评测

10.4 网络质量评估

10.4.1 弱网测试标准

10.4.2 弱网测试工具

10.5 性能与稳定性

10.5.1 性能指标

10.5.2 稳定性指标

附录 A 习题答案

附录 B COM编程基础

附录 C 构建工具CMake

附录 D 调试技巧

附录 E 编程环境

附录 F JNI基础

附录 G RTC术语

附录 H WTL简介

附录 I 索引


精彩书摘

推荐序

我是在庐山认识戴维的。我们在庐山相遇过两次,都是在软件调试研习班上,地点在庐山山南的秀峰景区,时间在2016---2019年,当时他在腾讯的QQ团队工作。戴维是“80后”,小我十几岁,是我的交大(上海交通大学)校友。

在2018年4月的研习班欢迎晚宴上,我和戴维同坐一桌。研习班虽说有三天,但是课堂时间仍非常珍贵。我争分夺秒地讲技术,没时间让每个人都介绍自己。于是,晚宴便成了大家相互认识和增进了解的主要场合。最简单的形式便是顺着圆桌依次进行自我介绍,轮到一位年轻人介绍自己时,他说,他在腾讯工作,这是他第二次参加研习班;第一次参加后收获很大,年终考核时升了一级。每一次研习班,我都努力把自己认为最有用的知识和工具分享出来,但是每个人的收获到底如何,我是不清楚的。眼前这位年轻人的发言,给了我大大的鼓励,也让我记住了他,这个年轻人就是戴维。

2020年,新冠病毒来袭,软件调试研习班停班了。

疫情持续三年,我和戴维几乎没有联系。只是在2021年春季时,有一个高频交易团队寻觅编程高手,我想到了戴维,微信上询问他是否有兴趣转战高频交易领域。他说他已经换工作了,当时在字节跳动,手头的工作做得正起劲。我们聊天时,他正在吃早餐,顺手给我拍了一张早餐的照片,带有“字节跳动”的盘子里装着包子、馒头、南瓜,还有少量蔬菜,盘子边上是一碗很浓稠的五谷豆浆。今天回想起来,他当时忙碌的不仅有新换不久的工作,还有大家手里拿的这本书。

今年(2023年)2月,我的创业公司发布专门为程序员定制的幽兰代码本,戴维在发布会当天成为幽兰的第一批用户。

国庆长假的末尾,我收到戴维的微信消息,还有一个很大的PDF文件,他说他写了一本实时音视频的书。

写书是一个大工程。在这样一个追求速成的时代里,很少有年轻人愿意写书了。因此,我一看到戴维的消息,就给他回复了一个大大的“赞”。

翻看戴维的书稿,我一步步走进了戴维和他的RTC世界。

这是一本关于多媒体技术的书。我在读大学时,也一度沉浸在多媒体编程的世界里。至今仍印象深刻的是,当时在Windows 3.1系统上用C语言写代码,解析JPEG、AVI等多媒体文件格式。毕业后,我也多次在实际工作中使用多媒体技术,时间较远的是在1997年前后,我帮一家做视频监控的公司开发上位机软件,使用微软的VFW(Video for Windows)框架对视频捕捉卡编程,把来自模拟摄像头的视频流显示到Windows程序的一个窗口里。时间较近的则是在创业之后,基于海康的SDK读取海康网络摄像头的视频流,然后针对视频图像中的每一帧做图像识别,当时也用到了WebRTC技术。

细看戴维的书,第1章介绍的是多媒体技术基础,第2~5章分别介绍视频和音频,都是先介绍采集(数据输入),再介绍渲染(数据输出)。第6章把音视频合二为一,介绍编解码技术。第7~10章介绍多媒体数据的传输,包括RTC的一般原理及WebRTC标准、传输控制优化、可扩展架构,以及衡量系统性能的评价指标。

从内容组织来看,对于每个知识点,《RTC程序设计:实时音视频权威指南》基本上都是先介绍背景,再介绍基本原理,然后介绍编程方法。对于编程部分,考虑到编程环境的差异,涵盖Windows、macOS/iOS和Linux多个平台。这样的写法,既有理论高度,又比较方便读者亲自实践。

打开我的书柜,把多媒体技术的书拿出来放在一起,有厚厚的一大摞。这或许从侧面证实了,对于一个从业多年的老程序员来说,多媒体技术是难以回避的领域。我眼前的这一摞书,出版时间都比较早,作者也大多是国外的。从知识更替的角度来看,戴维的书以RTC为视角,对多媒体编程技术做了一次比较系统的更新。在图像识别和短视频大流行的今天,这是很有必要的。因此,我很愿意把这样一本国内作者原创的图书推荐给大家。

张银奎

2023年10月29日于上海


前言/序言

为什么写这本书


实时通信,简称RTC(Real-Time Communication),互联网时代的我们,对其并不陌生。尤其是在后疫情时代,多种多样的线上应用场景都促进了 RTC 的发展。

我们与亲人们进行语音视频交流、用会议系统进行线上办公、通过在线课堂进行线上辅导、进语聊房同小伙伴玩游戏“开黑”,实时通信系统越来越多地深入我们的工作与生活中。

虽然实时通信系统是平时用得最多的系统,但市面上阐述这个系统的技术图书却是极少的,主要有以下原因:

(1)RTC 技术本身有一定的复杂性,包括了通信工程、操作系统、多媒体技术、计算机网络、图形学等基础学科的交叉内容,很难通过单学科视角将其阐述透彻。

(2)RTC 技术的发展日新月异。长期以来,网络带宽规模、桌面终端系统、实时通信软件都在持续迅猛发展,RTC 技术的标准日益革新。

(3)现在流行的开源 RTC 系统,大都历史悠久,且体量较大,不适合初学者入门上手。它们大多依赖很多第三方库,读者无法深入探究其底层原理。

现如今,5G宽带设施日益普及,移动终端与桌面系统的纷争趋于平静,WebRTC的推出确立了RTC的W3C标准。我们可以从头审视RTC系统,看看它的各个组成部分,以分析其必要性与实现方式。

由于RTC涉及的知识概念较多,我们将分层次、分阶段地介绍。本书作为基础卷,将着重介绍RTC相关的概念、格式、工具,以及基础模块的程序设计。我将本书的内容比喻为 MOBA 类游戏中单个英雄的玩法介绍,只有掌握了这些基础知识,熟悉了每个角色的定位,才能打出完美的配合,以及进一步深挖。


谁适合看这本书


本书的读者对象包括以下几类群体:


•计算机/通信相关专业的在校大学生。

•致力于从事 RTC 编程开发的技术人员。

•对 RTC 技术感兴趣,并希望在自己的项目中使用相关技术的程序员。


阅读本书,需要读者掌握以下基础知识:


• 操作系统的编程基础(如 Windows、macOS 或移动端开发经验)。

• C++语言编程技巧。

• 计算机网络基础知识。

• 常用计算机命令与 Python 脚本的编写。


阅读说明


本书着重介绍各种概念的二进制格式,我认为这是掌握计算机技术的不二法门。

初学者可以从第1章开始依次阅读每个章节,确保在已经掌握前一章知识的前提下,再阅读后一章的内容。每个章节的内容也都是彼此独立的,因此有基础的读者可以直接跳到感兴趣的章节进行阅读,或者在需要理解某个概念时,通过目录直接查阅。

本书的代码可在读者服务的链接中获取(可扫描封底读者服务处的二维码获得)。

这些代码已在以下环境中验证通过:

Windows 10 下的 Visual Studio 2022

macOS 13、iOS 14/15 下的 XCode 14、Android Studio 2021.3.1 Patch 1


练习题说明


本书每节后都附有练习题,供读者动手实践。练习题遵照如下格式:

序号.[解题时间](题目标题) 题目内容

这里的解题时间是根据题目难度大致估计的,因人而异。

1. [5分钟](颜色取分量)小型代码题,只需写几行代码。

2. [2小时](获取MP4文件的播放时长)中型代码题,需要写复杂函数。

3. [30人月](搭建局域网的RTC)适合小型团队当作课程设计。

附录A中附有部分习题的答案或提示。



产品特色

编辑推荐

适读人群 :音视频开发-FFmpeg-音视频-RTC-WebRTC

在图像识别和短视频大流行的今天

作者将自己多年的RTC实战经验

总结成这部非常接地气的著作

揭开实时音视频系统的神秘面纱

既有相关背景知识、理论方法

也有可实践的具体编程方法

结合大量工程实现背后的思考

帮助读者抓住业务问题核心

提供大量可信度非常高的信息源

配合每章最后的总结与自测练习题

读者自学起来将更加得心应手

全面了解实时音视频系统必备

作者有15年一线大厂相关工作经验

理论讲解深入浅出,实践案例生动易懂

本书是难得的可读性高又实用的优秀技术图书

作者说:

此书又名《我的前半生》。

拥有它,相当于拥有了十余年行业实战经验,

品味了百余本技术书籍精华,

纵览了千余年人类科技简史。

只需一顿饭钱,即可快递到家。

书香恒久远,珍品永流传。


内容简介

《RTC程序设计:实时音视频权威指南》系统地介绍了实时音视频系统的基础概念、工具、编程方法。


《RTC程序设计:实时音视频权威指南》分为10章,第1章介绍信息与文字编码的基础知识,以及跨平台网络编程的基本方法。第2、3章介绍视频的采集与渲染技术。第4、5章介绍音频的采集与渲染技术。第6章介绍编解码相关的压缩技术。第7章介绍信令与媒体流的建连过程。第8章介绍网络传输过程中的优化技术。第9章介绍实时音视频的应用与可扩展架构。第10章介绍音视频系统核心指标及其计算方法。每章既有对相关背景知识的介绍、对理论方法的说明,也有可实践的具体编程方法,章节后还附有相关的参考资料和练习题,可方便读者进一步学习与复习。


《RTC程序设计:实时音视频权威指南》适合计算机、通信相关专业的在校大学生,以及希望全面了解实时音视频系统的技术人员阅读。


作者简介

戴维

上海交通大学计算机硕士,2009年毕业后在腾讯科技工作十余年;
2020年加入字节跳动,参与实时音视频团队管理,同期任上海交通大学与复旦大学特聘企业讲师;
2023年加入月之暗面,任开发部技术研究员。

擅长通信系统架构与跨平台编程,技术功底扎实。
爱好爬山、观影和阅读科技史。


内页插图

精彩书评

《RTC程序设计:实时音视频权威指南》是一本关于多媒体技术的书。从内容组织来看,对于每个知识点,本书基本上都是先介绍背景,再介绍基本原理,然后介绍编程方法。对于编程部分,考虑到编程环境的差异,涵盖Windows、macOS/iOS和Linux多个平台。这样的写法,既有理论高度,又比较方便读者亲自实践。从知识更替的角度来看,戴维的书以RTC为视角,对多媒体编程技术做了一次比较系统的更新。在图像识别和短视频大流行的今天,这是很有必要的。

——张银奎

在生活节奏越来越快的今天,人们对音视频通信的实时性要求越来越高。《RTC程序设计:实时音视频权威指南》结合当今软硬件发展趋势,系统地从实时音视频的产生、渲染、传输到用户侧的应用、评价进行了全面剖析,理论讲解深入浅出,实践案例生动易懂,可以作为初学者及准备从事该领域工作的专业人员的参考图书。

——复旦大学教授、博士生导师 陈涛

《RTC程序设计:实时音视频权威指南》将为您揭开实时通信系统的神秘面纱,帮助您了解其必要性和掌握其实现方式,助您在RTC领域取得成功。

——看雪学苑创始人 段钢

作者将自己多年的RTC实战经验总结成这部非常接地气的著作《RTC程序设计:实时音视频权威指南》,不但对实时音视频的基础原理进行了清晰的讲解,而且与实际的工程实现相结合,帮助读者获得实用的RTC开发能力。同时,本书给出了进行功能扩展和性能优化的指导方向,方便读者继续进行深入研究。本书非常适合开发者构建自己的实时通信能力。

——字节跳动实时音视频技术负责人 宋慎义

《RTC程序设计:实时音视频权威指南》的可读性非常高,通过追溯人类历史,从更大的时间尺度上讲述了RTC技术要解决的核心问题是什么,从而更容易理解RTC技术栈的设计初衷。本书也体现了作者的专业度,书中包含大量工程实现背后的思考,帮助读者抓住业务问题核心。本书还提供了大量可信度非常高的信息源,配合每个章节最后的总结与自测练习题,读者自学起来将更加得心应手。

——LiveVideoStack联合创始人 包研


目录

第1章 信息与传输

1.1 背景介绍

1.1.1 电报与无线电

1.1.2 计算机与互联网

1.1.3 主流平台简介

1.1.4 跨平台开发

1.2 二进制世界

1.2.1 一切皆比特

1.2.2 字节管理类

1.2.3 BufferViewer

1.3 文本表示

1.3.1 ASCII 到 GBK

1.3.2 Unicode 与 UTF-8

1.3.3 TextViewer

1.4 网络编程

1.4.1 网络协议

1.4.2 Socket与线程模型

1.4.3 HelloRTC 服务器

1.4.4 HelloRTC 客户端

第2章 视频帧与采集

2.1 像素与图像

2.1.1 视觉物理

2.1.2 像素与颜色空间

2.1.3 位图与视频帧

2.2 视频采集设备

2.2.1 采集设备枚举

2.2.2 图像采集参数

2.2.3 设备的热插拔通知

2.3 平台采集接口

2.3.1 Windows 视频采集

2.3.2 macOS/iOS 视频采集

2.3.3 Android 视频采集

2.3.4 屏幕流与外部源

2.4 编码前处理

2.4.1 时间戳与计时

2.4.2 旋转角与朝向

2.4.3 视频前处理

2.4.4 管理视频帧

第3章 视频渲染

3.1 视频渲染基础

3.1.1 渲染设备

3.1.2 渲染技术

3.1.3 渲染流水线

3.2 平台渲染接口

3.2.1 Windows 渲染

3.2.2 macOS/iOS 渲染

3.2.3 Android 渲染

3.2.4 Linux 渲染

3.3 跨平台渲染

3.3.1 OpenGL编程

3.3.2 着色器编程

3.4 数字图像与视频

3.4.1 视频格式简介

3.4.2 AVI文件格式

第4章 音频采集

4.1 声音与音频帧

4.1.1 声音的物理属性

4.1.2 数字化音频

4.1.3 WAV文件与播放

4.2 音频采集设备

4.2.1 采集设备枚举

4.2.2 音量与静音

4.2.3 设备变更通知

4.2.4 音频路由选择

4.3 平台采集接口

4.3.1 Windows音频数据采集

4.3.2 macOS/iOS 音频数据采集

4.3.3 Android 音频数据采集

4.4 音频预处理

4.4.1 回声消除AEC

4.4.2 自动增益控制AGC

4.4.3 主动噪声抑制ANS

4.4.4 语音活动检测VAD

第5章 音频渲染

5.1 音频渲染基础

5.1.1 数字音频简介

5.1.2 音频渲染设备

5.1.3 音画同步

5.2 平台渲染接口

5.2.1 Windows 音频渲染

5.2.2 macOS 音频渲染

5.2.3 iOS 音频渲染

5.2.4 Android 音频渲染

5.3 高级音频渲染

5.3.1 混音与均衡

5.3.2 重采样

5.3.3 空间音频

5.3.4 音效技术

第6章 编解码压缩技术

6.1 文本压缩

6.1.1 文本压缩简介

6.1.2 霍夫曼编码

6.1.3 Deflate编解码

6.2 图像压缩

6.2.1 图像压缩简介

6.2.2 JPEG文件格式

6.2.3 JPEG解码

6.3 视频编解码

6.3.1 视频编解码器

6.3.2 MP4文件格式

6.3.3 比特率调整算法

6.4 音频编解码

6.4.1 音频编解码器

6.4.2 MP3文件格式

6.4.3 Opus编解码

第7章 信令与媒体协商

7.1 信令技术

7.1.1 信令通道

7.1.2 WebRTC 基础概念

7.1.3 RTC 信令设计

7.1.4 配置与连接点获取

7.2 媒体描述

7.2.1 SDP格式

7.2.2 SDP Offer

7.2.3 SDP Answer

7.3 媒体建连

7.3.1 STUN

7.3.2 TURN

7.3.3 ICE

7.3.4 DTLS

7.4 发布订阅

7.4.1 RTP

7.4.2 RTCP

7.4.3 SCTP

第8章 传输控制优化

8.1 拥塞控制

8.1.1 带宽探测

8.1.2 GCC算法

8.1.3 BBR算法

8.2 弱网降级

8.2.1 弱网识别

8.2.2 分级策略

8.2.3 性能降级

8.3 抖动缓存与平滑发送

8.3.1 NetEQ

8.3.2 Pacer

8.4 错误恢复

8.4.1 超时重传

8.4.2 前向纠错

第9章 可扩展架构

9.1 应用概览

9.1.1 实时通话

9.1.2 会议与教育

9.1.3 游戏语音与虚拟现实

9.2 流水线

9.2.1 Node

9.2.2 典型流水线

9.3 服务端架构

9.3.1 媒体服务器

9.3.2 高可用网络

9.3.3 全球化部署

9.4 网络设备

第10章 评价指标

10.1 总体指标

10.1.1 成功类指标

10.1.2 延迟类指标

10.1.3 卡顿类指标

10.1.4 指标拆解与归因

10.2 视频质量评估

10.2.1 客观评测

10.2.2 主观评测

10.3 音频质量评估

10.3.1 客观评测

10.3.2 主观评测

10.4 网络质量评估

10.4.1 弱网测试标准

10.4.2 弱网测试工具

10.5 性能与稳定性

10.5.1 性能指标

10.5.2 稳定性指标

附录 A 习题答案

附录 B COM编程基础

附录 C 构建工具CMake

附录 D 调试技巧

附录 E 编程环境

附录 F JNI基础

附录 G RTC术语

附录 H WTL简介

附录 I 索引


精彩书摘

推荐序

我是在庐山认识戴维的。我们在庐山相遇过两次,都是在软件调试研习班上,地点在庐山山南的秀峰景区,时间在2016---2019年,当时他在腾讯的QQ团队工作。戴维是“80后”,小我十几岁,是我的交大(上海交通大学)校友。

在2018年4月的研习班欢迎晚宴上,我和戴维同坐一桌。研习班虽说有三天,但是课堂时间仍非常珍贵。我争分夺秒地讲技术,没时间让每个人都介绍自己。于是,晚宴便成了大家相互认识和增进了解的主要场合。最简单的形式便是顺着圆桌依次进行自我介绍,轮到一位年轻人介绍自己时,他说,他在腾讯工作,这是他第二次参加研习班;第一次参加后收获很大,年终考核时升了一级。每一次研习班,我都努力把自己认为最有用的知识和工具分享出来,但是每个人的收获到底如何,我是不清楚的。眼前这位年轻人的发言,给了我大大的鼓励,也让我记住了他,这个年轻人就是戴维。

2020年,新冠病毒来袭,软件调试研习班停班了。

疫情持续三年,我和戴维几乎没有联系。只是在2021年春季时,有一个高频交易团队寻觅编程高手,我想到了戴维,微信上询问他是否有兴趣转战高频交易领域。他说他已经换工作了,当时在字节跳动,手头的工作做得正起劲。我们聊天时,他正在吃早餐,顺手给我拍了一张早餐的照片,带有“字节跳动”的盘子里装着包子、馒头、南瓜,还有少量蔬菜,盘子边上是一碗很浓稠的五谷豆浆。今天回想起来,他当时忙碌的不仅有新换不久的工作,还有大家手里拿的这本书。

今年(2023年)2月,我的创业公司发布专门为程序员定制的幽兰代码本,戴维在发布会当天成为幽兰的第一批用户。

国庆长假的末尾,我收到戴维的微信消息,还有一个很大的PDF文件,他说他写了一本实时音视频的书。

写书是一个大工程。在这样一个追求速成的时代里,很少有年轻人愿意写书了。因此,我一看到戴维的消息,就给他回复了一个大大的“赞”。

翻看戴维的书稿,我一步步走进了戴维和他的RTC世界。

这是一本关于多媒体技术的书。我在读大学时,也一度沉浸在多媒体编程的世界里。至今仍印象深刻的是,当时在Windows 3.1系统上用C语言写代码,解析JPEG、AVI等多媒体文件格式。毕业后,我也多次在实际工作中使用多媒体技术,时间较远的是在1997年前后,我帮一家做视频监控的公司开发上位机软件,使用微软的VFW(Video for Windows)框架对视频捕捉卡编程,把来自模拟摄像头的视频流显示到Windows程序的一个窗口里。时间较近的则是在创业之后,基于海康的SDK读取海康网络摄像头的视频流,然后针对视频图像中的每一帧做图像识别,当时也用到了WebRTC技术。

细看戴维的书,第1章介绍的是多媒体技术基础,第2~5章分别介绍视频和音频,都是先介绍采集(数据输入),再介绍渲染(数据输出)。第6章把音视频合二为一,介绍编解码技术。第7~10章介绍多媒体数据的传输,包括RTC的一般原理及WebRTC标准、传输控制优化、可扩展架构,以及衡量系统性能的评价指标。

从内容组织来看,对于每个知识点,《RTC程序设计:实时音视频权威指南》基本上都是先介绍背景,再介绍基本原理,然后介绍编程方法。对于编程部分,考虑到编程环境的差异,涵盖Windows、macOS/iOS和Linux多个平台。这样的写法,既有理论高度,又比较方便读者亲自实践。

打开我的书柜,把多媒体技术的书拿出来放在一起,有厚厚的一大摞。这或许从侧面证实了,对于一个从业多年的老程序员来说,多媒体技术是难以回避的领域。我眼前的这一摞书,出版时间都比较早,作者也大多是国外的。从知识更替的角度来看,戴维的书以RTC为视角,对多媒体编程技术做了一次比较系统的更新。在图像识别和短视频大流行的今天,这是很有必要的。因此,我很愿意把这样一本国内作者原创的图书推荐给大家。

张银奎

2023年10月29日于上海


前言/序言

为什么写这本书


实时通信,简称RTC(Real-Time Communication),互联网时代的我们,对其并不陌生。尤其是在后疫情时代,多种多样的线上应用场景都促进了 RTC 的发展。

我们与亲人们进行语音视频交流、用会议系统进行线上办公、通过在线课堂进行线上辅导、进语聊房同小伙伴玩游戏“开黑”,实时通信系统越来越多地深入我们的工作与生活中。

虽然实时通信系统是平时用得最多的系统,但市面上阐述这个系统的技术图书却是极少的,主要有以下原因:

(1)RTC 技术本身有一定的复杂性,包括了通信工程、操作系统、多媒体技术、计算机网络、图形学等基础学科的交叉内容,很难通过单学科视角将其阐述透彻。

(2)RTC 技术的发展日新月异。长期以来,网络带宽规模、桌面终端系统、实时通信软件都在持续迅猛发展,RTC 技术的标准日益革新。

(3)现在流行的开源 RTC 系统,大都历史悠久,且体量较大,不适合初学者入门上手。它们大多依赖很多第三方库,读者无法深入探究其底层原理。

现如今,5G宽带设施日益普及,移动终端与桌面系统的纷争趋于平静,WebRTC的推出确立了RTC的W3C标准。我们可以从头审视RTC系统,看看它的各个组成部分,以分析其必要性与实现方式。

由于RTC涉及的知识概念较多,我们将分层次、分阶段地介绍。本书作为基础卷,将着重介绍RTC相关的概念、格式、工具,以及基础模块的程序设计。我将本书的内容比喻为 MOBA 类游戏中单个英雄的玩法介绍,只有掌握了这些基础知识,熟悉了每个角色的定位,才能打出完美的配合,以及进一步深挖。


谁适合看这本书


本书的读者对象包括以下几类群体:


•计算机/通信相关专业的在校大学生。

•致力于从事 RTC 编程开发的技术人员。

•对 RTC 技术感兴趣,并希望在自己的项目中使用相关技术的程序员。


阅读本书,需要读者掌握以下基础知识:


• 操作系统的编程基础(如 Windows、macOS 或移动端开发经验)。

• C++语言编程技巧。

• 计算机网络基础知识。

• 常用计算机命令与 Python 脚本的编写。


阅读说明


本书着重介绍各种概念的二进制格式,我认为这是掌握计算机技术的不二法门。

初学者可以从第1章开始依次阅读每个章节,确保在已经掌握前一章知识的前提下,再阅读后一章的内容。每个章节的内容也都是彼此独立的,因此有基础的读者可以直接跳到感兴趣的章节进行阅读,或者在需要理解某个概念时,通过目录直接查阅。

本书的代码可在读者服务的链接中获取(可扫描封底读者服务处的二维码获得)。

这些代码已在以下环境中验证通过:

Windows 10 下的 Visual Studio 2022

macOS 13、iOS 14/15 下的 XCode 14、Android Studio 2021.3.1 Patch 1


练习题说明


本书每节后都附有练习题,供读者动手实践。练习题遵照如下格式:

序号.[解题时间](题目标题) 题目内容

这里的解题时间是根据题目难度大致估计的,因人而异。

1. [5分钟](颜色取分量)小型代码题,只需写几行代码。

2. [2小时](获取MP4文件的播放时长)中型代码题,需要写复杂函数。

3. [30人月](搭建局域网的RTC)适合小型团队当作课程设计。

附录A中附有部分习题的答案或提示。


用户名:u***u
内容:作为一本计算机类书籍,这本书的内容非常详尽,从基础概念到高级技术都有详细的介绍。作者的讲解条理清晰,配有大量实用的例子和练习题,帮助读者更好地掌握知识。无论是初学者还是专业人士,都能从中受益。
评分:9.27
用户名:j***Q
内容:内容非常扎实的一本书,不愧是大厂大佬,功底扎实,把RTC的前世今生写的非常明白,很适合入行全面学习,还有很多参考阅读和练习题,要认真多看几遍才能完全掌握,向作者致敬
评分:9.30
用户名:h***1
内容:一本讲解特别好的书,一直想学这方面的知识,看到这本书的简介,就下决心购买,知识非常精彩丰富,讲解到位,准备细心研读,提高自己的能力,拓展知识面,最近做活动价格便宜很多,值得推荐购买,物流速度也很快,当天下单,当天送到。
评分:9.21
用户名:I***鸟
内容:这是我这几年看到的最好的技术书了,其实是不是粗制滥造一翻开就能看到,前言把内容,读者,怎么阅读,都说的很清楚,体例编排也很细致,加粗加点赞。推荐做音视频的同学都读一读,对于扎实基础和提升视野都会有帮助。这年头还能有人这么认真的写一本技术书,太不容易了,必须给作者点赞
评分:8.63
用户名:6***1
内容:物美价廉,物流给力,值得回购宝贝已收到🎈,超级喜欢,颜值高又实用,超级喜欢!❥❥❥很好看,制作工艺很精美,材质也很好!给个赞!虽然没有撕开,但是看了电子版,很值得大家购买学习!
评分:9.04