Android WebRTC 音視訊開發總結(一)

yangxi_001發表於2015-04-21

本系列文章主要總結和分享WebRTC開發過程中的一些經驗,轉載請說明出處(部落格園RTC.Blacker),更多交流與合作請看頁面上方的子標題!

 

一、WebRTC是什麼?

    可能您還不知道WebRTC是什麼,但您一定用過他裡面的東西,因為QQ就用到了他的核心技術,不過那時候這些東西還不叫WebRTC,他也還掌握在GIPS手裡(他們家的語音技術可謂獨步天下),而且當年小馬哥也給人家交了不少USD,扯遠了。

 

    WebRTC是Google於2011年6月3日開源的即時通訊專案,旨在使其成為客戶端視訊通話的標準。其實在Google將WebRTC開源之前,微軟和蘋果各自的通訊產品已佔用很大市場份額(如Skype),Google也是為了快速擴大市場,所以將他給開源。經常接觸開源的人應該很容易理解Google這種策略,只不過在國內大家都喜歡弄成SDK,然後按年按月按使用者數給你收費,總讓你覺得不爽,呵呵。

 

    剛接觸WebRTC的時候你會被裡面的一堆概念搞暈,特別是對沒接觸過音視訊的人來說,如WebRTC, ICE, STUN, TURN, P2P, NAT, Jingle, TALK, VOIP, FFMPEG, H264, VP8, NACK, RTP, RTCP, RTSP, RTMP, SIP, XMPP, ISAC, ILBC, OPUS, G711, G722.   暈了吧,凡事都要有個過程的,一步步來吧!不懂了就問問度娘或GOOGLE,再不懂就發個郵件給我(左邊有聯絡方式),我們們一起交流,不過問之前請先將問題描述清楚,節省大家時間也便於交流。

 

   如果想簡單測試效果,可以試試我自己搞的東東:

   1.  http://www.cnblogs.com/lingyunhu/p/rtc23.html

   2.  http://www.cnblogs.com/lingyunhu/p/3722029.html

 

   如果想快速瞭解開發過程,可以看看我整理和翻譯的東東:

   1.  http://www.cnblogs.com/lingyunhu/p/4129425.html

   2.  http://www.cnblogs.com/lingyunhu/p/4058182.html

 

二、WEBRTC程式碼如何獲取和編譯。

1、下載編譯:做這個動作前您最好先確認您是否需要做這個動作,如果僅僅做基於瀏覽器的開發您可以略過這個步驟,因為您要的東西瀏覽器都幫您做好了。

2、環境準備:對剛入門的人來說編譯WEBRTC很頭疼,特別是對沒接觸過linux的人來說,雖然網上有很多資料,但是實際編譯過程中總會出現這樣或那樣的錯誤,很多錯誤都不知所措。其實編譯不過的主要原因就是有些檔案下載不下來(因為國家防火牆限制),所以這裡給出一個編譯WebRTC的最簡單的解決方案:

A、買一個付費的VPN賬號。

B、參考:http://www.webrtc.org/reference/getting-started,很詳細,看仔細。

這個方案屢試不爽,我已經成功編譯過好幾次了,如果還有問題可以聯絡我(andorid開發者來說最好使用ubuntu 64位環境,不要在windows下面搞。

C、最近這個程式碼越來越難下了,所以我也不會去輕易更新,或者我就直接去香港下載,強吧!

 

三、執行WebRTCDemo

A、安裝WebRTC/Trunk/out/WebRTCDemo-debug.apk,他支援點對點視訊,在其SETTINGS頁籤中設定好對方IP,點選MAIN頁籤中的StartCall即可與對方開始視訊通話

 

 

四、AppRTCDemo如何使用?

    WebRTCDemo可以直接做成P2P的效果,AppRTCDemo則需要另外一個服務端(也可直接連線:https://apprtc.appspot.com/),當然你也可以自己部署這個服務端,他是利用libjingle和XMPP來處理信令互動的,而且基於ICE協議實現P2P,至於什麼是ICE,什麼是STUN,TURN我在後面的文章中都有陸續講到。

 

    AppRTCDemo的最大問題就是很多人不知道服務端怎麼部署,而且他也沒有實現手機對手機的效果,這個應用是很廣泛的,最起碼有智慧家居,安防監控等行業的使用者就請我幫他們做過這方面的技術支援,所以後面我打算將它做成一個通用的產品,供別人學習和使用。目前android和服務端已經完成了,IOS正在抽時間處理。

 

五、WebRTC的工程檔案在不同專案如何管理?

    因為WebRTC是跨平臺的,支援mac,windows,linux,但不同平臺下用的工程檔案格式不一樣,如VisualStudio下是.vcproj,是每個開發平臺下手動建立自己的工程檔案嗎?答案是否定的,他是通過.gyp檔案來管理的,說白了.gyp檔案相當於是他的工程描述檔案,類似JSON格式,不同平臺下編譯的時候根據.gyp檔案產生對應格式的工程檔案,如.vcproj。

 

    說到這裡就得談談它的編譯方式ninja,搞chrome的那些程式設計師估計是受不了make的編譯速度,所以開發了ninja。所以如果執行gclient runhooks的時候會生成很多*.ninja檔案(這些檔案在out目錄下),ninja就是根據這些檔案進行編譯的,這些檔案語法都比較簡單,基本上都是rule和build,這樣就產生了ninja的優勢----快速編譯,他很多條件都是預先決定的,比make快好多好多!

相關文章