因为一些项目需要,现在来自学一下WebRTC。说实话,WebRTC里面的内容很多,并且难度很大,再加笔者的能力实在有限,只能一步一步来。
1 什么是WebRTC
相信大多数的初学者都很好奇WebRTC是什么,又起到什么作用。了解这些,笔者认为这是学习一种技术的开始
Web Real-Time Communications(WebRTC / 实时通信技术)是一个由Google发起的实时通讯解决方案,其中包含视频音频采集,编解码,数据传输,音视频展示等功能,我们可以通过技术快速地构建出一个音视频通讯应用。 虽然其名为WebRTC,但是实际上它不光支持Web之间的音视频通讯,还支持Android以及IOS端,此外由于该项目是开源的,我们也可以通过编译C++代码,从而达到全平台的互通。
2 WebRTC的功能与优点
WebRTC功能很多,能用于音视频实时互动,游戏、即时通讯、文件传输等等,还可以进行传输、音视频处理(回音消除、降噪等)。
其强大之处便是无需在网页上安装插件或客户端即可实现实时视音频通信,具有跨平台、开发成本低和适用范围广的特点。
3 WebRTC的学习思路
介绍了这么多,相信大家对于WebRTC有了一定的了解,也对其功能的强大惊叹不已吧。但是面对WebRTC,我们可以发现,其中的内容多到让人望而却步,让人有一种无从下手的无措感。笔者在网络中寻找到该篇文章WebRTC是什么?(诸位不妨去看上两眼),从中摘取了他的学习思路,笔者个人认为这一思路很好,同时也作为之后学习WebRTC的指引。
3.1 WerRTC具体学习步骤
(1). 学习JavaScript,了解并掌握其基本的使用方法,为后续开发及完善Web服务做技术铺垫。
(2). 学习NodeJS的基本使用,尝试搭建一个简单的Web服务器并实现简单的HTTP服务。
(3). 了解音视频设备相关的Web API,尝试使用MediaDevices实现音视频设备的访问,包括摄像头、麦克风及屏幕采集。
(4). 学习使用Socket.IO,尝试使用Socket.IO实现简单的聊天室,为后续开发WebRTC信令服务器做技术铺垫。
(5). 了解和学习使用SDP,并使用WebRTC的Web API实现本地的1v1视频互通。
(6). 搭建STUN/TURN服务器,使用ICE框架及Socket.IO实现WebRTC正式的1V1连麦
(7). 实现WebRTC的移动端开发,做到浏览器和手机客户端能进行连麦操作。
从这诸多的步骤,我们就可以知道WebRTC是有多么的难学,接下来一步一步慢慢走吧。
4 WebRTC的框架
如图所示:
说实话,这一框架很清晰,但又感觉看不懂。建议前几步骤搞懂之后再返回来仔细研究这一框架,才能领会到其精妙之处。
整体架构分为应用层和核心层。应用层提供实现相关业务逻辑Api,核心层提供应用层需要的核心API(Application Programming Interface)。
其中核心层分为四层:
第一层为WebRTC C C++ API (PeerConnection)。这层的API相对比较少,最主要就是实现P2P连接。在PeerConnection里面又包含了很多接口,如传输质量,传输质量报告,统计数据,各种流都是封装在PeerConnection模块里面,这个模块需要重点学习和掌握。
第二层为Session层,为上下文管理层,应用里的音频和视频及非音视频的数据处理逻辑都可以在这层进行。
第三层为引擎和传输层,包含:音频引擎(Voice Engine),视频引擎(Video Engine),传输(Transport),3大核心模块。这也是整个架构中最重要的一层。
第四层为硬件适配层,包括音视频的采集和网络的IO。这层包含:音频的采集和渲染,视频的捕捉,网络IO。注意到上图中底层的这个三个模块都是画的虚线,表示这些模块是可以自己去实现的,可以重载的,这样大大增加WebRTC的灵活性,为跨平台提供了基础。
值得注意的是,WebRTC的核心层无视频的渲染,所有的渲染都需要应用层自行实现。
以上就是笔者的一些经验分享,不足之处还请诸位批评指正。
下一步,学习JS。