开篇词 | 5G的到来将会为音视频插上飞翔的翅膀

在浩如烟海的生命长河中,人类文明已经有几千年的历史。从远古时期,人类就梦想着有一天可以听到、看到千里之外的声音和景象,当时的人们认为只有神仙(千里眼和顺风耳)才能做到。

其实在这漫长的时间里,真正推动人类大跨度进步的时期只是最近几百年。到了第二次工业革命期间的1876年,贝尔电话的发明,使人类可以听到千里之外声音的梦想终于成真。

此后,音视频技术不断发展。一方面,视频压缩技术从H261到H264,再到现在的 H265 及未来不久将出现的 AV1,视频压缩率越来越高;音频压缩技术也从电话使用的 G.711、G.722等窄带音频压缩技术,发展到现代的 AAC、OPUS等宽带音频压缩技术。

另一方面,从中国 3G 网络正式商用开始,移动网络也发生了翻天覆地的变化。从 3G 到 4G ,再到马上要落地的 5G,移动网络的带宽和质量越来越高,为音视频数据传输打下了坚实的基础。

我有幸于2010年初,参与研发了当时所在公司自主知识产权的音视频引擎系统,自此便一直从事音视频方面的研发工作,到现在已经将近十年的从业经验。

在此期间,我所开发的直播系统既可以支持上万人同时在线,又可以进行多人实时音视频互动,此外还可以与固话、MCU等硬件设备互联互通。

这套系统可以用于多种场景,如音视频会议、在线教育(大班课、小班课、1对1)、即时通讯等。

在开发直播系统期间,我既做过大负载高并发的音视频流媒体服务器的设计与开发,也做过客户端音视频引擎的设计与开发。经过这么多年的洗礼,可以说对音视频技术及未来的发展已了然于胸。

音频技术的现在与未来

音频技术发展到今天,可以说已经非常成熟了,如我们上面所讲的,H264/H265、VP8/VP9 以及后面的 AV1 编解码器,解决了视频压缩率的问题;而5G的商用,解决了带宽的问题。这两个问题解决后,使得各行各业都开始使用音视频技术以实现更佳的用户体验,如音视频会议、在线教育、远程医疗、娱乐游戏等。

尤其是2011年Google推出 WebRTC 技术后,大大降低了音视频技术的门槛。有了 WebRTC,你就不必自己去实现回音消除算法了;有了WebRTC ,你也不必自己去实现各种音视频的编解码器了;有了 WebRTC,你更不必去考虑跨平台的问题了。因此,可以说WebRTC 的出现大大加速了音视频技术的应用与推广。

WebRTC有个特别有诱惑力的愿景:可以在浏览器上快速开发出各种音视频应用。其实,这一愿景已经实现。通过本专栏的学习,你就可以轻松实现浏览器之间的音视频通话,是不是很酷?

可以预见,未来音视频技术将会作为一种基础技术应用到更广泛的场景中。它可以与 AR/VR 结合,让你在远端体验虚拟与现实,如虚拟服装体验;也可以与人工智能结合用于提高服务质量,如用于教学上帮助老师提高教学质量;它还可以与物联网结合,用在自动驾驶、家庭办公等领域。

行业及学习痛点

随着各种音视频技术的完善、5G的落地,以及各种音视频应用的出现,在未来两三年内,音视频必定会像当年移动互联网一样出现井喷的人才需求

然而,音视频技术本身纷繁、复杂,需要很深的专业及技术背景。举个简单的例子,当进行音视频互动时,经常会听到自己的回音,这是什么原因引起的呢?再比如说,用户进入教室后经常看到老师的视频卡顿、花屏,这是什么原因造成的?你又该如何解决呢?如果你没有很深的背景知识,对音视频编解码原理不清楚,对音视频处理流程不了解的话,你是根本无法解决上述问题的。

另外,如果你想开发一款音视频产品,不仅需要有最基础的音视频知识(如音视频的编码、解码),往往还需要多层级的技术栈,涉及移动端开发、PC端开发、各种协议规范、网络协议、socket开发等。所以,要想成为一员合格的音视频开发工程师,你需要对各领域的知识都有一些掌握才行。

