1. 程式人生 > >如何支援RTSP播放H.265(HEVC)流

如何支援RTSP播放H.265(HEVC)流

隨著H.265的普及,越來越多的開發者希望大牛直播SDK能支援低延遲的RTSP H.265播放,並分享相關經驗:

廢話不多說,先上圖(以播放海康H.265 RTSP攝像頭資料(解析度:1920*1080)為例):

測試APP下載(SmartPlayer.exe):

實現思路:

對rtsp來說,要播放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 reate必須是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播放效果。 更多問題歡迎加入大牛直播技術QQ交流群: 294891451 或者 499687479 。

相關資料分享: