WebRTC(RTCWeb)学习--------阿冬专栏!!!!

WebRTC(RTCWeb)学习

 


   补充阅读内容(可以略过):

     当今互联网上的音频和视频通讯服务技术一般都是私有的,它们需要安装插件或者客户端才能实现通讯。而WebRTC可以内建于浏览器或者设备里面,应用开发人员能够通过HTML标签和JavaScript API就实现Web音频、视频通信功能。在这篇文章里面,他认为WebRTC的潜能非常巨大,它的崛起会给移动互联网带来巨大冲击。


     作为一项新技术,WebRTC(也叫RTCWEB,网络实时通信)将会给移动通讯行业带来海啸,并在很长一段时间内造成深远的影响。它们的想法就是把一些语音和视频技术植入到浏览器或者设备本身。这样一来,当开发者想启用语音或者视频通话的时候,他们就可以把这些已经存在的代码直接植入到里面去。

     作为一个串行IP通讯企业家和Hookflash的创始人,其团队打造了很多跟语音视频相关的应用程序。WebRTC技术能够大量减少开发者的繁重开发任务,并最终在新兴的移动网络里面占据一片江山。

     这个标准建立起来后,很多传统的VoIP服务供应商将会逐渐衰落和死亡。那些一成不变的移动运营商将会面临用户的大量流失,因为他们会往新的服务提供商“迁移”。传统的固话销售和移动语音的使用将会慢慢消失,现在所流行的电话网络将会一去不复还。

     想象一下这样的一个世界:不管我们在哪里使用什么设备进行通讯,它们都是免费的!不管是本地视频还是商业视频,WebRTC都能给我们这样的好处。


     当它迈向移动行业的时候,Google和苹果也顺理成章地“拥有”了这门技术标准。如果两个巨头同时推动WebRTC,并说服移动运营商参与其中,消费者将会非常受益。

     Google可能通过WebRTC看到一些巨大的前景。像Google+Hangouts视频群聊这些功能拥有数百万的用户,管理其终端用户软件部署存在不少复杂性。如果要减少甚至消除终端用户软件,WebRTC是一个非常有效的方法。

     设备制造商也会因此而被带到一个有利的位置。由于Google是WebRTC技术的主要推动者,而且拥有Android系统,我们可以推测那些基于Android系统的设备可以提供一些免费视频和语音服务。通过WebRTC开放标准,这些服务也可以跟其他服务交互操作,从而为用户带来更好的体验。这无疑也会帮助增长Google手机和平板的销售。

     而在WebRTC方面,苹果的举动少得让人有点不安。如果苹果不参与进来,大约有一半的移动市场是可以访问的。这也就是说,如果开发者是依靠WebRTC来实现语音和视频服务的话,就算他们应用程序推出的Android和iOS版本,他们只有一半的用户可以使用这个功能。不过话说回来,苹果也可以随时把这个技术融合到新版的iOS系统里面。从整个趋势来看,我认为苹果迟早也会参与进来的。

     对于当前用户所采用的通讯协议来说,Skype算是互联网上的一个标准。那么为什么Skype不能主导移动互联网呢?因为Skype只是设备里的一个应用程序,如果它一直是第三方应用软件的话,就不可能从移动互联网大战中胜出。尽管微软把Skype深度集成到自己的移动设备里面,那仅仅代表小份额市场。我不认为苹果和Google在短期内会把这个软件集成到自己的系统里面去。

     事实也证明,微软和Skype最近也加入到这个技术讨论里面去。他们的“迟到”带来了一些混乱,并导致相关机构需要多话六个月去执行新的标准方案。不管怎么说,他们的加入无疑是一件好事。

     开放标准的WebRTC项目的建设时间已经超过了一年,我们早期也看到了很多与WebRTC相关的演示。我认为在未来的6到9个月里,我们可以看到一些WebRTC的产品部署,到时候Android版的Firefox和Chrome将会测试版中对这门技术给予支持。Google似乎已经准本好将它部署到拥有庞大用户的视频群聊服务上。

     

WebRTC

概念(百科):

WebRtc的一些通俗理解


1、简单理解,WebRtc是一种用来实现网页B2B拨打音视频电话的技术;

2、提供音视频引擎,音视频编解码技术,音频支持G.711,opus,视频支持VP8,VP9(需视浏览器具体实现);

3、开源版本未做音频效果优化,比如回声抑制、降噪;

4、无信令,开发者需自行实现或选用现有协议比如sip,推荐的方式是找开源客户端如JSSip;

5、仅支持P2P,会带来穿越问题,多方通话不支持,想实现该功能需开发者自行实现服务器,推荐的方式是找软交换服务器实现媒体代理,同时也解决了穿越问题如freeswitch;

6、支持较好的浏览器是谷歌、火狐,目前主要是谷歌及一些音视频服务提供商在推比如声网,尚未得到微软和苹果的支持;


7、开始编译就有一定难度,中文书籍稀缺,《Webrtc权威指南》近期将出版中文版;

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