如何学习音视频技术

看到上面这些困难,是不是很多同学开始打退堂鼓了?

其实你不必担心。音视频技术虽然门槛高,但我所开的这个专栏是从 0 开始讲解音视的相关知识,一步一步,循序渐进:首先,让你学会如何使用浏览器相关API调用WebRTC实现1对1通话;然后,再逐步深入学习其他音视频知识。

因此,在本专栏中,我将通过下面三大主题来进行讲解,并且在整个的讲解过程中,我会采取循序渐进、各个击破的办法来介绍各个知识点,最终不仅让你掌握到音视频的核心知识,而且真正能依靠这些知识做出你想要的音视频产品。

主题一:WebRTC 1对1通话

通过本主题的学习,你最终将学会如何在浏览器间实现1对1通话。比如一个人在北京,另一个人在上海,他们打开浏览器进入同一个房间后,就可以进行音视频通话了。

本主题我精编了 22 篇文章,这 22 篇文章环环相扣,每篇文章会介绍一个主题,而每个主题的内容都是实现WebRTC 1对1通话的一部分。当你读完这 22 篇文章后,一个即学即用的1对1实时通话的例子就展现在你面前了。

主题二:WebRTC 多人音视频实时通话

学完WebRTC 1对1 通话这部分内容后,你对 WebRTC 就有了一定基础。接下来,我将为你介绍如何实现多人音视频实时互动

在这个主题里,我会首先介绍几种多人音视频实时互动的架构,以及这几种架构的优劣。然后,重点讲解如何使用 SFU 架构实现多人音视频实时通话(SFU是现在最流行的多人实时互动架构)。当你阅读完本部分知识后,就可以亲手实现多人音视频实时通话了。

主题三:支持上万人同时在线的直播系统

支持上万人同时在线的直播系统主要使用 CDN 技术,它是一种比较老的直播架构,使用的底层传输协议是 RTMP 和 HLS。

在本主题中,我会重点介绍 CDN 原理、RTMP、HLS 协议,以及如何使用各种播放器从 CDN 拉取媒体流。同样地,你阅读完本主题内容后,就会清楚地知道上万人同时在线直播的原理,并可以自己实现一套这样的直播系统。

下面就是这个专栏的目录,你可以快速了解下整个专栏的知识结构体系。

到这里,依然可能会有同学质疑说:“做音视频给人的感觉就是个小众市场呀!发展前景会好吗?”

我觉得这里我有必要再强调和说明下。那是过去,由于网络带宽的限制,以及音视频技术本身的一些原因,音视频技术无法被广泛地应用。但现在不一样了,随着近几年技术的发展,音视频已经越来越被广泛地应用于各行各业,比如平时常见的抖音、微信短视频、娱乐直播、教育直播、音视频会议等,已经逐渐渗透到我们工作和生活的各个角落。就连大热的AI技术也与音视频技术联系非常紧密,像现在的智能音箱、自动驾驶、人脸识别、表情识别等都离不开音视频技术。

另外,让人欣喜的是随着Google对WebRTC的推动,在浏览器下实现音视频应用变有极为简单,这大大降低了非音视频专业的开发人员学习成本,并且其应用前景也变得更加广阔。

可以说,这么有前景的技术非专业人员也可以很快学习和上手,而掌握了音视频技术的核心技术,一定可以让你在未来职场上获得丰厚的回报和满满的成就感。

5G的时代马上到来,它将会为音视频插上飞翔的翅膀,让我们共同起飞吧!你准备好了吗?

