• 如何支持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

  • 相关阅读:
    Spring
    JavaWeb
    JDBC
    MYSQL
    IDEA个人常用快捷键
    Web前端-JAVASCRIPT
    Web前端-HTML
    注解与反射
    多线程
    区块链 ATS多策略量化机器人简介
  • 原文地址:https://www.cnblogs.com/daniulivesdk/p/10957173.html
Copyright © 2020-2023  润新知