特点

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布局之深远。 [1]  
WebRTC提供了视频会议的核心技术,包括音视频的采集、编解码、网络传输、显示等功能,并且还支持跨平台:windows,linux,mac,android。

      下面主要从音视频流媒体进行讲解, 因为webrtc只是一个解决音视频流处理的框架,里面的核心还是与音视频相关的各个模块。我们都知道播放流媒体有几个必要步骤:

1,获取原始媒体信息(音频、视频),该步要有相应的设备,如摄像头和麦克风;

2,编码媒体信息,大家可以用ffmpeg编码,也可以用其他开源的程序,比如libaac,;

3,传输编码压缩好的媒体信息,如采用http、rtsp/rtp、rtmp、rtmfp、hls等协议;

4,接受媒体信息,此时将会获取到传输过来的音频和视频信息;

5,解码媒体信息,将传输过来的音视频信息分别进行解码;

6,播放显示,播放声音需要有扬声器,显示视频需要用显卡。

 

无论是webrtc还是其他神马的流媒体框架都逃不出这个基本步骤,webrtc在此步骤中,抽象出两个模块即音频引擎和视频引擎分别解决音频和视频各自的获取传输播放。

 

音频引擎:

    1,在webrtc中有个音频获取模块(audio_device),该模块是个跨平台的模块,能够使用与windows、iphone、linux等相应的桌面系统和手机系统之上,进行音频采集;

    2,由于通过mic采集音频数据会有噪音、回音等其他声音的干扰,webrtc专门提供了一个模块(audio_processing)对采集到的声音进行降噪,回音消除(aec)等处理。 对于音频的静音检测(vad)模块在common_audio工程之中;

    3,原始声音准备好了,我没就要进行编码压缩,webrtc提供了libc,isac、g711、g722以及新增了opus格式,看工程名字可以找出相应模块的源码;

     4,声音以及编码压缩,下面当然是进行传输了,看工程就有很多以RTP为前缀的工程名字,所以当然采用的是使用RTP协议传输,RTP传输因为是UDP存在丢包的问题,webrtc也采用的相应的网络抖动进行处理,防止丢包;

     5,接受肯定也是使用RTP协议进行接收,然后调用步骤三种使用的编码格式提供的解码接口,

     6,解码的音频数据将通过(audio_device)模块提供的播放模块进行播放。

架构组件介绍

(1) Your Web App
Web开发者开发的程序,Web开发者可以基于集成WebRTC的浏览器提供的web API开发基于视频、音频的实时通信应用。 [1]  
(2)Web API
面向第三方开发者的WebRTC标准API(Javascript),使开发者能够容易地开发出类似于网络视频聊天的web应用,最新的标准化进程可以查看这里。 [2]  
这些API可分成Network Stream API、 RTCPeerConnection、Peer-to-peer Data API三类,详细的API说明可以看这里。
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
图像质量增强模块
对网络摄像头采集到的图像进行处理,包括明暗度检测、颜色增强、降噪处理等功能,用来提升 视频质量。

视频

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(AEC Mobile)、自动增益(AGC)、降噪(NS)、静音检测(VAD)处理等功能,用来提升声音质量。
网络传输与流控
和视频一样,WebRTC采用的是成熟的RTP/RTCP技术。



WebRTC编译详细介绍

WebRTC技术交流群:234795279


原文地址:http://blog.csdn.net/temotemo/article/details/7056581


WebRTC编译

本人环境:

操作系统:XP SP3

VS 2008


编译源码之前所需的工具


获取源码工具:

1、 首先需要安装获取源码的工具SVN(项目代码版本管理工具,Google也用这个)

TortoiseSVN 1.6.12

http://sourceforge.net/projects/tortoisesvn/

2、下载并安装msysgit和Tortoisegit

   msysgit:http://code.google.com/p/msysgit/downloads/list

                选择Git-1.7.4-preview20110204.exe,下载并安装

   Tortoisegit:http://code.google.com/p/tortoisegit/downloads/list

                选择适合自己系统的版本,下载并安装(注:Tortoisegit只是一个gui,必须安装msysgit)

                Tortoisegit安装时会找到git目录并自动配置好。

    把msysgit中bin目录手动添加到系统环境变量PATH中,比如我的目录是“D:/ProgramFiles/Git/bin”

 

3. 下载并安装Python,建议安装Python2.6,比如安装在C盘

安装将C:\Python26执行目录自动被添加入系统环境变量PATH中。

(WebRTC是用C++写的为什么要用到Python,因为WebRTC源码和depot_tools里面有很多.py的Python程序,用于配置项目,生成各种环境下的工程文件)

 

官方要求说明:

http://www.webrtc.org/reference/getting-started/prerequisite-sw

1、 Depot Tools

1. You'll need to have the depot tools installed:

https://sites.google.com/a/chromium.org/dev/developers/how-tos/depottools

 

2. You need git installed (needed for getting WebM source):

http://git-scm.com/

/*====================================================*/


好了,外部工具准备得差不多了

4. 下载并配置depot_tools

 很多人都建议建立一个存放depot_tools的目录,command进入该目录

svn co http://src.chromium.org/svn/trunk/tools/depot_tools

这在Linux下面应该是要这样做的,不过在Windows系统下,我觉得这样做更方便一点:

