首先上**:
//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即可從上面說明大概可知,h265的封包模式如下:(這種模式在乙個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位。
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...