推荐序

我是在庐山认识戴维的。我们在庐山相遇过两次,都是在软件调试研习班上,地点在庐山山南的秀峰景区,时间在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标准、传输控制优化、可扩展架构,以及衡量系统性能的评价指标。

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

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

张银奎

2023年10月29日于上海