1. 程式人生 > >sdp相關欄位的rfc及意義

sdp相關欄位的rfc及意義

1.a欄位

1.1 crypto屬性

 a = crypto:<tag> <crypto-suite> <key-params> [<session-params>]

​ a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj|2^20|1:32

標籤:用於在offer/answer中選擇一種crypto屬性

加密套件:描述加密的識別符號和身份驗證演算法

關鍵引數:method:info。目前method只有一種定義“inline”,表明祕鑰就是info

會話引數:

1.2 ssrc屬性

a = ssrc:<ssrc-id> <attribute><value>

​ a=ssrc:2 cname:stream_1_cname

​ a=ssrc:2 label:video_track_id_1

attribute包括:cname(唯一標識一個客戶端,一個客戶端只有一個cname)

​ msid

​ mslabel

​ label

​ fmtp

1.3 ssrc-group屬性

 a=ssrc-group:<semantics> <ssrc-id> ...

a=ssrc-group:FEC 2 3

semantics:有FID(流識別),FEC(前向糾錯),SIM(用於simulcate)。

FID:表示同一時刻只能只用一種codec,注意一個FID不要使用同一個port/ip。FID的實現場景:可以用於重傳機制的實現

ssrc-id:有多個,表示一個組裡面的所有ssrc

1.4 rtpmap屬性

 a=rtpmap:<payload type> <encoding
name>
/<clock rate> [/<encoding parameters>]

​ a=rtpmap:120 VP8/90000

payload type:有效載荷型別

encoding name:編碼器

encoding parameters:如果是音訊,可能表示的是通道數

