WEBRTC

WebRTC

目录

简介

架构

1.    WebRTC架构组件介绍

2.    Network Stream API

3.    RTCPeerConnection

4.    Peer-to-peer Data API

相关

分析

1.    视频

2.    音频

展开

简介

架构

1.    WebRTC架构组件介绍

2.    Network Stream API

3.    RTCPeerConnection

4.    Peer-to-peer Data API

相关

分析

1.    视频

2.    音频

展开

编辑本段简介

  WebRTC是一项在浏览器内部进行实时视频和音频通信的技术,是谷歌2010年以6820万美元收购Global IP Solutions公司而获得一项技术。[1]

  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布局之深远。[2]

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

编辑本段架构

  

  

WebRTC架构图

  架构图颜色标识说明:[3]

  (1)紫色部分是Web开发者API层;

  (2)蓝色实线部分是面向浏览器厂商的API层

  (3)蓝色虚线部分浏览器厂商可以自定义实现

WebRTC架构组件介绍

  (1) Your Web App

  Web开发者开发的程序,Web开发者可以基于集成WebRTC的浏览器提供的web API开发基于视频、音频的实时通信应用。[2]

  (2) Web API

  面向第三方开发者的WebRTC标准API(Javascript),使开发者能够容易地开发出类似于网络视频聊天的web应用,最新的标准化进程可以查看这里

  这些API可分成Network Stream API、 RTCPeerConnection、Peer-to-peer Data API三类,详细的API说明可以看这里[4]

Network Stream API

  MediaStream:MediaStream用来表示一个媒体数据流。

  MediaStreamTrack在浏览器中表示一个媒体源。

RTCPeerConnection

  RTCPeerConnection: 一个RTCPeerConnection对象允许用户在两个浏览器之间直接通讯。

  RTCIceCandidate :表示一个ICE协议的候选者。

  RTCIceServer:表示一个ICE Server。

Peer-to-peer Data API

  DataChannel:数据通道( DataChannel)接口表示一个在两个节点之间的双向的数据通道。

  (3) WebRTC Native C++ API

  本地C++ API层,使浏览器厂商容易实现WebRTC标准的Web API,抽象地对数字信号过程进行处理。

  (4) Transport / Session

  传输/会话层

  会话层组件采用了libjingle库的部分组件实现,无须使用xmpp/jingle协议

  a. RTP Stack协议栈

  Real Time Protocol

  b. STUN/ICE

  可以通过STUN和ICE组件来建立不同类型网络间的呼叫连接。

  c. Session Management

  一个抽象的会话层,提供会话建立和管理功能。该层协议留给应用开发者自定义实现。

  (5) VoiceEngine

  音频引擎是包含一系列音频多媒体处理的框架,包括从视频采集卡网络传输端等整个解决方案。

  PS:VoiceEngine是WebRTC极具价值的技术之一,是Google收购GIPS公司后开源的。在VoIP上,技术业界领先,后面的文章会详细了解

  a. iSAC

  Internet Speech Audio Codec

  针对VoIP和音频流的宽带和超宽带音频编解码器,是WebRTC音频引擎的默认的编解码器

  采样频率:16khz,24khz,32khz;(默认为16khz)

  自适应速率为10kbit/s ~ 52kbit/;

  自适应包大小:30~60ms;

  算法延时:frame + 3ms

  b. iLBC

  Internet Low Bitrate Codec

  VoIP音频流的窄带语音编解码器

  采样频率:8khz;

  20ms帧比特率为15.2kbps

  30ms帧比特率为13.33kbps

  标准由IETF RFC3951和RFC3952定义

  c. NetEQ for Voice

  针对音频软件实现的语音信号处理元件

  NetEQ算法:自适应抖动控制算法以及语音包丢失隐藏算法。使其能够快速且高解析度地适应不断变化的网络环境,确保音质优美且缓冲延迟最小。

  是GIPS公司独步天下的技术,能够有效的处理由于网络抖动和语音包丢失时候对语音质量产生的影响。

  PS:NetEQ 也是WebRTC中一个极具价值的技术,对于提高VoIP质量有明显效果,加以AEC\NR\AGC等模块集成使用,效果更好。

  d. Acoustic Echo Canceler (AEC)

  回声消除器是一个基于软件的信号处理元件,能实时的去除mic采集到的回声。

  e. Noise Reduction (NR)

  噪声抑制也是一个基于软件的信号处理元件,用于消除与相关VoIP的某些类型的背景噪声(嘶嘶声,风扇噪音等等… …)

  (6) VideoEngine

  WebRTC视频处理引擎

  VideoEngine是包含一系列视频处理的整体框架,从摄像头采集视频到视频信息网络传输再到视频显示整个完整过程的解决方案。

  a. VP8

  视频图像编解码器,是WebRTC视频引擎的默认的编解码器

  VP8适合实时通信应用场景,因为它主要是针对低延时而设计的编解码器。

  PS:VPx编解码器是Google收购ON2公司后开源的,VPx现在是WebM项目的一部分,而WebM项目是Google致力于推动的HTML5标准之一

  b. Video Jitter Buffer

  视频抖动缓冲器,可以降低由于视频抖动和视频信息包丢失带来的不良影响。

  c. Image enhancements

  图像质量增强模块

  对网络摄像头采集到的图像进行处理,包括明暗度检测、颜色增强、降噪处理等功能,用来提升视频质量

