rtp對h264 nalu fu a的處理

2021-09-11 10:40:15 字數 1553 閱讀 8541

1.fu-a的分片格式

fu indicator有以下格式

+---------------+

|0|1|2|3|4|5|6|7|

+-+-+-+-+-+-+-+-+

|f|nri|  type   |

+---------------+

fu指示位元組的型別域 type=28表示fu-a。。nri域的值必須根據分片nal單元的nri域的值設定

f: forbidden_zero_bit 在h.264規範中規定這一位必須為0

nri: 2個bit,取00~11似乎指示這個nalu的重要性

type:5個bit 這個nalu單元的型別

0 沒有定義

1-23 nal單元 單個nal單元包   (即乙個rtp包僅由乙個完整的nalu組成,)

24 stap-a 單一時間的組合包     (多個nalu單元組成乙個rtp包)

25 stap-b 單一時間的組合包

26 mtap16 多個時間的組合包

27 mtap24 多個時間的組合包

28 fu-a 分片的單元       (乙個nalu單元封裝成多個rtp包)

29 fu-b 分片的單元

30-31 沒有定義

fu header的格式如下:

+---------------+

|0|1|2|3|4|5|6|7|

+-+-+-+-+-+-+-+-+

|s|e|r|  type   |

+---------------+

s: 1 bit

當設定成1,開始位指示分片nal單元的開始。當跟隨的fu荷載不是分片nal單元荷載的開始,開始位設為0。

e: 1 bit

當設定成1, 結束位指示分片nal單元的結束,即, 荷載的最後位元組也是分片nal單元的最後乙個位元組。當跟隨的fu荷載不是分片nal單元的最後分片,結束位設定為0。

r: 1 bit

保留位必須設定為0,接收者必須忽略該位。

type: 5 bits

結合live555**分析如下

void h264fuafragmenter::dogetnextframe()  else  else 

flastfragmentcompletednalunit = true; // by default

if (fcurdataoffset == 1) else

} else else

memmove(fto, &finputbuffer[fcurdataoffset-2], numbytestosend);

fframesize = numbytestosend;

fcurdataoffset += numbytestosend - 2;

}if (fcurdataoffset >= fnumvaliddatabytes)

// complete delivery to the client:

framedsource::aftergetting(this);

}}

原文: 

rtp對h264 nalu fu a的處理

1.fu a的分片格式 fu indicator有以下格式 0 1 2 3 4 5 6 7 f nri type fu指示位元組的型別域 type 28表示fu a。nri域的值必須根據分片nal單元的nri域的值設定 f forbidden zero bit 在h.264規範中規定這一位必須為0 ...

對H264進行RTP封包原理

1.引言 2.rtp 協議關鍵引數的設定 其中比較關鍵的引數設定解釋如下 1 標示位 m 1 位,該標示位的含義一般由具體的 應用框架 profile 定義,目的在於標記處rtp 流中的重要事件。3 序號 16 位,每傳送乙個 rtp 資料報,序號加 1。接受者可以用它來檢測分組丟失和恢復分組順序。...

對H264進行RTP封包原理

1.引言 2.rtp 協議關鍵引數的設定 其中比較關鍵的引數設定解釋如下 1 標示位 m 1 位,該標示位的含義一般由具體的 應用框架 profile 定義,目的在於標記處rtp 流中的重要事件。3 序號 16 位,每傳送乙個 rtp 資料報,序號加 1。接受者可以用它來檢測分組丟失和恢復分組順序。...