WebRTC 學習之 WebRTC 簡介

本文使用的WebRTC相關API都是基於Intel® Collaboration Suite for WebRTC的。html

相關文檔連接:https://software.intel.com/sites/products/documentation/webrtc/android/index.htmlandroid

1.什麼是WebRTC

咱們都知道瀏覽器自己不支持相互之間創建信道進行通訊,都須要經過服務器進行中轉。好比如今有兩個客戶端—甲、乙,他倆想要進行通訊,首先須要甲和服務器、乙和服務器之間創建信道。甲給乙發送消息時,甲先將消息發送到服務器上,服務器對甲的消息進行中轉,發送到乙處,反過來也是同樣。這樣甲與乙之間的一次消息要經過兩段信道,通訊的效率同時受制於這兩段信道的帶寬。同時這樣的信道並不適合數據流的傳輸,如何創建瀏覽器之間的點對點傳輸,一直困擾着開發者。所以WebRTC應運而生。web

WebRTC是一個開源項目,旨在使得瀏覽器能爲實時通訊(RTC)提供簡單的JavaScript接口。說的簡單明瞭一點就是讓瀏覽器提供JS的即時通訊接口。這個接口所創立的信道並非像WebSocket同樣,打通一個瀏覽器與WebSocket服務器之間的通訊,而是經過一系列的信令,創建一個瀏覽器與瀏覽器之間(peer-to-peer)的信道,這個信道能夠發送任何數據,而不須要通過服務器。而且WebRTC經過實現MediaStream,經過瀏覽器調用設備的攝像頭、話筒,使得瀏覽器之間能夠傳遞音頻和視頻。目前此開源項目也支持Android、IOS了,使得Android和IOS設備做爲終端設備可以像瀏覽器同樣,進行即時通訊。本文基於Intel® Collaboration Suite for WebRTC的SDK來進行相關的講解。瀏覽器

2.WebRTC的構成

WebRTC有三個重要的部分:MediaStream、RTCPeerConnection、RTCDataChannel。服務器

下面分別說明他們的做用:ui

MediaStream:經過設備的攝像頭及話筒得到視頻、音頻的同步流url

PeerConnection: 用於構建點對點之間穩定、高效的流傳輸的組件spa

DataChannel:可以使得瀏覽器之間(點對點)簡歷一個高吞吐量、低延時的信道,用於傳輸任何數據視頻

2.1 Android WebRTC MediaStream 媒體流

媒體流基本的概念能夠理解,這裏就很少闡述了,下面說明一下在SDK裏面經過查看源碼瞭解到的幾個class的繼承關係,其餘的不作贅述htm

本地流:Stream --> LocalStream --> LocalCameraStream

遠端流:Stream --> RemoteStream --> RemoteScreenStream、RemoteCameraStream

But : 目前不清楚RemoteScreenStream、RemoteCameraStream 之間的區別到底在哪裏,有待研究......

2.2 Android WebRTC PeerConnection 對等鏈接

PeerConnection是WebRTC技術的主要API,此API的功能主要作的事情是在兩個瀏覽器之間創建媒體和數據鏈接路徑。PeerConnection不單單定義瞭如何建立對等連接,並且還提供了數據通道建立的API、DTMF啓用和控制API、鏈接統計數據API,以及對等端身份肯定和驗證控制API。可是對等鏈接不是鏈接,至少不是TCP意義上的那種鏈接。它是一組路徑創建進程(ICE---互動式鏈接創建)以及一個可肯定應創建哪些媒體和數據路徑的協商器。

PeerConnection在源碼中能夠了解到這個類作的事情不少,並且和native層面直接進行數據溝通,之後能夠繼續深刻了解一下。

2.3 Android WebRTC DataChannel 數據信(通)道

WebRTC 數據通道是在瀏覽器之間創建的一種非媒體交互連接,它爲開發人員提供了一種靈活切可配置的通道,用於繞過服務器來直接交換數據。DataChannel API是PeerConnection API的一部分,只有在建立對等連接後才能建立數據通道。數據通道的模型是基於WebSocket創建的,具備簡單且可設置的send方法和onMessage處理程序。

數據通道的使用情形之一是:提供實時遊戲狀態更新(例如:WOW 多人團隊副本戰鬥的時候,使用此數據通道,團隊中其餘人的位置和動做更新方面是否是很容易了,O(∩_∩)O哈哈~)。

數據通道涉及的協議爲:SCTP (Stream Control TransPort Protocol) 流控制傳輸協議。 

相關文章
相關標籤/搜索