编辑本段相关

  谷歌2011年6月3日宣布向开发人员开放WebRTC架构的源代码。这个源代码将根据没有专利费的BSD(伯克利软件发布)式的许可证向用户提供。[5]目前,开发人员可访问并获取WebRTC的源代码、规格说明和工具等。[1]

编辑本段分析

视频

  WebRTC的视频部分,包含采集、编解码(I420/VP8)、加密、媒体文件、图像处理、显示、网络传输与流控(RTP/RTCP)等功能。

  视频采集---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、自动增益(AGC)、降噪处理等功能,用来提升声音质量。

  网络传输与流控   

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

 

 

http://sites.google.com/site/webrtc/

 

1WebRTC目的

       

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

 

 

2WebRTC架构图

 

架构图颜色标识说明:

1)紫色部分是Web开发者API层;

2)蓝色实线部分是面向浏览器厂商的API层(也就是红色框标内模块,也是本人专注研究的部分)

3)蓝色虚线部分浏览器厂商可以自定义实现

 

3WebRTC架构组件介绍

 

(1) Your Web App
Web开发者开发的程序,Web开发者可以基于集成WebRTC的浏览器提供的web API开发基于视频、音频的实时通信应用。

 

(2) Web API
面向第三方开发者的WebRTC标准API(Javascript),使开发者能够容易地开发出类似于网络视频聊天的web应用,最新的标准化进程可以查看这里

(3) WebRTC Native C++ API
本地C++ API层,使浏览器厂商容易实现WebRTC标准的Web API,抽象地对数字信号过程进行处理。

 

(4) Transport / Session

传输/会话层

会话层组件采用了libjingle库的部分组件实现,无须使用xmpp/jingle协议

a.  RTP Stack协议栈
Real Time Protocol

b.  STUN/ICE
可以通过STUN和ICE组件来建立不同类型网络间的呼叫连接。

c.  Session Management
一个抽象的会话层,提供会话建立和管理功能。该层协议留给应用开发者自定义实现。

 

(5) VoiceEngine
音频引擎是包含一系列音频多媒体处理的框架,包括从视频采集卡到网络传输端等整个解决方案。
PS:VoiceEngine是WebRTC极具价值的技术之一,是Google收购GIPS公司后开源的。在VoIP上,技术业界领先,后面的文章会详细了解

 

a.  iSAC

Internet Speech Audio Codec

针对VoIP和音频流的宽带和超宽带音频编解码器,是WebRTC音频引擎的默认的编解码器
采样频率:16khz,24khz,32khz;(默认为16khz)
自适应速率为10kbit/s ~ 52kbit/;
自适应包大小:30~60ms;
算法延时:frame + 3ms

 

b.  iLBC
Internet Low Bitrate Codec
VoIP音频流的窄带语音编解码器
采样频率:8khz;
20ms帧比特率为15.2kbps
30ms帧比特率为13.33kbps
标准由IETF RFC3951和RFC3952定义


c.  NetEQ for Voice

针对音频软件实现的语音信号处理元件

NetEQ算法:自适应抖动控制算法以及语音包丢失隐藏算法。使其能够快速且高解析度地适应不断变化的网络环境,确保音质优美且缓冲延迟最小。

是GIPS公司独步天下的技术,能够有效的处理由于网络抖动和语音包丢失时候对语音质量产生的影响。

