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來實現語音和視頻服務的話,就算他們應用程序推出的AndroidiOS版本,他們只有一半的用戶可以使用這個功能。不過話說回來,蘋果也可以隨時把這個技術融合到新版的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




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章