FFmpeg 4.3 音視頻-多路H265監控錄放C++開發二十一.4,SDP協議分析

SDP在4566 中有詳細描述。

SDP 全稱是 Session Description Protocol,

翻譯過來就是描述會話的協議。

主要用于兩個會話實體之間的媒體協商。

什么叫會話呢,比如一次網絡電話、一次電話會議、一次視頻聊天,這些都可以稱之為一次會話。

那為什么要去發這個描述文本呢,主要是為了解決參與會話的各成員之間能力不對等的問題,如果參加本次通話的成員都支持高質量的通話,但是我們沒有去進行協議,為了兼容性,使用的都是普通質量的通話格式,這樣就很浪費資源了。所以 SDP 的作用還是很有必要的。

SDP(Session Description Protocol) 完全是?種會話描述格式 ― 它不屬于傳輸協議 ― 它只使?不 同的適當的傳輸協議,包括會話通知協議(SAP)、會話初始協議(SIP)、 實時流協議(RTSP)、 MIME 擴展協議的電?郵件以及超?本傳輸協議(HTTP)。SDP協議是也是基于?本的協議,這樣就能保 證協議的可擴展性?較強,這樣就使其具有?泛的應?范圍。SDP 不?持會話內容或媒體編碼的協商,所 以在流媒體中只?來描述媒體信息。媒體協商這?塊要? RTSP 來實現.

SDP 協議結構 key = value?

key 一般是一個字母,

value 的值由key的啥 對應不同的值

協議中的特殊符號 *

OPTIONAL items are marked with a "*".
在協議中 用 * 表示 是? 可選的
如果沒有 *,則表示是 必選的

由兩大部分組成 或者三大部分組成,原始協議中將會話時間和重復信息劃分到 (time description中)

協議部分說明是三大部分

Session description
v= (protocol version)
o= (originator and session identifier)
s= (session name)
i=* (session information)
u=* (URI of description)
e=* (email address)
p=* (phone number)
c=* (connection information -- not required if included in
all media)
b=* (zero or more bandwidth information lines)
One or more time descriptions ("t=" and "r=" lines; see below)
z=* (time zone adjustments)
k=* (encryption key)
a=* (zero or more session attribute lines)
Zero or more media descriptions
Time description
t= (time the session is active)
r=* (zero or more repeat times)
Media description, if present
m= (media name and transport address)
i=* (media title)
c=* (connection information -- optional if included at
session level)
b=* (zero or more bandwidth information lines)
k=* (encryption key)
a=* (zero or more media attribute lines)

會話級別信息

協議版本號(v)(必選)

version的縮寫

作用:?個會話描述的開始,前?個會話結束標志。

描述: 表示sdp的版本號,不包含次版本號

? ? ? ? 例子:v=0

會話源(o)(必選)

origin的縮寫

作用:(會話源或者會話?成者,以及會話標識符)

????????格式如下
????????o=<username> <sess-id> <sess-version> <nettype> <addrtype> <unicast-address>
????????
? ? ? ? 其中 username、session-id、nettype、addrtype、unicast-address ?起,唯?標識?
個會話
各字段含義如下:
username:發起者的?戶名,不允許存在空格,如果應?不?持?戶名,則為 -
sess-id:會話id,由應???定義,規范的建議是NTP(Network Time Protocol)時間戳。
sess-version:會話版本,?途由應???定義,只要會話數據發?變化時(?如編碼),sess
version隨著遞增就?。同樣的,規范的建議是NTP時間戳。
nettype:?絡類型,?如 IN 表示 Internet
addrtype:地址類型,?如 IP4 IV6
unicast-address:域名,或者IP地址。
? ? ? ? 例子: o=jdoe 2890844526 2890842807 IN IP4 10.47.16.5
????????

會話名稱(s)(必選)

Session Name 的縮寫

????????(會話名稱)這個字段是個?本字符串,可以顯示給會話參與者。

????????s=SDP Seminar