精选留言

  • IT蜗壳-Tango

    2019-07-15 17:45:21

    老师,我们用什么语言实现啊
    作者回复

    大部分用 JS,服务端会介绍 C /C++。

    2019-07-15 20:25:51

  • 大魔王

    2019-11-14 11:43:32

    老师,为什么移动端app 直播用rtmp啊,为什么都不统一成用webrtc
    作者回复

    “为什么移动端app 直播用rtmp啊”,不知你是如何得到这个结论的?真实的情况是,技术的选择是根据不同的应用场景而来的。对于娱乐直播都是使用 rtmp协议,它的客户端包括 APP, PC...; 对于音视频会议/在线教育这种场景,普遍都使用的 webrtc,在 webrtc底层用的是 RTP/RTCP/UDP协议。所以你的根本问题是你对音视频技术有误解。

    2019-11-15 09:08:27

  • C家族铁粉

    2019-07-15 20:30:55

    是不是有C/C++基础就可以学习这个专栏呢?
    作者回复

    有 JS 基础就可以了,有 C/C++基础更好,后面在讲多人互动时会用到。

    2019-07-15 21:21:25

  • 神经旷野舞者

    2019-11-15 23:09:21

    谢谢老师解答,思路清晰多了。我大概明白作为技术人员合理的研究方向应该是ffmpeg个webrtc的源码,这里面的技术难点是什么呢?里面核心不需要编解码的的数学之类研发能力吗?
    留言里看待老师提到服务器的流媒体转发也是技术难点,是不是和ffmpeg,webrtc并列?适合作业个人的职业技术优势吗?
    作者回复

    ffmpeg和webrtc是做音视频两个最重要的库,ffmpeg在处理音视频时有一套自己的流程,可以说这套流程的使用ffmpeg大大降低了人们利用音视频的难度。如果你熟练的撑握了ffmpeg,就可以做出很多非常酷炫的事儿了。但学习这套流程本身就有难度;对于webrtc来讲也是如此,它最大的优势是在实时通信及音频通话方面。对于这两个库的学习其实不用专门学习数据知识的。对于刚入门的同学来说,先将这两块学好再研究webrtc流媒体服务器吧。

    2019-11-23 17:41:02

  • 神经旷野舞者

    2019-11-14 22:25:56

    很好的视频,其实原来没想做这方面,但是工作做了,感觉也不错,反正都是编程,要做就做好,现在工作内容涉及视频监控系统,职务做ffmpeg的转码调用和其他边角功能,老师有什么职业建议吗,可以主动涉及一些高级的技术主题,这方面需要博士之类吗,听着好像编解码比较高级,但我也不可能像搞学术那样去研究这个,老师有什么音视频的发展看法,可以形成有较大优势的职业竞争力呢?
    作者回复

    实际上音视频编解码在真正工作中的开发量并不大。对于音视频的应用而言,理解编解码的基本原理,熟悉它的API如何使用就可以了。像音视频的算法之类的工作,全世界也没有多少人在搞,除非你数学特别牛,算法特别牛,否则的话不建议去专门搞音视频算法。对于音视频的发展,目前业界有比较统一的观点,就是 WebRTC 会引领未来,现在几乎所有的大厂都在研究 WebRTC , 而 ffmepg作为 WebRTC 处理音视的工具在 WebRTC内部使用。所以你要想在音视频方面深入的话,这两个库是你必须要深入研究的。

    2019-11-15 09:01:24

  • Ace

    2019-07-15 18:01:41

    打卡打卡,一起飞吧
    作者回复

    哈哈,一起飞!

    2019-07-15 20:23:19

  • 湛卢

    2019-07-15 20:36:06

    老师又出新课了 强烈支持 主要是前端的吧。
    作者回复

    对,主要是前端。不过增加了多对多互动+高并发同时在线

    2019-07-15 21:20:30

  • Shershon

    2020-05-03 19:38:12

    最开始学习PHP,只想开发一个属于自己的网站;后来,觉得要写出高性能、抗住大负载的网站,必须知道底层的知识,于是开始学习操作系统、网络、数据库、设计模式、c/c++等,研读了PHP底层源码。再后来,心里琢磨着结合自己的爱好,和技术的前景(最好是和网络相关,开发语言涉及到c/c++的),好好精通一个方向(最好是文娱方向和生活消费方向的),但是一直迷茫不已,飘忽不定。今年,入职了一家新公司,现在参加直播相关的开发工作,然后想买课买专栏买书,然后遇到了这么好的专栏和老师,然后结合自己的兴趣和技术储备,心里想说一句:终于等到了你,终于找到了你,rtc技术!
    作者回复

    哈哈,加油💪

    2020-05-07 23:37:47

  • Guarantee

    2019-12-07 18:07:21

    老师,我使用brew install nginx-full —with-rtmp-module 的时候报错,显示:ChecksumMismatchError:SHA256 mismatch ,怎么解决呀
    作者回复

    这应该是你系统环境问题,你自己再查查哈!

    2019-12-22 22:48:14

  • J.Smile

    2019-07-18 14:18:30

    老是,我们是JAVA的,学习起来有障碍吗
    作者回复

    没障碍,只要有一门语言就可以了

    2019-07-18 19:12:33

  • John

    2019-07-16 15:26:27

    "支持上万人同时在线的直播系统主要使用 CDN 技术,它是一种比较老的直播架构" 老师会在课程里给我们介绍最新的技术架构么?
    作者回复

    未来可以通过WebRTC 服务器重新构建,这块目前各大公司都在推进中,这块目前不会讲,还不成熟

    2019-07-16 15:34:15

  • InMath

    2019-07-15 19:25:57

    老师这个会是代码实战吗?
    作者回复

    是的,当你阅读完本系列文章,你就可以自己实现一套多对多的直播系统

    2019-07-15 20:17:04

  • 老可爱了

    2020-10-13 16:40:52

    一个产品经理来打卡学习
  • 庄忠惠

    2020-08-02 22:25:23

    老师,我们现在用nginx搭了个流媒体服务器,但是发现移动端和pc端延迟时间会差10秒以上,这个有办法缩短延迟时间吗
    作者回复

    你自己的网很有可能会出现这种情况,因为没有进行网络加速;解决的办法是使用云提供的服务,如阿里云/腾讯云等,它们都有网络加速,这样会快很多,一般在 3秒左右

    2020-08-06 13:32:59

  • 星期八

    2020-02-23 09:46:45

    最近网上直播课堂比较火,想知道教师演示课件时与学生交互操作是怎么实现的
    作者回复

    那是通过信令服务器实现的,是一个专门的系统

    2020-02-23 11:43:24

  • 相见恨晚

    2019-07-31 21:04:21

    大佬,两个问题,1,学习你这门课程是不是只要有浏览器和摄像头就可以了,应该还要搭建服务器环境吧 2,这门课程学完后 在Android端实现webrtc是不是很容易。
    作者回复

    要有服务器,课程中会有讲,学完这个再搞android 就很容易了

    2019-08-01 10:35:50

  • netxiao

    2019-07-26 22:58:44

    为什么没有提到freeswitch?是这种技术已经过时了吗?
    作者回复

    freeswitch一般用于服务端混音,或者自己玩的 MCU 使用,在直播中不使用它做流媒体服务器

    2019-07-27 07:53:56

  • 徐云天

    2019-07-22 07:37:50

    一个搞java的路过ヽ(  ̄д ̄;)ノ,c++让人头皮发麻。
    作者回复

    哈哈,没那么夸张!

    2019-07-22 21:12:25

  • javaworker

    2019-07-18 16:15:56

    老师,请教个问题,我们现在在做一个音视频点播的系统,就是上传视频,对视频转码,现在有个问题,转码转的非常慢,80兆时长10分钟的视频需要大概40多分钟才能转完,我们用ffmpeg对视频,音频转码,请问ffmpeg编译时如何优化能让转码转快点?现在ffmpeg编译只依赖了一个h264的包
    作者回复

    用硬件加速试一下。不过严重怀疑你的 ffmpeg使用上有问题。

    2019-07-19 08:12:11

  • DB

    2019-07-16 19:24:09

    rtmp/hls 怎么保证实时性啊?有介绍直播延时方面吗?
    作者回复

    使用 webrtc 保证时实性哈

    2019-07-16 21:15:35