6.2.SDP協議

那今天呢?我們來介紹一下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來說呢,就非常困難了,那以上呢,就是我們這節課的內容有任何的問題

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/164758.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/164758.shtml
英文地址,請注明出處:http://en.pswp.cn/news/164758.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Javascript每天一道算法題(十四)——合并數組區間_中等

文章目錄 1、問題2、示例3、解決方法(0)方法0——雙指針(錯誤思路)(1)方法1——雙指針(正確) 總結 1、問題 以數組 intervals 表示若干個區間的集合,其中單個區間為 inte…

怎么讀一個網絡的代碼

1.網絡代碼怎么來的? 我想要實現一個功能,這個功能是輸入一張圖像,返回一個類別結果。 所以很明確就有三個部分,一個是接受圖像輸入,一個是處理圖像得到處理結果,一個是對處理結果判斷生成結果。 現在想要使…

rocketmq 發送時異常:system busy 和 broker busy 解決方案

之前寫的解決方案,都是基于測試環境測試的.到生產環境之后,正常使用沒有問題,生產環境壓測時,又出現了system busy異常(簡直崩潰).最后在rocketmq群里大佬指導下,終于解決(希望是徹底解決). 下面直接給出結果: 目前通過生產環境各種參數修改測試得出: broker busy異常: 可通…

Using PeopleCode in Application Engine Programs在應用引擎程序中使用PeopleCode

This section provides an overview of PeopleCode and Application Engine programs and discusses how to: 本節概述了PeopleCode和應用程序引擎程序,并討論了如何: Decide when to use PeopleCode.決定何時使用PeopleCode。Consider the program environment.考…

Java之《ATM自動取款機》(面向對象)

《JAVA編程基礎》項目說明 一、項目名稱: 基于JAVA控制臺版本銀行自動取款機 項目要求: 實現銀行自動取款機的以下基本操作功能:讀卡、取款、查詢。(自動取款機中轉賬、修改密碼不作要求) 具體要求: 讀卡…

基于SSM的校園奶茶點單管理系統

基于SSM的校園奶茶點單管理系統的設計與實現~ 開發語言:Java數據庫:MySQL技術:SpringMyBatisSpringMVC工具:IDEA/Ecilpse、Navicat、Maven 系統展示 主頁 奶茶列表 登錄界面 管理員界面 用戶界面 摘要 隨著社會的發展和科技的進…

ubuntu搭建phpmyadmin+wordpress

Ubuntu搭建phpmyadmin wordpress Linux系統設置:Ubuntu 22配置apache2搭建phpmyadmin配置Nginx環境,搭建wordpress Linux系統設置:Ubuntu 22 配置apache2 安裝apache2 sudo apt -y install apache2設置端口號為8080 sudo vim /etc/apache…

paddle detection 訓練參數

#####################################基礎配置##################################### # 檢測算法使用YOLOv3,backbone使用MobileNet_v1,數據集使用roadsign_voc的配置文件模板,本配置文件默認使用單卡,單卡的batch_size=1 # 檢測模型的名稱 architecture: YOLOv3 # 根據…

【CCF-PTA】第03屆Scratch第05題 -- 統計出現次數最多的字

統計出現次數最多的字 【題目描述】 我國自古流傳下來不少膾炙人口的詩歌,各具特色,別具一格。有些詩只用寥寥幾個字,就能描繪出生動的意境。 請找出以下詩篇中出現次數最多的字,如果有多個字出現次數相同,則答案為…

Java中基于SSM框架的數據保存方法與日期處理

? 一、詳解 在SSM框架中,保存數據通常涉及到服務層和數據訪問層。服務層處理業務邏輯,而數據訪問層負責與數據庫進行交互。 二、代碼 Override public void save(Student student) { Date date new Date(); SimpleDateFormat format new Sim…

什么是LLC電路?

LLC電路是由2個電感和1個電容構成的諧振電路,故稱之為LLC; LLC電路主要由三個元件組成:兩個電感分別為變壓器一次側漏感(Lr)和勵磁電感(Lm),電容為變壓器一次側諧振電容(Cr)。這些元件構成了一個諧振回路,其中輸入電感…

【C/PTA】函數專項練習(四)

本文結合PTA專項練習帶領讀者掌握函數,刷題為主注釋為輔,在代碼中理解思路,其它不做過多敘述。 目錄 6-1 計算A[n]1/(1 A[n-1])6-2 遞歸實現順序輸出整數6-3 自然數的位數(遞歸版)6-4 分治法求解金塊問題6-5 漢諾塔6-6 重復顯示字符(遞歸版)…

字母異位詞分組

給你一個字符串數組,請你將 字母異位詞 組合在一起。可以按任意順序返回結果列表。 字母異位詞 是由重新排列源單詞的所有字母得到的一個新單詞。 示例 1: 輸入: strs [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”] 輸出: [[“bat”],[“nat”,“tan…

Android MemoryFile 共享內存

應用場景: 跨進程傳輸大數據,如文件、圖片等; 技術選型: 共享內存–MemoryFile; 優點: 1. 共享內存沒有傳輸大小限制,所以和應用總的分配內存一樣(512MB)&#xff1…

Java 根據文件名獲取文件類型

比如文件名是“測試文件.png”,則獲取的文件類型就是 png 直接上一個通用的方法,拿去直接就能用。 // 比如入參文件名是“測試文件.png”,則出參就是 pngprivate String getFileSuffix(String fileName) {String[] fileStr fileName.split(&…

educoder中共享單車之數據可視化

第1關:繪制地圖 <%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%> <html> <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&…

專用設備上的SD卡插入電腦想讀取數據,提示要格式化?

環境&#xff1a; Win10 專業版 車載感應數據專用SD卡 問題描述&#xff1a; 專用設備上的SD&#xff0c;現在把SD卡從設備取出&#xff0c;用讀卡器插入電腦提示要格式化&#xff1f; 解決方案&#xff1a; 1.先進入PE查看SD分區情況&#xff0c;SD格式為ext4 查看文件…

lombok中使用@Builder構造器模式時的默認值問題

這里寫自定義目錄標題 問題case原因解決方案 文章參考來源&#xff1a;https://chenyongjun.vip/articles/107 問題case Lombok 使用廣泛&#xff0c;這里分享一個 Lombok Builder 小 case&#xff0c;今天自己踩了坑。 Data Builder public class User {private String name…

MLP 有哪些可學習的參數

多層感知機&#xff08;MLP&#xff09;的參數是需要在訓練過程中學習的。MLP是一種前饋神經網絡&#xff0c;其結構包括輸入層、多個隱藏層和輸出層。在訓練過程中&#xff0c;MLP通過反向傳播算法來調整網絡的權重&#xff0c;以最小化預測值與實際值之間的誤差。 MLP的學習…

安卓開發——Android Studio常見報錯與解決方法

1. No toolchains found in the NDK toolchains folder for ABI with prefix: arm-linux-android 這個錯誤是由于較新版本的NDK的./toolchains目錄中沒有arm-linux-androideabi文件&#xff0c;解決辦法是從舊的NDK版本里面復制到自己的NDK的版本里面&#xff0c;就可以了。 打…