怎么支持RTSP播放H.265(HEVC)流

比眉伴天荒 2024-03-24 00:05 102阅读 0赞

随着H.265的普及,越来越多的开发者希望能支持低延迟的RTSP H.265播放,并分享相关经验:

实现思路:

对rtsp来说,要播放h265只要正确解析sdp和rtp包即可. 下面对这些相关内容做一些介绍.

1. H265 Nal Unit Header 简单介绍:

H264的Nal Unit头是一个字节,265变成两个字节:15611d5cb4b74962a2ded970ddd90d32.png

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单元打包:3790a376a15b466c845403c1af4fb1fb.png

eb56555a8aeb4958a0a75827c97c6a0e.png

PayloadHdr 把 NAL单元头填入就好.

3.2 Nal单元分片打包:ca54d05339ee4cc6a02091fb9d6a249f.png

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

推荐一款我们开发的浏览器播放器

liveweb是可支持H.264/H.265视频播放的流媒体播放器,性能稳定、播放流畅,可支持的视频流格式有RTSP、RTMP、HLS、FLV、WebRTC等,具备较高的可用性。liveweb还拥有Windows、Android、iOS版本,其灵活的视频能力,极大满足了用户的多样化场景需求。

liveweb具备较强的灵活性,在视频直播过程中liveweb可通过H5进行视频解码,只要客户端支持H5,就能完美进行视频的无插件直播,同时还支持大码率视频直播,并可支持H.264、H.265两种编码格式。如果大家正在找寻一款供能强大的流媒体播放器,那么liveweb将会是一个不错的选择,我们也欢迎大家的了解和试用

发表评论

表情:
评论列表 (有 0 条评论,102人围观)

还没有评论,来说两句吧...

相关阅读