FFmpeg入门详解之90:WEBRTC讲解

WebRTC简介

    WebRTC,名称源自网页实时通信(Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音通话或视频聊天的技术,是谷歌2010年以6820万美元收购Global IP Solutions公司而获得的一项技术。

WebRTC提供了实时音视频的核心技术,包括音视频的采集、编解码、网络传输、显示等功能,并且还支持跨平台:windows,linux,mac,android。

虽然WebRTC的目标是实现跨平台的Web端实时音视频通讯,但因为核心层代码的Native、高品质和内聚性,开发者很容易进行除Web平台外的移殖和应用。很长一段时间内WebRTC是业界能免费得到的唯一高品质实时音视频通讯技术。

WebRTC 是一项在浏览器内部进行实时视频和音频通信的技术,是谷歌于2010年以6820万美元收购VoIP软件开发商 Global IT Solutions 公司而获得一项技术,谷歌于2011年6月3日开源该项目。

谷歌在官方博客中称:“我们希望让浏览器成为实时通信的创新地所在,到目前为止,实时通信需要使用受版权保护的信号处理技术,并通过插件或下载客户端才能实现,而WebRTC则允许开发人员使用HTML和JavaScript API来创建实时应用。”

谷歌还称:“为此我们将与Mozilla和Opera等浏览器厂商密切合作,以便让更广泛的Web社区来部署这项技术。此外,我们还将与IETF和W3C工作组等标准机构合作,以定义一套实时通信标准。”

1.webrtc是什么

浏览器为音视频获取传输提供的接口

2.webrtc可以做什么

浏览器端到端的进行音视频聊天、直播、内容传输

3.数据传输需要些什么

IP、端口、协议

客户端、服务端

4.SDP协议

sdp协议:SDP信息相当于PC的名片 主要是协商两个端点在传输数据的时候一些配置

      数据格式:keyi=value

  

  SDP协商利用的是里请求和响应这两个模型(offer、answer),Offerer发给Answerer的请求消息称为请求offer,内容包括媒体流类型、各个媒体流使用的编码集,以及将要用于接收媒体流的IP和端口。

Answerer收到offer之后,回复给Offerer的消息称为响应,内容包括要使用的媒体编码,是否接收该媒体流以及告诉Offerer其用于接收媒体流的IP和端口。

在WebRTC连接流程中,在创建PeerConnectionA后,就会去创建一个offerSDP,并设置为localSDP。通过signaling发送 PeerB。 peerB收到peerA的SDP后,把收到的SDP设置为RemoteSDP。在设置完成后,PeerB再生成AnswerSDP,设置为localSDP,通过signaling通道发送给PeerA,PeerA收到后AnswerSDP后,设置为RemoteSDP,以上流程完成了SDP的交换。

5.STUN

允许应用程序发现自己和公网之间的中间件类型,

同时也能允许应用程序发现自己被NAT分配的公网IP,从而替代位于应用层中的私网地址,达到NAT穿透的目的

6.TURN

通过修改应用层中的私网地址达到NAT穿透

也是解决内网穿透的,这里是stun不能工作的时候采取的办法

相当于一个中转器即peerA->TURN-PeerB

7.ICE

交互式连接的建立

把STUN和TURN结合在一起的一个标准叫ICE(不是协议,是整合了STUN,TURN的框架)。利用STUN和TURN为连接提供正确的路由,然后寻找一系列双方可用地址按顺序测试地址,直到找到双方都可用的组合。

WebRTC整体架构

FFmpeg入门详解之90:WEBRTC讲解_第1张图片

1.绿色部分是WebRTC核心部分(核心库)

2.紫色部分是JS提供的API(应用层)

整体是应用层调用核心层。

核心层,第一层  C++ API

提供给外面的接口。最主要的是(PeerConnedtion  对等连接)。

核心层,第二层  Session

上下文管理层(音视频)。

核心层,第三层[最重要的部分]

音视频引擎  :编解码;音频缓冲BUFFER防止音频网络抖动NetEQ;回音消除;降噪;静音检测;

视频引擎  :编解码;jitter buffer防止视频网络抖动;图像处理增强;

传输:SRTP加密后的RTP;多路复用;P2P(STUN+TURN+ICE)

核心层,第四层 ,硬件相关层

音视频采集;  网络IO

WebRTC功能模块

    WebRTC实现了基于网页的视频会议,标准是WHATWG 协议,目的是通过浏览器提供简单的javascript就可以达到实时通讯(Real-Time Communications (RTC))能力。

    WebRTC(Web Real-Time Communication)项目的最终目的主要是让Web开发者能够基于浏览器(Chrome\FireFox\...)轻易快捷开发出丰富的实时多媒体应用,而无需下载安装任何插件,Web开发者也无需关注多媒体的数字信号处理过程,只需编写简单的Javascript程序即可实现,W3C等组织正在制定Javascript 标准API,目前是WebRTC 1.0版本,Draft状态;另外WebRTC还希望能够建立一个多互联网浏览器间健壮的实时通信的平台,形成开发者与浏览器厂商良好的生态环境。同时,Google也希望和致力于让WebRTC的技术成为HTML5标准之一,可见Google布局之深远。

WebRTC提供了视频会议的核心技术,包括音视频的采集、编解码、网络传输、显示等功能,并且还支持跨平台:windows,linux,mac,android。

下面切入本文的重点,做为一名音视频行业里的小混混,如果没听说过WebRTC那真是不认识大哥一样没有见识,说的可能有点夸大了,但是确实WebRTC在近几年对音视频实时通讯这个行业带来的颠覆是显而易见的,Google用他自己的魅力+实力征服了很多开发者,小编也是其中之一啦。但是跟随这项技术这么长时间来,他带给我们的确实可以说是行业内顶尖的技术,不说多,单说一个音频的回声消除你说你能搞定?那你确实牛B,小编佩服您这样的牛B人士,有空可以加个微信啥的。。。

WebRTC提供了视频会议的核心技术,包括音视频的采集、编解码、网络传输、显示等功能,并且还支持跨平台:windows,linux,mac,android, iOS等。

WebRTC中的任何的一个技术点都可以拿出来列一个专栏进行讨论,这里我们只能简单粗暴的罗列一下喽。

视频相关

视频采集---video_capture

    源代码在webrtc\modules\video_capture\main目录下,包含接口和各个平台的源代码。

    在windows平台上,WebRTC采用的是dshow技术,来实现枚举视频的设备信息和视频数据的采集,这意味着可以支持大多数的视频采集设备;对那些需要单独驱动程序的视频采集卡(比如海康高清卡)就无能为力了。

    视频采集支持多种媒体类型,比如I420、YUY2、RGB、UYUY等,并可以进行帧大小和帧率控制。

视频编解码---video_coding

    源代码在webrtc\modules\video_coding目录下。

    WebRTC采用I420/VP8编解码技术。VP8是google收购ON2后的开源实现,并且也用在WebM项目中。VP8能以更少的数据提供更高质量的视频,特别适合视频会议这样的需求。

视频加密--video_engine_encryption

    视频加密是WebRTC的video_engine一部分,相当于视频应用层面的功能,给点对点的视频双方提供了数据上的安全保证,可以防止在Web上视频数据的泄漏。

    视频加密在发送端和接收端进行加解密视频数据,密钥由视频双方协商,代价是会影响视频数据处理的性能;也可以不使用视频加密功能,这样在性能上会好些。

    视频加密的数据源可能是原始的数据流,也可能是编码后的数据流。估计是编码后的数据流,这样加密代价会小一些,需要进一步研究。

视频媒体文件--media_file

    源代码在webrtc\modules\media_file目录下。

    该功能是可以用本地文件作为视频源,有点类似虚拟摄像头的功能;支持的格式有Avi。

    另外,WebRTC还可以录制音视频到本地文件,比较实用的功能。

视频图像处理--video_processing

    源代码在webrtc\modules\video_processing目录下。

    视频图像处理针对每一帧的图像进行处理,包括明暗度检测、颜色增强、降噪处理等功能,用来提升视频质量。

视频显示--video_render

    源代码在webrtc\modules\video_render目录下。

    在windows平台,WebRTC采用direct3d9和directdraw的方式来显示视频,只能这样,必须这样。

网络传输与流控

    对于网络视频来讲,数据的传输与控制是核心价值。WebRTC采用的是成熟的RTP/RTCP技术。

音频相关

WebRTC的音频部分,包含设备、编解码(iLIBC/iSAC/G722/PCM16/RED/AVT、NetEQ)、加密、声音文件、声音处理、声音输出、音量控制、音视频同步、网络传输与流控(RTP/RTCP)等功能。

音频设备---audio_device

    源代码在webrtc\modules\audio_device\main目录下,包含接口和各个平台的源代码。

    在windows平台上,WebRTC采用的是Windows Core Audio和Windows Wave技术来管理音频设备,还提供了一个混音管理器。

    利用音频设备,可以实现声音输出,音量控制等功能。

音频编解码---audio_coding

    源代码在webrtc\modules\audio_coding目录下。

    WebRTC采用iLIBC/iSAC/G722/PCM16/RED/AVT编解码技术。

    WebRTC还提供NetEQ功能---抖动缓冲器及丢包补偿模块,能够提高音质,并把延迟减至最小。

    另外一个核心功能是基于语音会议的混音处理。

声音加密--voice_engine_encryption

    和视频一样,WebRTC也提供声音加密功能。

声音文件

    该功能是可以用本地文件作为音频源,支持的格式有Pcm和Wav。

    同样,WebRTC也可以录制音频到本地文件。

声音处理--audio_processing

    源代码在webrtc\modules\audio_processing目录下。

    声音处理针对音频数据进行处理,包括回声消除(AEC)、AECM(AEC Mobile)、自动增益(AGC)、降噪(NS)、静音检测(VAD)处理等功能,用来提升声音质量。

网络传输与流控

    和视频一样,WebRTC采用的是成熟的RTP/RTCP技术。

WebRTC的影响和前景

  WebRTC技术的快速普及将对现有的很多领域产生巨大的影响。 首先,受到影响的是现有的VoIP业务领域。目前我们正在经历一个硬件多样化的时代,比如可穿戴设备的兴起。这将促进适应新型设备的操作系统的涌现和加大现有操作系统的分化。因此,操作系统的异构性和繁杂性使得VoIP应用的开发、更新与维护的复杂性和成本剧增。随着WebRTC集成到浏览器中,基于Web的实时通信应用可以通过HTML标签和JavaScript API实现快速的开发,并避免了由于操作系统的异构性带来的重复开发和由于版本升级带来的维护费用以及不便。这将导致现有的应用开发人员从现有的基于浏览器插件或者原生VoIP应用模式转向使用WebRTC进行Web应用开发,进而使得现有的VoIP应用的普通用户向基于浏览器的Web应用的迁移。目前,涉及VoIP业务的客服以及在线教育领域很关注WebRTC技术在自身领域的应用。

  其次,现有的IM应用通过其拥有的大量用户,并通过构建在这些IM应用上的衍生应用形成生态圈。这些IM应用及其所形成的生态圈正在试图取代浏览器成为互联网入口。这种现象在移动智能终端表现的更加突出。然而,如上文所述,WebRTC技术的部署和使用将呈现爆炸式的增长,这将导致IM应用向IM Web应用的转变和用户向IM Web应用的迁移。因此,构建在现有IM应用的生态圈将被打破。现有的IM应用及其生态圈必将做出相应的布局调整以适应新的技术环境。

  同时,WebRTC的普及将给企业带来监管和安全问题。目前,有些公司在公司内部封锁了IM应用(比如QQ,Skype)的端口,以防止员工在工作过程中由于对音视频工具的不慎使用所造成的安全问题。基于WebRTC的新型IM Web应用,与正常的Web页面无异,所以很难检测该种IM Web应用。这给企业的监管和安全造成了巨大的隐患。

  其次,智能电视的展现形式和业务模式将受到巨大的影响。目前,智能电视主要包括智能操作系统以及显示设备。在智能电视上的主要业务也主要是对多媒体源的直播和点播。随着WebRTC的普及和涌现大量的IM Web应用,智能电视将很可能原生的包含摄像头设备。同时,视频会议业务也将像现在的对多媒体源的直播和点播业务一样,成为智能电视的主要业务。

  其次,所上文所述,由于WebRTC所支持的音视频格式的局限,以及WebRTC在多人视频会话中采用的可选网状结构的限制(目前是6人)。新型的服务供应商将产生。这些供应商主要提供1)不同视频编解码的转换;2)在多人会话中,视频流的整合与广播。目前,服务供应商及其产品有:Dialogic推出的PowerMedia XMS 2.1和英特尔推出的Collaboration Service for WebRTC。

  最后,集成了WebRTC的Web浏览器将进一步改变传统的应用、Web浏览器和操作系统的格局。Web浏览器将成为介于操作系统与Web应用的一个平台。为Web操作系统的普及进一步铺平道路。包含了WebRTC的浏览器将进一步巩固其互联网入口的地位——近些年,超级应用(例如微信)通过其拥有的大量用户和在其上的开发的衍生应用试图成为互联网入口。Web浏览器及其Web应用将成为一种生态圈。高性能浏览器的研发将成为下一个竞争热点。而浏览器的安全问题将更加凸显。

 

你可能感兴趣的:(音视频/流媒体,webrtc,android,音视频,流媒体)