? ? ? ? s=No Name

時間描述(t)(必選)

????????(會話時間)這個字段指明會話開始時間與結束時間。
例子
???????t=2873397496 2873404696
????????t=0 0
  • 描述:t字段描述了會話的開始時間和結束時間,?為?NTP時間,單位是秒;如果?為0表示過了之后,會話一直持續;當 和?都為0的時候,表示持久會話,如拉實時流;

屬性(a)(可選)一般都會有值

a=<attribute>
a=<attribute>:<value>
可選字段中,連接信息字段是特別與條件相關的。因為該字段定義了數據應發送到的?絡地址,所以必須 被包含進會話描述中的某個地?。
? ? ? ? 例子
????????????????a=tool:libavformat 60.3.100

會話信息(i)(可選)

(會話信息)對字段的?本描述,提供了?會話名稱更多的信息。該字段既可以?于會話級也可以? 于媒體級。

例子

i=A Seminar on the session description protocol

URI(u)(可選)

(描述的URI地址)URI信息,通過這個地址可以獲取更多會話相關信息。例如,?個會議可能公布 在WEB??上,所以需要該WEB的URI。每個會話只能提供?個URI
例子

u=http://www.example.com/seminars/sdp.pdf

E-mail地址(e)(可選)

E=(E-mail地址)負責會話個體的E-mail地址,可以有多個。只能?于會話級別。
例子
e=j.doe@example.com (Jane Doe)

電話號碼(p)(可選)

可以有多個,會話級別。
例子:
p=+1 617 555-6011
這里沒有查到在國內應該怎么寫電話號碼,在協議中的例子 有 +,有 -,從例子中可以看到,不止是數字,應該+和-也能用

連接信息(c)(可選)

Connection Data

(連接信息)該字段提供連接數據,包括網絡類型、地址類型和連接地址。可應?于會話級也可以? 于媒體級
  • network type:網絡類型,一般為IN,表示internet;
  • address type:地址類型,一般為IP4;
  • connection address,地址,可能為域名或ip地址兩種形式;
在會話級時:?? c=IN IP4 224.2.17.12/127
在媒體級時:??

帶寬信息(b)(可選)

(帶寬信息)指明帶寬需求,單位 kbit/s , 可?于兩個級別
b=<bwtype>:<bandwidth>
  • 描述:該選項描述了建議的帶寬,單位 kbs/s,可選,modifier包括兩種類型,CT和AS,CT表示總帶寬,AS表示單個媒體帶寬的最大值;bandwidth表示具體的帶寬;

重復信息(r)(可選)

r=(重復次數)如果是有規律的?程安排活動,這個字段?來指明會話重復頻次和時間。
r=<repeat interval> <active duration> <offsets from start-time>
重復間隔
活動持續時間
與開始時間的偏移
r=7d 1h 0 25h
d - days (86400 seconds)
h - hours (3600 seconds)
m - minutes (60 seconds)
s - seconds (allowed for completeness)

時區調整(z)(可選)

(時區調整)?于按?程安排的有規律活動會話。會話可能會夸時區,避免時區變更造成的混亂。
z=<adjustment time> <offset> <adjustment time> <offset> ....
z=2882844526 -1h 2898848070 0

加密密鑰(k)(可選)

(加密密鑰)為了對媒體加密、解密,該字段提供了?個加密密鑰或者規定了?個獲取密鑰的機制。 可?于兩個級別。
k=<method>
k=<method>:<encryption key>
k=clear:<encryption key>
k=base64:<encoded encryption key>
k=uri:<URI to obtain key>
k=prompt

媒體級別信息

媒體描述(m)

表示一個會話的媒體信息;

格式: m=(媒體類型)(端?號碼)(傳送層協議)(格式列表)


