补充阅读内容(可以略过):
当今互联网上的音频和视频通讯服务技术一般都是私有的,它们需要安装插件或者客户端才能实现通讯。而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只是一个解决音视频流处理的框架,里面的核心还是与音视频相关的各个模块。我们都知道播放流媒体有几个必要步骤:
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)模块提供的播放模块进行播放。
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