從RTP包中解析H265資料

2021-10-06 22:00:21 字數 2433 閱讀 8367

首先上**:

//rtp拆包成nalu h265

public static byte rtptonaluh265pack(rawpacket rtppacket));

bb.put(nalu_header0);

bb.put(nalu_header1);

byte dest = new byte[rtppayload.length-3];

system.arraycopy(rtppayload, 3, dest, 0, rtppayload.length-3);

bb.put(dest);

} else if (end_flag != 0) else

} else if (nalu_type == 48)

srcoffset = 2;

bb = bytebuffer.allocate(bufferlen);

while ((rtppayload.length - srcoffset) > 2) //迴圈解析rtp,將組合後的nalu取出來,再加上起始碼

); //nalu的起始碼

bb.put(dest);

srcoffset += size;

} } else if (nalu_type == 1 || nalu_type == 19 || nalu_type == 32 || nalu_type == 33 ||

nalu_type == 34 || nalu_type == 39) );

bb.put(rtppayload);

} else

if (bb != null)

// }

return null;

}

首先是h265的格式,參考:

這裡主要需要關注h265封包成rtp的部分:

(1)、乙個nalu打包成乙個rtp包,只需要在乙個12位元組的rtp包頭後新增去掉開始碼的nalu即可

(這種模式在乙個nalu的大小小於mtu時使用)。

(2)、乙個nalu打包成幾個rtp包(fus模式),在12個位元組的rtp頭後面有兩個位元組的payloadhdr和乙個位元組的fu

header。payloadhdr的值等於nalu頭的type位改為49(十進位制)後的值,fu header第1位標記rtp包是否為nalu的第一片,第2位標記rtp包是否為nalu的最後一片。後6位是nalu頭的type位。

從上面說明大概可知,h265的封包模式如下:

1、單一單元模式

乙個rtp包只包含乙個nalu

2、分片封包

fu header還包括了是否是第一片或者最後一片的標識。

3、組合封包模式

這篇部落格沒有說明組合封包模式,但是根據 實驗發現,組合封包模式的時候,type的值是48。

下面舉例子對第

二、三種情況進行說明。

1、組合封包例子

例如如下的h265封裝後的rtp包

前2個位元組是payloadhdr,內容是:60 01,其格式如下:

所以要獲取1-6(從0開始數)位上的內容,結果是48,說明是組合封包模式。

接下來2個位元組是nalu的長度00 17,標識了nalu的長度是23。

依次類推,第二個nalu的長度是00 22,也就是34,然後後面的34個位元組是第二個nalu的內容。

2、分片封包例子

下面是分片封包的例子

前2個位元組是62 01,根據格式獲取到type的值是49,所以可知是分片封包型別。

接下來的1個位元組是fu header,值是93。

1001 0011

其中後6位是nalu type,可以知道nalu type是19,屬於idr型別。而第一位是1,所以它是第乙個分片。

看一下最後乙個分片的格式:

第3位元組是53,二進位制格式為:0101 0011, nalu type是19, 第二位是1,所以是最後乙個分片。

H 265中熵編碼器的總結

今天對h.265裡的熵編碼器做個總結 1.零階哥倫布指數編碼 屬於變長編碼,vlc 主要用於vps sps pps slice頭部資訊的編碼 變長編碼的原理 給大概率符號分配較短碼字,給小概率符號分配符較短碼字 2.cabac 算數編碼 主要用於資料和引數的編碼 cabac包含兩種編碼器,一種是常規...

html5中h265 H265之格式解析

頭定義如下 前面 4個位元組位00 00 00 01 為nul頭,這個和h264是一樣的。下面兩個位元組為40 01 二進位制 0100 0000 0000 0001 f 0 naltype 100 000 32 vps layerid 0 0000 0 0 tid 001 1 再根據h265的na...

H265 HEVC 裸流資料解析

nalu type型別判斷方式 int type code 0x7e 1 型別判斷方式為 00 00 00 01 後的乙個位元組右移乙個位,下面是幾種主要型別 0x40 1 得到0x20,十進位制32,為nal vps 0x42 1 得到0x21,十進位制33,為nal sps 0x44 1 得到0...