前言
为什么要写这本书
整个音视频领域的架构以及开发已经演进了很长时间,从最开始的广电领域,到PC端的音视频领域,再到本书所介绍的移动端的音视频领域。尤其在这几年中,移动端音视频领域架构的变化是巨大的。在移动互联网的发展热潮中,我有幸从事了音视频领域的设计与开发,并且就职于最时尚的手机KTV——唱吧,这使得我开发出来的东西能够服务于几亿用户。对于音视频的移动端的应用,不论是开发还是使用,在近两年都达到了一个高峰,而作为一名工程师,如何高效地开发出一个音视频App,是一件非常困难的事情,特别是对于不太了解音视频概念的工程师。我从事软件开发已有7年多的时间,接触音视频领域也已经有5年多,在整个开发过程中,不同的时间段会遇到不同的挑战,尤其是在最开始涉足音视频领域的时候,真可谓举步维艰。首先,对于音视频的基础概念不是特别清楚,再者在工作中边学边做,很难对整个音视频领域有一个全面的了解,并且市面上没有相关成熟的资料从更高的层次来介绍音视频领域在移动端的演进与发展。这几年的设计实战与开发经验,以及带新人入门的众多感触,让我有了写这本书的动力,同时也形成了这本书的核心内容,我希望通过本书可以帮助更多想要在移动端音视频领域实现自己想法的工程师,让大家可以顺利地建立起自己的音视频App。我非常希望能为刚入门的读者或者遇到困难的读者提供帮助,希望大家可以享受整个开发的过程,享受自己开发的产品为人们的生活带来便利的成就感。另外,从整个音视频开发领域来讲,我也十分希望能够通过本书贡献出自己的绵薄之力。
读者对象
产品经理,这部分读者可以从中了解在移动端进行音视频开发会遇到的很多问题以及对应的优化策略,例如:如何通过音视频的统计数据为产品提供更加流畅的策略(视频观看的秒开、直播推流的流畅度、视频上传的成功率等)。
项目经理,这部分读者可以了解很多时下流行的名词与概念,不再会因为几个专业名词就让自己不知所措,并且有助于更好地评估音视频项目开发中的风险与进度。
测试人员,这部分读者可以学习在音视频App中由于处理过程不同而导致的瓶颈问题,书中也提到了一些自动化测试相关的命令以及工具,可以对CPU的负载情况、内存的占用情况、内存泄漏问题等进行分析。
架构师与工程师,这部分读者只需要一点移动开发经验就可以阅读本书了。当然如果你已经是一个高级移动开发工程师或者架构师,那么读起本书来将更加游刃有余。再进一步,如果你已经是移动领域的音视频开发工程师了,那么恭喜你,我们之间将会有一场关于技术领域内部的对话。
开设相关课程的高等院校。
如何阅读本书
为了避免说教式的讲解带来枯燥乏味的阅读体验,本书给出了大量的实例及生产环境下的案例。本书可分为四个部分:第一部分是入门,从理论基础开始讲解,最终会产生两个实践项目;第二部分是提高,基于第一部分的项目添加特效,形成一个完整的多媒体项目;第三部分是扩展,结合当下比较流行的直播场景进行实际案例分析;第四部分是工具,介绍当下大部分可以提高开发以及测试效率的工具。下面是各个章节的基本介绍。
第1章,介绍音视频的基础概念,其中包括音视频的基础数据格式、编码后的数据格式以及不同格式之间的相互转换等。
第2章,从零开始讲解如何搭建一个iOS项目和一个Android项目,并且添加C++支持,因为在音视频领域的开发中,有相当一部分的代码需要用C++来编写,这样就可以做到两个平台(Android和iOS平台)共用一套代码仓库,以提升开发效率。然后讲解交叉编译,因为在音视频开发过程中会用到很多第三方开源库,如果将这些库编译到我们的项目中,势必要进行交叉编译,因此本章会重点讲解这些内容。
第3章,探讨FFmpeg开源库。对于音视频开发来讲,FFmpeg开源库是众所周知也是普遍使用的。本章首先从编译开始,接着是命令行使用,再到源码结构,最后是API调用,以层层递进的方式对FFmpeg开源库展开介绍。
第4章,讲解如何利用各自平台的API进行声音与画面的渲染以及解码,对于画面的渲染,推荐使用OpenGL ES,两个平台可以使用同一个代码仓库。
第5章,实现一款视频播放器。有了前四章的基础,我们已经完全可以构建起一个视频播放器了。本书最大的特点就是经过几章基础知识的学习立即开始一个项目的实践,通过本章的视频播放器项目,我们将会熟悉播放器是如何工作的。
第6章,重点介绍音视频的采集与编码器。特别是硬件编解码器在各个平台上的使用,使得应用能够更高效(耗电更少、发热更少、界面更流畅)地运行在用户的手机上。
第7章,继续开发一个视频录制的新项目,该项目可以使我们更加熟悉音视频应用在各个平台下的实现。
第8章,讲解如何处理音频流。毕竟让别人听采集出来的干声是很不礼貌的,本章将利用各种特效来美化采集的声音。
第9章,讲解如何处理视频流,使视频中的颜值变得更高,毕竟爱美之心人皆有之。
第10章,在第7章的项目基础之上,增加第8章的音频特效和第9章的视频特效,从而构建一个实际生产过程中的多媒体应用。
第11章,继续以项目作为驱动,详细讲解如何基于之前学习的内容构建一个直播的应用,重点介绍推流以及拉流端,同时还涉及礼物特效、聊天以及第三方云服务的内容。
第12章,由于直播应用很难用一章的篇幅讲完,所以本章针对一些核心的处理进行讲解。
第13章,介绍常用的工具和排错方法,说明在日常开发中如何更有效率地解决问题,本章内容并不仅限于音视频的开发领域。
附录给出一些参考内容。
勘误和支持
由于作者水平有限,编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。为此,我特意创建了一个在线支持与应急方案的二级站点http://music-video.cn。你可以将书中的错误发布在Bug勘误表页面中,同时如果你遇到问题,也可以访问Q&A页面,我将尽量在线上为你提供最满意的解答。书中的全部源代码文件都将发布在这个网站上,我也会及时地进行相应的功能更新。如果你有更多的宝贵意见,也欢迎发送邮件至我的邮箱zhanxiaokai2008@126.com,我很期待听到你们的真挚反馈。
致谢
感谢唱吧与唱吧的每一位同事,是这个公司让我的职业生涯发展到了今天,也是这个公司让我能在音视频领域达到今天的成就,可以说没有唱吧就不会有这本书的问世。
感谢唱吧的每一位用户,感谢你们对唱吧的长期支持和贡献,没有你们就不会有唱吧的今天,也就不会有这本书的问世。
感谢我的老婆,感谢你对我工作以及写作的支持,是你在我背后默默做了很多事情,才让我把更多的时间和精力放到工作以及写作中。
感谢机械工业出版社华章公司的编辑Lisa老师,感谢你的魄力和远见,在这一年多的时间中始终支持我的写作,正是你的鼓励和帮助引导我顺利完成全部书稿。
感谢互联网,我们在互联网上迈出的任何一步都是人类历史向前迈进的一步,感谢众多互联网人的辛苦工作,为我们创造了这么多机遇。
谨以此书献给我最亲爱的家人、同事,以及众多互联网从业者。
展晓凯
2017年9月于北京