rtsp播放h265(hevc)
對rtsp來說,要播放h265只要正確解析sdp和rtp包即可,這裡分享下h265 sdp&rtp相關知識點,希望有用.
1. H265 Nal Unit Header 簡單介紹:
H264的Nal Unit頭是一個位元組,265變成兩個位元組:
F: 1 bit. forbidden_zero_bit. 265要求是0,是1的話指示語法違規等.
Type: 6 bits. Nal型別. vps是32, sps是33, pps是34, 字首sei是39. IDR是19和20.
LayerId: 6 bits. nuh_layer_id. 現在是0,將來可能擴充套件用.
TID: 3 bits. nuh_temporal_id_plus1. TemporalId 是TID-1.
2. SDP 引數介紹:
2.1 IETF 分配給h265的媒體子型別如下:
Type name: video
Subtype name: H265
可選引數:
profile-space, tier-flag, profile-id, profile-compatibility-indicator, interop-constraints,level-id,
sprop-sub-layer-id, recv-sub-layer-id, max-recv-level-id, tx-mode, sprop-vps, sprop-sps, sprop-pps等等, 具體請參考相關
文件,建議解析sprop-vps, sprop-sps, sprop-pps.
2.2 SDP 舉例:
m=video 0 RTP/AVP 96
a=rtpmap:96 H265/90000
a=fmtp:96 profile-space=0;profile-id=0;tier-flag=0;level-id=0;interop-constraints=000000000000;sprop-vps=QAEMAf//AIAAAAMAAAMAAAMAAAMAALUCQA==;sprop-sps=QgEBAIAAAAMAAAMAAAMAAAMAAKACgIAtH+W1kkbQzkkktySqSfKSyA==;sprop-pps=RAHBpVgeSA==
注意編碼名稱必須是:H265, Clock rate必須是90000.
3. RTP 打包格式.
實際中其實就用到兩種格式,一種是一個nal單元打包到一個rtp包中。一種是nal單元比較大,分片打包在多個rtp中.
3.1 單個Nal單元打包:
PayloadHdr 把 NAL單元頭填入就好.
3.2 Nal單元分片打包:
PayloadHdr還是拷貝NAL單元頭,但是要把Type換成49. FU header 就一個位元組,格式如下:
+---------------+
|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+
|S|E| FuType |
+---------------+
S:為1表示第一個分片。 E:為1表示表示最後一個分片。FuType就是實際的Nal type型別。
4. 小結:
h265和h264有很多相似之處,都有sps和pps,用00 00 00 01進行nal 單元分隔. 如果想測試h265 rtsp播放效果,可以從github下載播放器 測試h265播放。 更多問題歡迎交流: 294891451 499687479 。