webrtc簡單介紹以及用法(native)

本文不適合JS調用方法,但是可以參考,原理大同小異。

適用於JAVA,OC,C++。其實也就是相關平臺WINDOWS,IOS,android,linux。


官方的接口和使用流程如下:

https://webrtc.org/native-code/native-apis/

可能有些難以看懂。那麼可以先看我的使用方法,再回去看官方文檔。


先介紹webrtc,其實他是一個客戶端用的東西。主要包含音視頻相關以及P2P服務這兩大塊功能。

音視頻提供了編解碼,回聲消除,聲音增益,去噪。

P2P則封裝了SDP協議消息,與turn服務器通信。

也就是說,它是一個無關使用邏輯,僅提供模塊功能的強大庫。


RTCPeerConnection就是webrtc用來創建客戶端連接和視頻通訊的API.爲了初始化這個過程 RTCPeerConnection有兩個任務:


1,確定本地媒體條件,如分辨率,編解碼能力,這些需要在offer和answer中用到.

2,取到應用程序所在機器的網絡地址,即稱作candidates.

一旦上面這些東西確定了,他們將通過信令機制和遠端進行交換.

舉個例子說它的使用邏輯以及僞碼:


A呼叫B,這裏有2條線,一條是互相交換媒體信息,網絡地址,另一條是與TURN服務器的打洞:

線路1:

1,A通過PeerConnectionFactory創建一個 RTCPeerConnection對象.

安卓用戶記得調用initializeAndroidGlobals初始化環境,否則會奔潰。

ICE服務初始化

PeerConnection.IceServer ice = new PeerConnection.IceServer(IceAddr, user, password);
ices.add(ice);

創建本地媒體

MediaConstraints audioMC = new MediaConstraints();
AudioSource as = pcf.createAudioSource(audioMC);
AudioTrack at = pcf.createAudioTrack("localaudiotrack", as);
localMS = pcf.createLocalMediaStream("localmediastream");
localMS.addTrack(at);

2,A創建一個offer(即SDP會話描述)通過RTCPeerConnection createOffer()方法.

3,A調用setLocalDescription()方法用他的offer.

4,A通過信令機制(這些用戶自己實現)將他的offer發給Eve.

5,B調用setRemoteDescription()方式設置A的offer,因此他的RTCPeerConnection知道了A的設置.

setRemoteDescription(this, _remoteSDP);

6,B調用方法createAnswer(),然後會觸發一個callback,這個callback裏面可以得到自己的answer.

7,B設置他自己的ansew通過調用方法setLocalDescription().

8,B通過信令機制將他的answer發給A.

9,A設置B的answer通過方法setRemoteDescription().


線路2:

另外A和B也需要交換網絡信息(即candidates)

這個candidates是描述和TURN的交互信息。可能有洞的變化,等等。明白UDP打洞的會直接明白,可以看看我的另一篇博客(http://blog.csdn.net/mqdchalali/article/details/52893160)。

1,A創建RTCPeerConnection對象時設置了onicecandidate handler.

2,hander被調用當candidates找到了的時候(就是說A和TURN服務器有了交互,找到了傳輸數據的通道,可能是中轉,可能是P2P通道,這些是透明的用戶無法看到).

3,當B收到來自A的candidate消息的時候,他調用方法addIceCandidate(),添加candidate到遠端描述裏面.


也就是說,我們只需要實現自己的信令服務器,配合上面的流程就可以使用。

具體的代碼細節,建議去看官方的安卓demo,或者C++版本的demo。

下載源碼後,路徑如下:

 webrtc-master-webrtc\examples\androidapp\  

webrtc-master-webrtc\examples\peerconnection\client\




舉個例子說它的使用邏輯:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章