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。接受者可以用它來檢測分組丟失和恢復分組順序。...