????????media:媒體類型。有"audio",“video”,“application”,“data”(不向用戶顯示的數據),“control”(描述額外的控制通道);
????????port:表示媒體流發往傳輸層的端口,對于RTP,偶數端口用來傳輸數據,奇數端口
對應RTCP用來傳輸信令;
????????transport type:表示傳輸協議,與"c="一行相關聯,一般用RTP/AVP表示,即 Realtime Transport Protocol using the Audio/Video profile over udp,即我們常說的RTP over udp;
????????fmt list:表示媒體格式,分為靜態綁定和動態綁定;
????????????????靜態綁定:媒體編碼方式與RTP負載類型有確定的一一對應關系,如: m=audio 0 RTP/AVP 8;
????????????????動態綁定:媒體編碼方式沒有完全確定,需要使用rtpmap進行進一步的說明;如下例子

????????????????????????m=video 0 RTP/AVP 96
????????????????????????a=rtpmap:96 H264/90000

該例子說明, 可以理解為 m 是video的,端口號由于還沒有指定目前為0,傳輸協議為RTP/AVP,媒體格式為96(協議中稱之為 payload type),這個96是啥意思呢?在?a=rtpmap中說明了,對應的編碼名稱為h264, clock rate為90000.。。關于a的詳盡說明,參考后面a屬性的說明。
????????fmt list : 對應對應的?頻負載類型(PT)?如果格式列表中 列出了所?持的所有不同類型的媒體格式。優先使?靠前的格式。( 15 3 0
格式列表中只有一個的例子
m=video 0 RTP/AVP 96
如果某個系統準備在端? 45678 可以處理?種編碼的語?: G.728 編碼格式(負載類型為15)、 GSM 編碼 格式(負載類型為3)、 G.711 u 編碼格式(負載類型為0),?且系統優先采? G.728 格式,則相應的媒體 信息如下所示:
格式列表中支持多個的例子
m=audio 45678 RTP/AVP 15 3 0

媒體信息(i)(可選)

協議中關于在媒體信息中的說明如下:
i=* (media title)

連接信息(c)(會話級進?了規定,這?可選)

帶寬信息(b)(可選)

加密密鑰(k)(可選)

屬性(a)(可選,但是一般都要填充)

屬性有兩種形式,第?種是特征屬性,第?種屬于值屬性。SDP描述了多個建議屬性。

a=<attribute>
a=<attribute>:<value>

特征屬性:

例如a=sendonly??表明會話描述的發送者只希望發送數據?不打算接收數據,端?號?意義,可以置為0。

例如 a=recvonly?? 表明這個會話描述的發送者只想接收數據?不打算發送數據。
值屬性:
a= rtpmap 在協議中,SIP建議盡量 使用該屬性 ,因此要特別分析一下
格式:a=rtpmap:(凈荷類型)(編碼名)/(時鐘速率)【/(編碼參數)】
a=rtpmap:<payload type> <encoding name>/<clock rate> [/<encoding parameters>]
a=control:(?/視頻連接信息)
a=control:rtsp://192.168.1.197/h264stream0/trackID=0
a=rtpmap:96 H264/90000
a=rtpmap?
rtpmap 屬性提供了?個在 VoIP 應?中的重要屬性使??法,該屬性可?于媒體流,在媒體格式不是靜態的 RTP 負載類型時特別有?。
嚴格來說, “rtpmap” 只在使?動態負載類型情況下才是必須的,例如標準的 G.711 語?是靜態 RTP 負載類 型,采?如下?法就可以對它完整描述:
m=audio 45678 RTP/AVP 0
?對動態負載來說需要指定更多信息才能使遠端完全識別到媒體編碼,例如 16 位線性編碼 16kHz 取樣的? 體聲?就是?個動態 RTP 負載類型,如果我們采?動態負載類型 98 表示這個媒體流,那么 SDP 格式如下:
m=audio 45678 RTP/AVP 98
a=rtpmap 98 L16/16000/2
SIP 建議?論是靜態負載還是動態負載,盡量都要采?該屬性
a=rtpmap在協議中,SIP建議盡量使用該屬性,因此要特別分析一下,

參見上面的分析

a=fmtp


fmtp(format parameters)用于指定媒體數據格式。

格式:a=fmtp:<format> <format specific parameters>

示例:a=fmtp:111 minptime=10;useinbandfec=1

表示PayloadType值為111的數據(Opus數據):以10ms長的音頻數據為一幀,且數據經FEC(Forward Error Correction,前向糾錯)編碼。

?結合起來分析:

Media Description, name and address (m): video 0 RTP/AVP 96? ?
? ? ? ? Media Attribute (a): rtpmap:96 H264/90000
? ? ? ? Media Attribute (a): fmtp:96 packetization-mode=1; sprop-parameter-sets=Z2QAKKzZQHgGWwFqAgICgAAAAwCAAAAYB4wYyw==,aOvjyyLA; profile-level-id=640028
? ? ? ? Media Attribute (a): control:streamid=0

我是video媒體類型,目前接口為0,,使用RTP/AVP協議,使用媒體格式編號為96

? ? ? ? rtpmap 則說明 96代碼的是 h264編碼,時鐘速率為90000

? ? ? ? fmtp (format parameters)說明 96媒體數據的格式 :

????????????????????????packetization-mode =1;

????????????????????????sprop-parameter-sets =?Z2QAKKzZQHgGWwFqAgICgAAAAwCAAAAYB4wYyw==,aOvjyyLA;

????????????????????????profile-level-id=640028

???????? control:streamid=0 說明ffmpeg對應的streamid 為0

例子

? ? Session Description Protocol
? ? ? ? Session Description Protocol Version (v): 0
? ? ? ? Owner/Creator, Session Id (o): - 0 0 IN IP4 127.0.0.1
? ? ? ? Session Name (s): No Name
? ? ? ? Connection Information (c): IN IP4 192.168.245.130
? ? ? ? Time Description, active time (t): 0 0
? ? ? ? Session Attribute (a): tool:libavformat 60.3.100
? ? ? ? Media Description, name and address (m): video 0 RTP/AVP 96
? ? ? ? Media Attribute (a): rtpmap:96 H264/90000
? ? ? ? Media Attribute (a): fmtp:96 packetization-mode=1; sprop-parameter-sets=Z2QAKKzZQHgGWwFqAgICgAAAAwCAAAAYB4wYyw==,aOvjyyLA; profile-level-id=640028
? ? ? ? Media Attribute (a): control:streamid=0
? ? ? ? Media Description, name and address (m): audio 0 RTP/AVP 97
? ? ? ? Bandwidth Information (b): AS:128
? ? ? ? Media Attribute (a): rtpmap:97 MPEG4-GENERIC/44100/2
? ? ? ? Media Attribute (a): fmtp:97 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3; config=121056E500
? ? ? ? Media Attribute (a): control:streamid=1

技巧:在 cmd 上打開 SDP 的log用來觀察SDP的 內容

1. 啟動 RTSP 服務器后

2. 使用ffmpeg 推流 或者ffplay拉流的時候 后面加上? -loglevel 40

使用推流 和 拉流的 方式打開

ffmpeg -re -i "zerenlian.mp4" -vcodec h264 -acodec aac -f rtsp -rtsp_transport tcp rtsp://192.168.245.130/test/002zerenlianmp4 -loglevel 40
?

ffplay -rtsp_transport tcp rtsp://192.168.245.130/test/002zerenlianmp4 -loglevel 40

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

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

相關文章

智簡未來創新與簡化的AI之路

附上鏈接地址&#xff1a;https://aint.top 在這個數字化迅速發展的時代&#xff0c;人工智能&#xff08;AI&#xff09;不僅僅是技術的前沿&#xff0c;它正在成為每個行業創新的核心推動力。作為一家專注于AI技術應用與創新的公司&#xff0c;智簡未來旨在通過智能化的工具…

[極客大挑戰 2019]HardSQL 1

看了大佬的wp&#xff0c;沒用字典爆破&#xff0c;手動試出來的&#xff0c;屏蔽了常用的關鍵字&#xff0c;例如&#xff1a;order select union and 最搞的是&#xff0c;空格也有&#xff0c;這個空格后面讓我看了好久&#xff0c;該在哪里加括號。 先傳入1’ 1試試&#…

【Pytorch實用教程】深入了解 torchvision.models.resnet18 新舊版本的區別

深入了解 torchvision.models.resnet18 新舊版本的區別 在深度學習模型開發中,PyTorch 和 torchvision 一直是我們不可或缺的工具。近期,torchvision 對其模型加載 API 進行了更新,將舊版的 pretrained 參數替換為新的 weights 參數。本文將介紹這一變化的背景、具體區別,…

Elasticsearch名詞解釋

文章目錄 1.什么是Elasticsearch?2.什么是elastic stack(ELK)?3.什么是Lucene?4.什么是文檔(document)&#xff1f;5.什么是詞條(term)&#xff1f;6.什么是正向索引&#xff1f;7.什么是倒排索引&#xff1f;8.ES中的索引(index)9.映射(Mapping)10.DSL11.elastcisearch與my…

網絡滲透測試實驗三:SQL注入

1.實驗目的和要求 實驗目的:了解SQL注入的基本原理;掌握PHP腳本訪問MySQL數據庫的基本方法;掌握程序設計中避免出現SQL注入漏洞的基本方法;掌握網站配置。 系統環境:Kali Linux 2、Windows Server 網絡環境:交換網絡結構 實驗工具: SqlMAP;DVWA 2.實驗步驟 實驗目…

SQL-Server鏈接服務器訪問Oracle數據

SQL Server 鏈接服務器訪問 Oracle 離線安裝 .NET Framework 3.5 方法一&#xff1a;使用 NetFx3.cab 文件 下載 NetFx3.cab 文件&#xff0c;并將其放置在 Windows 10 系統盤的 C:Windows 文件夾中。 以管理員身份運行命令提示符&#xff0c;輸入以下命令并回車&#xff1a; …

【R語言】校準曲線,繪制原理

①獲取predict的結果&#xff0c;“prob.Case”這一列就是預測風險概率&#xff0c;“truth”列為實際發生結局的分組 ②將prob.Case進行分桶&#xff08;簡單理解為分組&#xff0c;一般分10組)&#xff0c;常見的分桶方式有兩種&#xff1a;一是將prob.Case從大到小排序后&a…

QTDemo:串口調試工具

項目簡介 本項目通過QT框架設計一款可以在Windows、Linux等平臺的跨平臺串口助手&#xff0c;串口功能能夠滿足基本的調試需求。 本項目采用的版本為&#xff1a;QT5.14 visual studio 2022 進行開發。 項目源碼&#xff1a;https://github.com/say-Hai/MyCOMDemo 項目頁面&am…

基于SpringBoot和OAuth2,實現通過Github授權登錄應用

基于SpringBoot和OAuth2&#xff0c;實現通過Github授權登錄應用 文章目錄 基于SpringBoot和OAuth2&#xff0c;實現通過Github授權登錄應用0. 引言1. 創建Github應用2. 創建SpringBoot測試項目2.1 初始化項目2.2 設置配置文件信息2.3 創建Controller層2.4 創建Html頁面 3. 啟動…

CMS漏洞靶場攻略

DeDeCMS 環境搭建 傻瓜式安裝 漏洞一&#xff1a;通過文件管理器上傳WebShel 步驟?:訪問目標靶場其思路為 dedecms 后臺可以直接上傳任意文件&#xff0c;可以通過?件管理器上傳php文件獲取webshell 登陸網站后臺 步驟二&#xff1a;登陸到后臺點擊 【核心】 --》 【文件式…

0xc0000020錯誤代碼怎么處理,Windows11、10壞圖像錯誤0xc0000020的修復辦法

“0xc0000020”是一種 Windows 應用程序錯誤代碼&#xff0c;通常表明某些文件缺失或損壞。這可能是由于系統文件損壞、應用程序安裝或卸載問題、惡意軟件感染、有問題的 Windows 更新等原因導致的。 比如&#xff0c;當運行軟件時&#xff0c;可能會出現類似“C:\xx\xxx.dll …

LabVIEW 中 NI Vision 模塊的IMAQ Create VI

IMAQ Create VI 是 LabVIEW 中 NI Vision 模塊&#xff08;NI Vision Development Module&#xff09;的一個常用 VI&#xff0c;用于創建一個圖像變量。該圖像變量可以存儲和操作圖像數據&#xff0c;是圖像處理任務的基礎。 ? 通過以上操作&#xff0c;IMAQ Create VI 是構建…

HTML5 標簽輸入框(Tag Input)詳解

HTML5 標簽輸入框&#xff08;Tag Input&#xff09;詳解 標簽輸入框&#xff08;Tag Input&#xff09;是一種用戶界面元素&#xff0c;允許用戶輸入多個標簽或關鍵詞&#xff0c;通常用于表單、搜索框或內容分類等場景。以下是實現標簽輸入框的詳細講解。 1. 任務概述 標…

使用位操作符實現加減乘除!

歡迎拜訪&#xff1a;霧里看山-CSDN博客 本篇主題&#xff1a;使用位操作符實現加減乘除 發布時間&#xff1a;2025.1.1 隸屬專欄&#xff1a;C語言 目錄 位操作實現加法運算&#xff08;&#xff09;原理代碼示例 位操作實現減法運算&#xff08;-&#xff09;原理代碼示例 位…

[Spring] Spring AOP

&#x1f338;個人主頁:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;?熱門專欄: &#x1f9ca; Java基本語法(97平均質量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection與…

Java-數據結構-時間和空間復雜度

一、什么是時間和空間復雜度&#xff1f; &#x1f4da; 那么在了解時間復雜度和空間復雜度之前&#xff0c;我們先要知道為何有這兩者的概念&#xff1a; 首先我們要先了解"算法"&#xff0c;在之前我們學習過關于"一維前綴和與差分"&#xff0c;"…

商湯C++開發面試題及參考答案

C++11 有哪些新特性? C++11 帶來了眾多令人矚目的新特性,極大地豐富和增強了這門編程語言的功能與表現力。 首先是類型推導方面,引入了auto關鍵字。通過auto,編譯器能夠自動根據初始化表達式來推導出變量的類型,這在處理復雜的模板類型或者較長的類型聲明時非常方便,能讓…

Cesium 實戰 27 - 三維視頻融合(視頻投影)

Cesium 實戰 27 - 三維視頻融合(視頻投影) 核心代碼完整代碼在線示例在 Cesium 中有幾種展示視頻的方式,比如墻體使用視頻材質,還有地面多邊形使用視頻材質,都可以實現視頻功能。 但是隨著攝像頭和無人機的流行,需要視頻和場景深度融合,簡單的實現方式則不能滿足需求。…

U盤格式化工具合集:6個免費的U盤格式化工具

在日常使用中&#xff0c;U盤可能會因為文件系統不兼容、數據損壞或使用需求發生改變而需要進行格式化。一個合適的格式化工具不僅可以清理存儲空間&#xff0c;還能解決部分存儲問題。本文為大家精選了6款免費的U盤格式化工具&#xff0c;并詳細介紹它們的功能、使用方法、優缺…

如何使用AI工具cursor(內置ChatGPT 4o+claude-3.5)

??溫馨提示&#xff1a; 禁止商業用途&#xff0c;請支持正版&#xff0c;充值使用&#xff0c;尊重知識產權&#xff01; 免責聲明&#xff1a; 1、本教程僅用于學習和研究使用&#xff0c;不得用于商業或非法行為。 2、請遵守Cursor的服務條款以及相關法律法規。 3、本…