(備註:有ulpfec和flexfec兩種payload型別,參考文件為:

1.5 MediaContentDirection屬性

a=sendrecv
a=recvonly
a=sendonly
a=inactive

1.6 ice-ufrag 和 ice-pwd屬性

a=ice-ufrag:<ufrag>
a=ice-pwd:<pwd>

​ a=ice-ufrag:ufrag_video

​ a=ice-pwd:pwd_video

ice打洞的使用者名稱和密碼

a=ice-ufrag:ufrag_video

a=ice-pwd:pwd_video

1.7 candidate屬性

a=candidate <foundation> <component-id> <transport> <priority> <connection-address> typ <candidate-types> <rel-addr> <rel-port>

​ a=candidate:a0+B/4 1 udp 2130706432 74.125.224.39 3457 typ relay generation 2

foundation:用來區別兩個candidate是否是一樣的型別,一樣的base addr, 一樣的 stun server

component-id:從1開始遞增。RTP的必須是1,RTCP必須是2

priority:優先順序,不知道怎麼用

cand-type:有四種”host”, “srflx”, “prflx”, “relay”。srflx即server reflexive, prflx即peer reflexive,relay即relayed candidates。應該是四種連線方式。

rel-addr:目前的理解是stun或turn伺服器地址

rel-port:

1.8 rtcp屬性

a=rtcp:<port> <nettype> <addrtype> <connection-address>

​ a=rtcp:2347 IN IP4 74.125.127.126

rtcp的屬性資訊

1.9 msid-semantic屬性

a=msid-semantic:<msid>

​ a=msid-semantic: WMS local_stream_1

WMS表示Webrtc Media Streams

local_stream_1表示msid(msid具體作用應該是和ssrc對應)

1.10 msid屬性

a=msid:<msid>

​ a=msid: local_stream_1

The value of the “msid” attribute consists of an identifier and an optional “appdata” field.(msid屬性由識別符號和appdata組成)

This new attribute allows endpoints to associate RTP streams that are described in different media descriptions with the same MediaStreams(msid屬性允許端點和RTP流連線在不同的media descriptions中使用相同的MediaStreams)

and to carry an identifier for each MediaStreamTrack in its “appdata” field(appdata放置MediaStreamTrack)

備註:webrtc中SdpSerialize函式第二個引數需要設定為true才可以有該屬性,如果直接用jsep的toString函式,就不會有這個屬性

1.11 group屬性

a=group:<semantics> <semantics-extension>

​ a=group:BUNDLE

“a=group” lines are used to group together several “m” lines that are identified by their “mid” attribute(group屬性用於通過mid識別符號把多個m屬性連線起來)

There MAY be several “a=group” lines in a session description.The “a=group” lines of a session description can use the same or different semantics(group屬性可以有多個,並且可以有相同或不同的語義)

參考自:

1.12 bundle-only屬性

a=bundle-only

​ a=bundle-only

和group屬性結合使用。表示不同的media使用同一個port

1.13 rtcp-fb屬性

a=rtcp-fb:<payload> <param>

​ a=rtcp-fb:96 ccm fir

1.14 rtcp-rsize屬性

a=rtcp-rsize

​ a=rtcp-rsize

1.15 fingerprint屬性

a=fingerprint:<hash-func> <fingerprint>

​ a=fingerprint:SHA-1 4A:AD:B9:B1:3F:82:18:3B:54:02:12:DF:3E:5D:49:6B:19:E5:7C:AB

1.16 extmap屬性

a=extmap:<id> <uri>

rtp的頭部擴充套件。具有三個屬性:

1.非對稱(可以表示recvonly,sendonly)

2.可以有相互排斥的選擇(answer可以選擇offer提供相同id中的其中一個rtpextension,id須為4096~4351)

3.在一個會話中可以表示多個頭部擴充套件

1.17 fmtp屬性

a=fmtp:<payload> <param>

​ a=fmtp:97 apt=96

表示codec對應的payloadtype,以及param

1.18 mid屬性

a=mid:<media name>

​ a=mid:audio

表示media的名字,用於查詢具體的media

1.19 setup屬性

a=setup:<role>

​ a=setup:active

表示連線中的角色,是主動連線,還是被動連線等

2 v欄位

v=0

3 o欄位

​ o=(使用者名稱)(會話標識)(版本)(網路型別)(地址型別)(地址)

​ o=- 18446744069414584320 18446462598732840960 IN IP4 127.0.0.1

4 s欄位

​ s=(會話名)

5 m欄位

​ m=(媒體)(埠)(傳送層)(格式列表)

​ m=audio 2345 RTP/SAVPF 111 103 104

6 b欄位

傳輸速率

offer/answer:

對於offer/answer,可以檢視:

注:

1.The answer MUST contain exactly the same number of “m=” lines as the offer(m屬性的個數和offer的m屬性個數要一致)

2.If the answerer has no media formats in common for a particular offered stream, the answerer MUST reject that media stream by setting the port to zero.(如果answer方沒有和offer一樣的media formats,那麼就通過設定埠為0拒絕這個media stream)

3.answer拒絕:如果要拒絕掉一個media stream,那麼就需要把拒絕的media的port設定為0,但是有一種情況要注意,就是a=bundle-only,在前面還有a=group:BUNDLE欄位,表示幾個media stream公用一個埠,這個時候的media可以設定port為0

CreateAnswer比較codec

1.對於audio和video,都會比較兩者的name是否一致,如果payload小於等於95,也會比較id是否一致(因為小於等於95的都是靜態的payload)

2.對於audio,會比較兩者的clockrate,bitrate,channels必須都一致,或者其中一個為0。

3.對於video,如果是H264,則會比較profile-level-id是否一致

相關推薦

sdp相關rfc意義

1.a欄位 1.1 crypto屬性 a = crypto:<tag> <crypto-suite> <key-params> [<session-params>] ​ a=crypto:1 A

潭州課堂25班:Ph201805201 django框架 第七課 常用 型別引數,關係表的實現,表關係物件add,create的方法 (課堂筆記)

    寫個類,建立表格   執行命令生成檔案 提交,在資料庫中建立  進入資料庫檢視   對資料進行修改操作    只有用到 save() 才能觸發 updaer_time 的更改,

hive中判斷A表時間是否在B表的兩個時間求訂單中間休息時間

問題:在hive中,A表中有一個時間的欄位,型別位string,格式為2018-12-0 13:34:12;在B表中有欄位start_time和end_time,型別為string,格式為2018-12-06 13:34:12,先需要將兩表按id關聯後新增一個標記欄位(當A表的時間在B表的s

mysql 的 explain 的相關 的介紹

參考部落格並整理如下: 連結: (https://www.cnblogs.com/xuanzhi201111/p/4175635.html). 連結: (https://www.cnblogs.com/0201zcr/p/5742382.html). expain出來的資訊有10列

關於http請求和谷歌network相關---學習筆記

content-type:實體頭部用於指示資源的MIME型別 media type。(1)application/x-www-form-urlencoded(請求預設設定):一串字串,提交的資料按照 key1=val1&key2=val2 的方式進行編碼;(2)multipart/form-data 

簡單查詢資料庫,減輕多資料庫壓力

最近在查詢標籤收費記錄時,要在列表中顯示車牌號資訊,而車牌號資訊在標籤資訊記錄表中,於是需要查詢標籤資訊記錄,最原始的做法: 獲取分頁的一頁記錄資料,迴圈遍歷得出標籤收費記錄物件,然後通過標籤收費記錄中的標籤ID來查詢標籤資訊物件,儲存在List物件中: List v

postgresql獲取表結構,表名、表註釋、名、型別長度和註釋(轉載)

轉載地址:https://blog.csdn.net/weixin_38924323/article/details/80982760 場景描述:navicate 將postgresql表結構匯出到Excel。 1、查詢表名和表註釋 select relna

如何獲取SQL Server所有的資料庫名、表名、型別?

解決方案 – 獲取所有資料庫名 select name from master..sysdatabases – 獲取所有表名 select name from YDK..

通過java反射獲取任意物件的

import java.lang.reflect.Field; /** * * @author EX-QINCIDONG001 * */ public class ReflectClass { /** * @param args */ public

HTTP的請求頭和響應頭相關

請求頭: Accept:用於告訴伺服器。客戶端支援的資料結構。 Accept-Charset:用於告訴伺服器。客戶端採用的編碼。 Accept-Encoding:用於告訴伺服器。客戶端支援的資料壓縮方式。 Accept-Language:用於告訴伺服器。

MySql分組查詢(group by)並計算對應的之和兩個相乘之後的和

有表如下: 需求:求出每一種商品(goods_id)的數量(goods_num)之和及單價(goods_price)乘以數量之和 sql 語句:SELECT sum(goods_pirce*goods_num) AS price_amount,sum(goods_num)

SQL獲取所有使用者名稱,資料庫名、所有表名、所有型別

1.獲取所有使用者名稱:SELECT name FROM Sysusers where status='2' and islogin='1'islogin='1'表示帳戶islogin='0'表示角色status='2'表示使用者帳戶status='0'表示糸統帳戶2.獲取所有資料庫名:SELECT Nam

object轉json字串時NULL值過濾map、json互轉後map型別問題

HashMap<String, Fbox> map_in = new HashMap<>(); HashMap<String, Map<String, Fbox>> map_out= new HashMap<>()

使用scrapy爬取知乎問題和答案的相關完整程式碼

目前程式健壯性有待提高。尤其是對question的各類異常處理還不夠。但是程式碼已經可用,附上程式碼執行後爬取到的資料。在爬取到101條quetion時已經爬取到2671條answer欄位了。。。。這差距好大。一方面是因為answer有知乎提供的API,更方便爬取,另一個方面

sql查詢表中所有名稱型別

想要查詢表的全部資訊 : exec sp_help 'TABLE'  查詢表中所有欄位名稱及型別: select  name,TYPE_NAME(system_type_id) +'('+conv

問題:遷移和建立表格,提示相關已存在

需要新建roder表,進行遷移和建立表格,提示相關欄位已存在,可以通過以下方法解決:問題原因:之前新增富文字編輯器,需要在tb_Goods表中加入富文字相關欄位(desc_detail 、desc_pack、desc_service)。如果在這些新增欄位前執行了匯入測試資料的

Django model 型別選項解析

Field 選項 null       boolean 值,預設設定為false。通常不將其用於字元型欄位上,比如CharField,TextField上。字元型欄位如果沒有值會返回空字串。 blank       boolean 值,該欄位是否可以為空。如果為假,則必須有值。 choices  

C#獲取MySQL資料庫中的所有的表名和的資料型別

   獲取表名         public bool GetTableName()         {             string sql = "show tables;";             MySqlCommand cmd = new MySqlCom

織夢dede:arclist按照自定義的條件呼叫相關文章

dedecms織夢dede:arclist按照自定義欄位的條件呼叫相關文章,這對於想要在首頁呼叫某個自定義欄位的文章的同學來講,非常不錯 開啟 /include/taglib/arclist.lib.php 找到 //關鍵字條件 在它的上面加入 //自定義欄位關鍵字條件 if($ctag->G

SQL查詢列()重複值操作

方法一: 1、查詢表中多餘的重複記錄,重複記錄是根據單個欄位(peopleId)來判斷 select * from people where peopleId in (select   peopleId from   people group by&nbs