推荐操作:

由于之前安装了SVN、Git等工具,所以我们可以直接这样取depot_tools工具:

回到桌面,右击


直接选择SVN Checkout


将  http://src.chromium.org/svn/trunk/tools/depot_tools  填到URL of respository去,Checkout directory可以自己随便指定你要存盘的路径(建议存在不要有中文的路径,因为一会要添加到系统的PATH的),其他默认,然后点击OK,自动下载,就可以拿到depot_tools工具了。

 

重头戏来了!获取WebRTC源码:

源码网址为   http://webrtc.googlecode.com/svn/trunk/

5. 为了把源码抓下来,可以建立一个WebRTC的源码目录

比如D:\WebRTC

一般操作:(不推荐)

用DOS命令进入该目录,然后

svn checkout http://webrtc.googlecode.com/svn/trunk/

下载完成后, WebRTC下会得到一个默认名为trunk的文件夹,里头就是WebRTC源码了,只是源码而已,并没有编译的相应工程文件。

然后

>gclient config https://webrtc.googlecode.com/svn/trunk     (要下载1个多G的文件,网速不好的,可以去玩一盘dota回来)

>gclient sync --force     (同步项目文件)

> gclient runhooks --force     (生产各种项目文件,像VS项目文件webrtc.sln文件,Linux的MakeFile文件)

等等…可是我发现很多尝试编译WebRTC的同学在DOS命令进入操作就出现了各种问题了、、、

比如:Installing subversion ...

[-] XMLHTTP 80072ee2: Cannot make HTTP request (操作超时

... Failed to checkout svn automatically.

Please visit http://subversion.tigris.org to download the latestsubversion clie

nt

before continuing.(这个是网络连接问题,多试几次)

 

F:\WEBRTC\webrtc>gclient.bat confighttps://webrtc.googlecode.com/svn/trunk

Installing python ...(这个是配置问题)

 

等等令人抓狂的问题。本来我们已经安装好了python、SVN了,怎么还需要Installing呢、、、而且会让你等很久,郁闷吧!

推荐操作:

但是我这样做更好:

选择WebRTC文件夹,右击->


然后选择Git Bash,然后就直接进入该目录了:(如下图)


OK了,是时候获取WebRTC源码来生产工程了(如果单纯是为了获取WebRTC源码,完全可以按照获取depot_tools那样来操作,但是我们还要获取完源码后需要生产工程文件的)

第一步,拿源代码:svn checkout http://webrtc.googlecode.com/svn/trunk/   (源文件不是很大,几十M)

第二步,拿项目工程相关配置文件:gclient config https://webrtc.googlecode.com/svn/trunk    (文件很大,1G多,要等很久哦)

第三步,与Google同步项目文件,获取最新工程:gclient sync --force

第四步,生产各平台的项目文件:gclient runhooks --force

注意:在第四步之前,如果在Windows平台下,需要安装Windows的DirectX SDK和SDK 7.1

下载地址:

SDK 7.1:

http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=8279

DirectX SDK:

       http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=6812

再注意:

安装SDK 7.1的时候,一定要注意SDK 7.1的安装路径,因为在WebRTC项目在配置中有规定,配置文件在.. .\trunk\src\build 名为common.gypi 的文件

如图:


就是说Google默认SDK 7.1安装在C盘下,如果同学你不想安装在C盘下,那么就要修改一下这个配置文件了,不然的话,执行第四步的时候就会出现各种warning问题的。

如果不想安装SDK,可以从这里下所依赖的文件:

svn co http://vsfiltermod.googlecode.com/svn/trunk/src/BaseClasses,然后把文件放置在这个路径:C:/ProgramFiles/Microsoft SDKs/Windows/v7.1/Samples/multimedia/directshow/baseclasses

 

如果你顺利完成以上四步的话,而且在第四步的时候没有出现什么问题的话,那么恭喜你,就可以在trunk目录下看到Windows系统平台下的webrtc.sln项目工程文件了。Linux的项目文件在trunk\build的install-build-deps.sh脚本。还有Mac OS和Android等等。。。

 

Linux平台需要安装的东西更多:

g++ (>= 4.2)

  python (>= 2.4)

  libasound2-dev

  libpulse-dev

  libjpeg62-dev

  libxv-dev

  libgtk2.0-dev

  libexpat1-dev

 

For 32-bit builds on a 64-bit system:

  lib32asound2-dev

  ia32-libs

 

好了,本人是在VS 2008上研究的,打开webrtc.sln,然后生成解决方案,目前为止已经解决方案里有122个项目,音频引擎,视频引擎,还有很多测试代码,视频聊天测试,API测试,自动测试,VP8和H.264编码测试,声音测试,通道测试、、、等等,全部生成完成大概半个小时左右。。。、、、OK,Enjoy!

编译时要注意,解决方案的配置:

保证有如下配置:包含文件 DirectX SDK\Include和$(WindowsSdkDir)\include



库文件:DirectX SDK\Lib\x86    DirectX SDK\Lib   SDKs\Windows\v7.1\Lib




你可能感兴趣的:(WebRTC)