rtsp协议中数据的分包
前言
RTSP視頻傳輸推流中,數據采用數據包的形式推送到指定端口,一個完整數據包由包頭和包內數據組成。
 由于H.264與H.265壓縮數據格式不一致,故兩者相關接口數據協議也不一致。
 在標準以太網通信中,數據包通常有MTU限制,系統默認MTU值為1500,故壓縮圖像數據中,當每包傳輸數據大于1500Byte時,采用分包傳輸。
RTSP包頭
RTSP包由RTSP頭部和RTSP載荷構成,包頭如表B.1:
 
V:2Bit,用來標志使用RTSP版本,此處設置為2。
 P:1Bit,填充位,根據RTSP協議標準,當前不使用加密算法,此位為0。
 X:1Bit,擴展位,根據RTSP協議標準,當前固定頭后面不跟隨頭擴展,此位為0.
 CC:4Bit,CSRC 計數,4 位。表示跟在 RTP 固定包頭后面CSRC 的數目,對于本文所要實現的基本的流媒體服務器來說,沒有用到混合器,該位也設為 0x0。
 M:1Bit,如果當前 NALU為一個接入單元最后的那個NALU,那么將M位置 1;或者當前RTP 數據包為一個NALU 的最后的那個分片時(NALU 的分片在后面講述),M位置 1。其余情況下M 位保持為 0。
 PT:7Bit,載荷類型,對于H.264 和H.265視頻格式,當前并沒有規定一個默認的PT 值。因此選用大于 95 的值可以。此處設為0x60(十進制96)。
 SN:16Bit,發送方在每發送完一個RTP包后就將該域的值增加1,可以由該域檢測包的丟失及恢復包的序列,序列號的初始值是隨機的,一般初始化為0。
 時間戳:時間戳,32 位。同序號一樣,時間戳的起始值也為隨機值,此處設為0。根據RTSP協議標準與時間戳相應的時鐘頻率必須為90000HZ。 接收者使用時戳來計算延遲和延遲抖動,并進行同步控制。
 同步源標識符(SSRC):32比特,同步源就是RTP包源的來源。在同一個RTP會話中不能有兩個相同的SSRC值
 貢獻源列表(CSRC List):0-15項,每項32比特,這個不常用
H.264/H.265包頭
表B.2 H.264/H.265包頭信息表
H.264 Nalu信息
H.264Nalu由一個字節構成,詳見表B.3。
 
 forbidden_zero_bit :禁止位,0正常,1為語法有錯誤
 nal_ref_idc:參考級別,表示NAL的優先級,0-3, 取值越大,表示當前NAL越重要,如果當前NAL是屬于參考幀的片,或是序列參數集,或是圖像參數集這些重要單位時,取值必須>0;
 nal_unit_type:該幀的類型,類型說明表 B.4;
 表B.4 類型說明表
 
H.265 Nalu信息
H.265Nalu由兩個字節構成,詳見表B.5。
 
 F:forbidden_ero_bit, 禁止位,0正常,1為語法有錯誤。
 LayId:通常為0。
 Tid:通常為1。
 Type:該幀的類型,主要類型見表B.6。
 表B.6 類型說明表
 
RPST數據包
長度小于MTU的NAL單元數據,只要在讀取完該單元后,去掉起始碼(0x 00 00 00 01),就可以直接作為rtp負載內容加載到rtp包頭部后發送出去了,H.264和H.265移植。每個IDR幀對應的sps、pps、sei包時間戳一致。
RPST H.264分包
長度大于MTU的NAL單元數據,需要分包發送數據,過長的數據經過UDP或者TCP發送時會自動被分包發送,到接收端會產生粘包等問題,這里常用FU進行分包,分包格式表B.7。
 表B.7 H.264分包說明表
 
 F :禁止位,0正常,1為語法有錯誤
 NRI:參考級別,表示NAL的優先級,0-3, 取值越大,表示當前NAL越重要,如果當前NAL是屬于參考幀的片,或是序列參數集,或是圖像參數集這些重要單位時,取值必須>0;
 TYPE:固定值28;
 S:Start,表示分片包的第一包
 E:End,表示分片包的最后一包
 R:缺省值0(保留)
 TYPE:nal_unit_type
 當分片包不是第一包也不是最后一包時,S、E都為0;
RPST H.265分包
長度大于MTU的NAL單元數據,需要分包發送數據,過長的數據經過UDP或者TCP發送時會自動被分包發送,到接收端會產生粘包等問題,這里常用FU進行分包,分包格式表B.7。
 表B.7 H.264分包說明表
 
 S E TYPE F NRI TYPE
 F :禁止位,0正常,1為語法有錯誤
 NRI:參考級別,表示NAL的優先級,0-3, 取值越大,表示當前NAL越重要,如果當前NAL是屬于參考幀的片,或是序列參數集,或是圖像參數集這些重要單位時,取值必須>0;
 TYPE:固定值28;
 S:Start,表示分片包的第一包
 E:End,表示分片包的最后一包
 TYPE:nal_unit_type
 當分片包不是第一包也不是最后一包時,S、E都為0;
總結
以上是生活随笔為你收集整理的rtsp协议中数据的分包的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 超星toPDF
- 下一篇: 【RX解码BT656输出】XS9922A
