1. 程式人生 > >rtsp播放h265(hevc)

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 。