日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SDP协议基本分析(RTSP、WebRTC使用)

發布時間:2023/12/1 编程问答 66 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SDP协议基本分析(RTSP、WebRTC使用) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 一、介紹
  • 二、標準 SDP 規范
    • 1. SDP 的格式
    • 2. SDP 的結構
      • (1)會話描述
      • (2)媒體描述
  • 三、WebRTC 中的 SDP

一、介紹

SDP(Session Description Protocal)以文本描述各端(PC 端、Mac 端、Android 端、iOS 端等)的能力,
這里的能力指的是各端所支持的:

  • 音頻編解碼器是什么,這些編解碼器設定的參數是什么
  • 使用的傳輸協議是什么
  • 以及包括的音視頻媒體是什么等等。
  • 例子:

    v=0 o=3409821183230872764 2 IN IP4 127.0.0.1 ... m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 110 112 113 126 ... a=rtpmap:111 opus/48000/2 a=rtpmap:103 ISAC/16000 a=rtpmap:104 ISAC/32000 ...

    如上面的 SDP 片段所示,該 SDP 中描述了一路音頻流,即m=audio,該音頻支持的 Payload ( 即數據負載 )
    類型包括 111、103、104 等等。
    在該 SDP 片段中又進一步對 111、103、104 等 Payload 類型做了更詳細的描述,如 a=rtpmap:111
    opus/48000/2 表示 Payload 類型為 111 的數據是 OPUS 編碼的音頻數據,并且它的采樣率是 48000,使用雙
    聲道。以此類推,你也就可以知道 a=rtpmap:104 ISAC/32000 的含義是音頻數據使用 ISAC 編碼,采樣頻率
    是 32000,使用單聲道。

    1 對 1 WebRTC 處理過程圖:

    如上圖所示,兩個客戶端 / 瀏覽器進行 1 對 1 通話時,首先要進行信令交互,而交互的一個重要信息就是
    SDP 的交換。
    交換 SDP 的目的是為了讓對方知道彼此具有哪些能力,然后根據雙方各自的能力進行協商,協商出大家認可
    的音視頻編解碼器、編解碼器相關的參數(如音頻通道數,采樣率等)、傳輸協議等信息。
    如上圖所示,阿花 與 阿強進行通訊,它們先各自在 SDP 中記錄自己支持的音頻參數、視頻參數、傳輸協議等
    信息,然后再將自己的 SDP 信息通過信令服務器發送給對方。當一方收到對端傳來的 SDP 信息后,它會將接
    收到的 SDP 與自己的 SDP 進行比較,并取出它們之間的交集,這個交集就是它們協商的結果,也就是它們最
    終使用的音視頻參數及傳輸協議了。

    二、標準 SDP 規范

    標準 SDP 規范主要包括SDP 描述格式和SDP 結構,而 SDP 結構由會話描述和媒體信息描述兩個部分組成。
    其中,媒體信息描述是整個 SDP 規范中最重要的知識,它又包括了:
    媒體類型
    媒體格式
    傳輸協議
    傳輸的 IP 和端口

    1. SDP 的格式

    SDP 是由多個 type=value 這樣的表達式組成的。其中,type是一個字符,value是一個字符串。需
    要特別注意的是,“=” 兩邊是不能有空格的。如下所示:

    v=0 o=7017624586836067756 2 IN IP4 127.0.0.1 s=‐ t=0 0 ... v=0

    SDP 由一個會話級描述(session level description)和多個媒體級描述(media level description)組成。
    會話級(session level)的作用域是整個會話,其位置是從 v= 行開始到第一個媒體描述為止。
    媒體級(media level)是對單個的媒體流進行描述,其位置是從 m= 行開始到下一個媒體描述(即下一個
    m=)為止。
    另外,除非媒體部分重新對會話級的值做定義,否則會話級的值就是各個媒體的缺省默認值。

    例子:

    v=0 o=7017624586836067756 2 IN IP4 127.0.0.1 s=‐ t=0 0 // 下面 m= 開頭的兩行,是兩個媒體流:一個音頻,一個視頻。 m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 126 ... m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 122 127 121 125 107 108 109 124 120 123 119 114 115 116 ...

    每一行都是以一個字符開頭,后面緊跟著等于號(=),等于號后面是一串字
    符。
    從“v=”開始一直到“m=audio”,這之間的描述是會話級的;而后面的兩個“m=”為媒體級。從中可以看出,在該
    SDP 描述中有兩個媒體流,一個是音頻流,另一個是視頻流。

    2. SDP 的結構

    了解了 SDP 的格式,下面我們來看一下 SDP 的結構,它由會話描述和媒體描述兩部分組成。

    (1)會話描述

    會話描述的字段比較多,下面四個字段比較重要,我們來重點介紹一下。

    第一個,v=(protocol version,必選)。例子:v=0 ,表示 SDP 的版本號,但不包括次版本號。第二個,o=(owner/creator and session identifier,必選)。例子:o=<username> <session id> <version> <network type> <address type> <address>,該例子是對一個會話發起者的描述。其中, o= 表示的是對會話發起者的描述; <username>:用戶名,當不關心用戶名時,可以用 “-” 代替 ; <session id> :數字串,在整個會話中,必須是唯一的,建議使用 NTP 時間戳; <version>:版本號,每次會話數據修改后,該版本值會遞增; <network type> :網絡類型,一般為“IN”,表示“internet”; <address type>:地址類型,一般為 IP4; <address>:IP 地址。第三個,Session Name(必選)。例子:s=<session name>,該例子表示一個會話,在整個 SDP 中有且只 有一個會話,也就是只有一個 s=。第四個,t=(time the session is active,必選)。例子:t=<start time> <stop time>,該例子描述了會話 的開始時間和結束時間。其中, <start time><stop time> 為 NTP 時間,單位是秒;當<start time><stop time>均為零時,表示持久會話。```

    (2)媒體描述

    媒體描述的字段也不少,下面我們也重點介紹四個。

    第一個,m=(media name and transport address,可選)。例子:m=<media> <port> <transport> <fmt list>,表示一個會話。在一個 SDP 中一般會有多個媒體描述。每個媒體描述以“m=”開始到下一個“m=”結束。 其中: <media>:媒體類型,比如 audio/video 等; <port>:端口; <transport>:傳輸協議,有兩種——RTP/AVP 和 UDP; <fmt list>:媒體格式,即數據負載類型 (Payload Type) 列表。第二個,a=*(zero or more media attribute lines,可選)。例子:a=<TYPE>或 a=<TYPE>:<VALUES>, 表示 屬性,用于進一步描述媒體信息;在例子中, 指屬性的類型, a= 有兩個特別的屬性類型,即下面要介紹的 rtpmap 和 fmtp。第三個,rtpmap(可選)。例子:a=rtpmap:<payload type> <encoding name>/<clock rate> [/<encodingparameters>]。 rtpmap 是 rtp 與 map 的結合,即 RTP 參數映射表。 <payload type> :負載類型,對應 RTP 包中的音視頻數據負載類型。 <encoding name>:編碼器名稱,如 VP8、VP9、OPUS 等。 <sample rate>:采樣率,如音頻的采樣率頻率 3200048000 等。 <encodingparameters>:編碼參數,如音頻是否是雙聲道,默認為單聲道。第四個,fmtp。例子:a=fmtp:<payload type> <format specific parameters>。 fmtp,格式參數,即 format parameters; <payload type> ,負載類型,同樣對應 RTP 包中的音視頻數據負載類型; < format specific parameters>指具體參數。

    具體的例子:

    v=0 o=4007659306182774937 2 IN IP4 127.0.0.1 s=‐ t=0 0 // 以上表示會話描述 ... // 下面的媒體描述,在媒體描述部分包括音頻和視頻兩路媒體 m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 110 112 113 126 ... a=rtpmap:111 opus/48000/2 // 對 RTP 數據的描述 a=fmtp:111 minptime=10;useinbandfec=1 // 對格式參數的描述 ... a=rtpmap:103 ISAC/16000 a=rtpmap:104 ISAC/32000 ... // 上面是音頻媒體描述,下面是視頻媒體描述 m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 122 127 121 125 107 108 109 124 120 123 119 114 115 116 ... a=rtpmap:96 VP8/90000

    可以清楚地看到在這段 SDP 片段里包括會話信息與媒體信息。在媒體信息中又包括了音
    頻流信息和視頻流信息。
    在音頻流和視頻流信息中,通過 rtpmap 屬性對它們做了進一步的說明。如音頻流支持 OPUS 和 ISAC 編碼,
    OPUS 編碼的采樣率是 48000,雙聲道,而 ISAC 編碼的采樣率可以是 16000 或 32000, 它們都是單聲道。
    視頻流支持 VP8,采樣率是 90000(實質是指時鐘信息) 。

    三、WebRTC 中的 SDP

    WebRTC 對標準 SDP 規范做了一些調整,更詳細的信息可以看這里,它將 SDP 按功能分成幾大塊:
    Session Metadata,會話元數據
    Network Description,網絡描述
    Stream Description,流描述
    Security Descriptions,安全描述
    Qos Grouping Descriptions, 服務質量描述

    下面這張圖清晰地表達了它們之間的關系:

    通過上圖我們可以看出,WebRTC 按功能將 SDP 劃分成了五部分,即會話元數據、網絡描述、流描述、安全
    描述以及服務質量描述。WebRTC SDP 中的會話元數據(Session Metadata)其實就是 SDP 標準規范中的
    會話層描述;流描述、網絡描述與 SDP 標準規范中的媒體層描述是一致的;而安全描述與服務質量描述都是
    新增的一些屬性描述。
    下圖我們來看一個具體的例子:

    ... //======= 安全描述 ============ a=ice‐ufrag:1uEe // 進入連通性檢測的用戶名 a=ice‐pwd:RQe+y7SOLQJET+duNJ+Qbk7z// 密碼,這兩個是用于連通性檢測的憑證 a=fingerprint:sha‐256 35:6F:40:3D:F6:9B:BA:5B:F6:2A:7F:65:59:60:6D:6B:F9:C7:AE:46:44:B4:E4:73:F8:60:67:4D:58:E2:EB: 9C //DTLS 指紋認證,以識別是否是合法用戶 ... //======== 服務質量描述 ========= a=rtcp‐mux a=rtcp‐rsiz a=rtpmap:96 VP8/90000 a=rtcp‐fb:96 goog‐remb // 使用 google 的帶寬評估算法 a=rtcp‐fb:96 transport‐cc // 啟動防擁塞 a=rtcp‐fb:96 ccm fir // 解碼出錯,請求關鍵幀 a=rtcp‐fb:96 nack // 啟用丟包重傳功能 a=rtcp‐fb:96 nack pli // 與 fir 類似 ... //============= 會話描述 ==================== v=0 o=7017624586836067756 2 IN IP4 127.0.0.1 s=‐ t=0 0 ... //================ 媒體描述 ================= //================ 音頻媒體 ================= /* * 音頻使用端口 1024 收發數據 * UDP/TLS/RTP/SAVPF 表示使用 dtls/srtp 協議對數據加密傳輸 * 111、103 ... 表示本會話音頻數據的 Payload Type */ m=audio 1024 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 126 //============== 網絡描述 ================== // 指明接收或者發送音頻使用的 IP 地址,由于 WebRTC 使用 ICE 傳輸,這個被忽略。 c=IN IP4 0.0.0.0 // 用來設置 rtcp 地址和端口,WebRTC 不使用 a=rtcp:9 IN IP4 0.0.0.0 ... //============== 音頻安全描述 ================ //ICE 協商過程中的安全驗證信息 a=ice‐ufrag:khLS a=ice‐pwd:cxLzteJaJBou3DspNaPsJhlQ a=fingerprint:sha‐256

    上面的 SDP 片段是摘取的 WebRTC SDP 中的安全描述與服務質量描述,這兩塊描述在標準 SDP 規范中沒有
    明確定義,它更多屬于 WebRTC 業務的范疇。
    其中,安全描述起到兩方面的作用,一方面是進行網絡連通性檢測時,對用戶身份進行認證;另一方面是收發
    數據時,對用戶身份的認證,以免受到對方的攻擊。從中可以看出 WebRTC 對安全有多重視了
    服務質量描述指明啟動哪些功能以保證音視頻的質量,如啟動帶寬評估,當用戶發送數據量太大超過評估的帶
    寬時,要及時減少數據包的發送;啟動防擁塞功能,當預測到要發生擁塞時,通過降低流量的方式防止擁塞的
    發生等等,這些都屬于服務質量描述的范疇。

    為便于你更好地理解和使用 SDP,接下來看一個真實的例子。
    下面這段 SDP 是我從一個真實的 1 對 1 場景中截取出來的 WebRTC SDP 的片段。并對 SDP 上做了詳細的
    注釋。

    //============= 會話描述 ==================== v=0 o=7017624586836067756 2 IN IP4 127.0.0.1 s=‐ t=0 0 ... //================ 媒體描述 ================= //================ 音頻媒體 ================= /* * 音頻使用端口 1024 收發數據 * UDP/TLS/RTP/SAVPF 表示使用 dtls/srtp 協議對數據加密傳輸 * 111、103 ... 表示本會話音頻數據的 Payload Type */ m=audio 1024 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 126 //============== 網絡描述 ================== // 指明接收或者發送音頻使用的 IP 地址,由于 WebRTC 使用 ICE 傳輸,這個被忽略。 c=IN IP4 0.0.0.0 // 用來設置 rtcp 地址和端口,WebRTC 不使用 a=rtcp:9 IN IP4 0.0.0.0 ... //============== 音頻安全描述 ================ //ICE 協商過程中的安全驗證信息 a=ice‐ufrag:khLS a=ice‐pwd:cxLzteJaJBou3DspNaPsJhlQ a=fingerprint:sha‐256 FA:14:42:3B:C7:97:1B:E8:AE:0C2:71:03:05:05:16:8F:B9:C7:98:E9:60:43:4B:5B:2C:28:EE:5C:8F3:17 ... //============== 音頻流媒體描述 ================ a=rtpmap:111 opus/48000/2 //minptime 代表最小打包時長是 10ms,useinbandfec=1 代表使用 opus 編碼內置 fec 特性 a=fmtp:111 minptime=10;useinbandfec=1 a=rtpmap:103 ISAC/16000 a=rtpmap:104 ISAC/32000 a=rtpmap:9 G722/8000 ... //================= 視頻媒體 ================= m=video 9 UDP/TLS/RTP/SAVPF 100 101 107 116 117 96 97 99 98 ... //================= 網絡描述 ================= c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 ... //================= 視頻安全描述 ================= a=ice‐ufrag:khLS a=ice‐pwd:cxLzteJaJBou3DspNaPsJhlQ a=fingerprint:sha‐256 FA:14:42:3B:C7:97:1B:E8:AE:0C2:71:03:05:05:16:8F:B9:C7:98:E9:60:43:4B:5B:2C:28:EE:5C:8F3:17 ... //================ 視頻流描述 =============== a=mid:video ... a=rtpmap:100 VP8/90000 //================ 服務質量描述 =============== a=rtcp‐fb:100 ccm fir a=rtcp‐fb:100 nack // 支持丟包重傳,參考 rfc4585 a=rtcp‐fb:100 nack pli a=rtcp‐fb:100 goog‐remb // 支持使用 rtcp 包來控制發送方的碼流 a=rtcp‐fb:100 transport‐cc ...

    從上面這段 SDP 中你應該可以總結出:SDP 是由一個會話層和多個媒體層組成的;而對于每個媒體層,
    WebRTC 又將其細劃為四部分,即媒體流、網絡描述、安全描述和服務質量描述。
    并且在上面的例子中有兩個媒體層——音頻媒體層和視頻媒體層,而對于每個媒體層,也都有對應的媒體流描
    述、網絡描述、安全描述及服務質量描述。

    總結

    以上是生活随笔為你收集整理的SDP协议基本分析(RTSP、WebRTC使用)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。