PS:NetEQ 也是WebRTC中一个极具价值的技术,对于提高VoIP质量有明显效果,加以AEC\NR\AGC等模块集成使用,效果更好。

 

d.  Acoustic Echo Canceler (AEC)
回声消除器是一个基于软件的信号处理元件,能实时的去除mic采集到的回声。

 

e.  Noise Reduction (NR)
噪声抑制也是一个基于软件的信号处理元件,用于消除与相关VoIP的某些类型的背景噪声(嘶嘶声,风扇噪音等等… …)

 

(6) VideoEngine
WebRTC视频处理引擎
VideoEngine是包含一系列视频处理的整体框架,从摄像头采集视频到视频信息网络传输再到视频显示整个完整过程的解决方案。

 

a.  VP8
视频图像编解码器,是WebRTC视频引擎的默认的编解码器
VP8适合实时通信应用场景,因为它主要是针对低延时而设计的编解码器。
PS:VPx编解码器是Google收购ON2公司后开源的,VPx现在是WebM项目的一部分,而WebM项目是Google致力于推动的HTML5标准之一

 

b.  Video Jitter Buffer
视频抖动缓冲器,可以降低由于视频抖动和视频信息包丢失带来的不良影响。

 

c.  Image enhancements
图像质量增强模块
对网络摄像头采集到的图像进行处理,包括明暗度检测、颜色增强、降噪处理等功能,用来提升视频质量。

 

 

4WebRTC核心模块API

 

(1)、网络传输模块:libjingle

WebRTC重用了libjingle的一些组件,主要是network和transport组件,关于libjingle的文档资料可以查看这里

 

(2)、音频、视频图像处理的主要数据结构

常量\VideoEngine\VoiceEngine

 

注意:以下所有的方法、类、结构体、枚举常量等都在webrtc命名空间里  

类、结构体、枚举常量

头文件

说明

Structures

common_types.h

Lists the structures common to the VoiceEngine & VideoEngine

Enumerators

common_types.h

List the enumerators common to the  VoiceEngine & VideoEngine

Classes

common_types.h

List the classes common to VoiceEngine & VideoEngine

class VoiceEngine

voe_base.h

How to allocate and release resources for the VoiceEngine using factory methods in the VoiceEngine class. It also lists the APIs which are required to enable file tracing and/or traces as callback messages

class VideoEngine

vie_base.h

How to allocate and release resources for the VideoEngine using factory methods in the VideoEngine class. It also lists the APIs which are required to enable file tracing and/or traces as callback messages

 

(3)、音频引擎(VoiceEngine)模块 APIs

 

下表列的是目前在 VoiceEngine中可用的sub APIs

sub-API

头文件

说明

VoEAudioProcessing

voe_audio_processing.h

Adds support for Noise Suppression (NS), Automatic Gain Control (AGC) and Echo Control (EC). Receiving side VAD is also included.

VoEBase

voe_base.h

Enables full duplex VoIP using G.711.
NOTE:
 This API must always be created.

VoECallReport

voe_call_report.h

Adds support for call reports which contains number of dead-or-alive detections, RTT measurements, and Echo metrics.

VoECodec

voe_codec.h

Adds non-default codecs (e.g. iLBC, iSAC, G.722 etc.), Voice Activity Detection (VAD) support.

VoEDTMF

voe_dtmf.h

Adds telephone event transmission, DTMF tone generation and telephone event detection. (Telephone events include DTMF.)

VoEEncryption

voe_encryption.h

Adds external encryption/decryption support.

VoEErrors

voe_errors.h

Error Codes for the VoiceEngine

VoEExternalMedia

voe_external_media.h

Adds support for external media processing and enables utilization of an external audio resource.

VoEFile

voe_file.h

Adds file playback, file recording and file conversion functions.

VoEHardware

voe_hardware.h

Adds sound device handling, CPU load monitoring and device information functions.

VoENetEqStats

voe_neteq_stats.h

Adds buffer statistics functions.

VoENetwork

voe_network.h

Adds external transport, port and address filtering, Windows QoS support and packet timeout notifications.

VoERTP_RTCP

voe_rtp_rtcp.h

Adds support for RTCP sender reports, SSRC handling, RTP/RTCP statistics, Forward Error Correction (FEC), RTCP APP, RTP capturing and RTP keepalive.

VoEVideoSync

voe_video_sync.h

Adds RTP header modification support, playout-delay tuning and mo

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值