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


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

實現思路:

對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中

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 單元分隔。

相關資料分享:RTP Payload Format for HEVC:http://pike.lysator.liu.se/docs/ietf/rfc/77/rfc7798.xml


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM