那今天呢?我們來介紹一下sdp協議,那實際上呢?sdp協議非常的簡單。我們如果拿到一個stp的文檔去看的話,那你要分閱里邊的所有的內容會覺得很枯燥,但實際上呢,如果我們按照這張圖所展示的結構去看stp的話。你就會覺得它沒有那么復雜了,那實際上呢,每一個stp它都是嵌套的方式來進行定義的。那在它最外層呢?是繪畫層,
在繪畫層之內是媒體層,那媒體層呢?又分為了音頻和視頻。在音頻里頭,它又對音頻做了各種各樣的定義,而視頻里邊兒呢,也同樣的做了各種各樣的定義。我們按照這種結構去給它進行一下拆分。你就會容易理解它里邊兒所要表達的信息是什么了,所以這張圖呢,非常的關鍵,大家呢,一定要把這張圖記住。在看協議的相關文檔的時候,那就按照這張圖所描述的這種結構去套,
就很容易理解了。那下面呢,我們再來看看的規范,它這個規范啊,也非常的清晰,那主要就是ky 6中間用等號進行連接。等號的左邊是k,右邊是value。對于k來說呢,常見的k有MA CV so,那其中m呢代表的是media,也就是一個媒體。那媒體可以是音頻,可以是視頻,可以是應用
a呢表示屬性,當我們定義了某個媒體之后,要對這個媒體進行進一步的說明。那就要通過a attribute進行進一步的這個定義啊,
這是C呢,就是connection代表連接。v代表版本,我們在進行協商的時候,版本一定要是一致的,比如說一個用戶的版本是一。第二個用戶的版本是二,這樣他倆是沒法進行協商的,必須要保證他們使用的stp的協議版本是一致的。
s代表session也就是一個會話。a與b之間進行一個通訊,
那這個呢?就是一個會話。會話呢?是一個全局的。
o代表owner就是誰擁有這個繪畫好,這是k。那value呢,它的值就比較多了,那具體含義呢,
你可以查看rfc四五六六這個協議文檔中呢,對value做了詳細的定義。那實際我們在了解stp協議的時候呢,一般都是拿到一個實際的stp數據,對照著stp數據去看,每一個value它的值是什么含義?
那很少呢,直接去看這個文檔,因為這個文檔還是比較大的,我們去看的時候呢,如果你沒有一個實際的例子。直接去看這文檔,可能不太容易理解,那如果你真的想去看這文檔的時候呢,可以直接在百度上搜rfc四五六六就可以搜到這篇文檔。這就是stp規范,那下面呢?我們就來看一個具體的例子,那這個呢?就是我從一個實際的stp的例子中抽取出的一些重要的信息。那首先第一個就是我們的版本使用的是多少,
比如我們在第一次進行協商的時候,版本號是一。那第二次協商的時候呢,版本號就變成二,那第三次呢,就是三,它這個版本呢,是不斷累加的,后邊這個o呢,就代表是就誰擁有它?如果后邊是干,就是不太關心具體這個名字是誰了,那后邊這一串數字呢?對于外邊心思來說呢,它是不實用的,
所以這塊呢,它的含義呢,沒必要特別深究。其中的in呢代表internet IP 4代表IPV 4后邊呢,是你本機的IP地址。那一般都會寫成幺二七點零點零點一,這代表我們自己的本機再下邊
m是非常關鍵的一個信息,代表一個media。那每個呢,只代表一種類型的數據,要么是音頻,要么是視頻,要么是應用數據。對它不可能同時既包含音頻,又包含視頻,
這是不可能的,所以它的第一個單詞呢?audio代表的這個媒體呢?是一個音頻數據。好后邊的九代表,它使用的端口號,這個端口呢?
對于外邊tc來說,它也不用它會使用自己的ice進行網絡傳輸。那這個端口有一個特殊的意義,如果這個端口是零,表示兩個用戶之間進行媒體協商時沒有成功。那如果不是零這個值呢?是多少都無所謂,后邊呢是這個媒體所使用的傳輸協議。
那底層呢?使用udp tls呢?就是進行數據加密,那在udp之上跑的是rtp。后邊的sav TF表示的是支持rt CP協議,那a呢?代表audio v呢?代表video p呢?是protocol。f呢是feedback,所以這幾個單詞的第一個字母好,再后邊的這一串數呢是?那它可以是幺幺幺,也可以是幺零三,也可以是幺零四,
那每個配具體代表的是哪個編輯碼器?那在后邊呢?都有定義。再接下來,這個a就是對前面的這個media進行的擴展說明,也就是attribute一個屬性。MID代表的是media ID,也就是說我們這個media它的ID是多少?那冒號零表示的這個ID是零?那再下來,那對于這個media來說呢,它對傳輸的rtp協議進行了擴展,那如果rtp中的p是幺幺幺。它表達的意思是它使用的編解碼器是oppos采樣率呢,是48000雙通道。
這兩個a呢,都是對前面這個media的一個說明,當他遇到下一個
m的時候,前面的這個媒體就算結束了,就開始一個新的媒體。那這個m呢?表示這是一個視頻的媒體,后邊是端口號好,那再下來這些信息呢?與這個音頻是類似的。也就是它使用的傳輸協議udp rtp下邊兒是palo tap九六幺零二,那與音頻類似,后邊兒這a呢,是對這個媒體的一個說明。
那對于視頻來說,它的media ID是一,那這個序號呢?是自動增加的,再下邊這個rtp map是對payload type九六進行的說明。那p6使用的是VP 8,這個編輯碼器,它的時鐘頻率呢是九萬,那這個呢,就是一個stp的例子。當然,這里所展示的這些信息呢,都是一些比較關鍵的信息點。那除了這些信息之外呢,還有很多的信息在里邊,那沒有在這里列出來,
是由于沒法在一張PPT中容納所有的信息,所以我只挑出其中。最關鍵的向你做了展示,那沒有展示的那些信息,每一個字段都是我們必須要掌握的,并不是說我在這里沒有展示,你就可以不清楚了。不是這樣的,每一個字段我們都要知道它的含義是什么,只有這樣你才能看外邊代碼的時候,讀懂它的邏輯是什么。那在這里啊,我有兩個知識點,要特別向你重點介紹一下,那第一個呢就是ice four和ice light。
那這個信息呢?是標準stp中啊,不包含的,那這里我們要重點介紹一下,那首先我們來看一下ice light。那你在看sdp的真實的例子的時候呢,經常會看到這個屬性,尤其是web rtc流媒體服務器中都會包含這個屬性ice light。那它的含義是什么呢?這就要說到y八二tc的ice了,那對于y八二tc的ice,我們在前面的課程中呢,也向你做過介紹。那web rtc呢?實現了自己的一套傳輸的控制,
那這套控制呢?就稱為ice,比如說每個web rtc的終端都會收集candidate。candidate呢,又是有類型的,不同的類型有不同的優先級,那這些內容呢,都屬于ice的內容。那其中,在進行ice的時候,要做一次驗證,也就是說驗證一下這一端給我提供的這個candidate的是否是有效的?那驗證應該是雙方都要驗證它使用的方法呢,就是通過發送向對方發一個請求。那對端收到這個請求之后呢?
要回一個response,這樣表明我這個candidate是可用的。如果服務端與客戶端之間每個都要做這個流程的話,那對于流媒體服務器來說,它的負載就太重了。所以,為了減輕這個負載,就簡化了這個邏輯。所以,只要客戶端進行驗證就了,那這樣呢,就提高了整個連接的這個效率。所以呢,對于客戶端來說,它會發子彈request服務端返回子彈response就OK了,
服務端呢,不會向客戶端再發送子彈request。那這個呢,就叫ice light,客戶端發送stun,服務端回就好了,這就是ice light
那ice four就是與ice light相對應的,它是一個雙方檢測的過程,也就是說連接的雙方都要發送stand request。收到request之后呢,都要回response,它是這樣一個過程,這就是ice four與ice light,那如果我們在一個stp中沒有發現a=ice light這個屬性。那默認呢,它就是ice four,也就是說雙方都要進行這個檢測,對于外邊tc來說呢,
它默認使用的就是ice four。一般的流媒體服務器都使用ice light,這個我們要清楚,
那第二個呢?就是plan b和unify plan。那plan b呢,是web rtc以前默認使用的語法,那什么意思呢?就是如果對于同一種媒體類型有多個源的話。它使用屬性進行區別,也就是說對每一種媒體類型只有一個行,比如音頻,有一個音頻的行。視頻呢?有視頻的行,
如果在我們通訊的過程中有兩個音頻源,那它要進行區分的時候呢?是使用as src來進行區分。其中,每一個音頻源有一個自己的ssrc,它們的這個ID呢是不一樣的,比如在這里一個是一二三四五六七。另外一個呢是七六五四三二一,同時他們的cna me呢也是不一樣的,這是plan b,而unit five plan呢,又與他們不一樣了。它是對每一個媒體流都有一個行,就像我們剛才介紹的,如果有兩個音頻的媒體源。
那對于unify plan來說呢,它就有兩個m行,其中一個m行,它的ssrc呢,是一二三四五六七。那另外一個行它的呢?是七六五四三二一,這是他們的一個最主要的區別,區別的關鍵點呢就是m行的個數。那在plan b中呢?每一種類型只有一個m行,而現在對于unify plan來說呢?是每一個圓都有一個m行。那對于現在的外包tc來說,它都統一使用unify plan,
也就是plan b被淘汰了。當然,對于一些老的瀏覽器,它還會使用plan b。那這一個呢?我們要清楚,尤其是做一些兼容開發的時候,那有的是用plan b,有的是用unify plan。那這個時候呢,我們要做好兼容,那以上呢,就是我們這節所要向你介紹的內容,那在這節中呢,我首先向你介紹了sdp協議的一個基本的規范。
它是由k value所組成的,那另外呢,我們要知道sdp它是分層的,對這對于我們理解sdp來說呢,非常的關鍵。那你了解了這個結構之后呢,我們去看sdp就會非常容易,那如果你不了解的話呢,就覺得很繞,沒有邏輯感。那另外呢,我通過一個實例向你講解了sdp是如何組織這個媒體信息的。那最后呢?我又向你介紹了兩個重要的知識點,一個是ice light ice four,
另外一個呢是plan b和unified plan。那這兩個點呢,是wrtc對標準sdp的一些修改,這我們要知道,
那這里我需要特別強調啊,對于sdp中的每一個信息。我們必須都要非常清楚它的含義是什么,這一點是非常關鍵的,這也是我學習web rtc的一個心得,對只有你了解了sdp中的每一個信息。你才能在閱讀代碼的時候游刃有余,否則的話呢,很多邏輯你都看不懂,不知道為什么要這么寫,不知道它定義那個屬性是干什么用的。
這樣對于我們理解外邊兒tc來說呢,就非常困難了,那以上呢,就是我們這節課的內容有任何的問題