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的一些通俗理解
特點
下面主要從音視頻流媒體進行講解, 因爲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