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

简介: 随着H.265的普及,越来越多的开发者希望大牛直播SDK能支持低延迟的RTSP H.265播放,并分享相关经验: 废话不多说,先上图(以播放海康H.265 RTSP摄像头数据(分辨率:1920*1080)为例): 测试APP下载(SmartPlayer.

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

废话不多说,先上图(以播放海康H.265 RTSP摄像头数据(分辨率:1920*1080)为例):

测试APP下载(SmartPlayer.exe):

[demo测试程序] Windows推送、播放、合成、导播、连麦Demo(32位)本地下载

实现思路:

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

  1. H265 Nal Unit Header 简单介绍:

H264的Nal Unit头是一个字节,265变成两个字节:
image

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.

  1. 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.

  1. RTP 打包格式

实际中其实就用到两种格式,一种是一个nal单元打包到一个rtp包中。一种是nal单元比较大,分片打包在多个rtp中.

3.1 单个Nal单元打包:

image

PayloadHdr 把 NAL单元头填入就好.

3.2 Nal单元分片打包:

PayloadHdr还是拷贝NAL单元头,但是要把Type换成49. FU header 就一个字节,格式如下:

0 1 2 3 4 5 6 7

+-+-+-+-+-+-+-+-+

S:为1表示第一个分片。 E:为1表示表示最后一个分片。FuType就是实际的Nal type类型。

  1. 小结:

h265很多和h264相似之处,都有sps和pps,用00 00 00 01进行nal 单元分隔. 如果想测试h265 rtsp播放效果,可以从github下载播放器 测试h265播放效果。 更多问题欢迎加入大牛直播技术QQ交流群: 294891451 或者 499687479 。

相关资料分享:

RTP Payload Format for HEVC:http://pike.lysator.liu.se/docs/ietf/rfc/77/rfc7798.xml
Github:https://github.com/daniulive/SmarterStreaming

相关文章
|
安全 网络安全 开发工具
百度搜索:蓝易云【git无法使用git协议clone github仓库问题解决方法】
通过尝试以上解决方法,你应该能够解决无法使用Git协议克隆GitHub仓库的问题。选择适合你网络环境和要求的方法,并根据需要进行相应的配置。
623 2
|
存储 数据安全/隐私保护 Ubuntu
安装Coturn(TURN / STUN服务器)
安装Coturn(TURN / STUN服务器) 在云上使用TURN / STUN服务器,需要打开安全组中的所有UDP端口,因为STUN / TURN将使用整个0-65535范围内的任何可用端口。 在Ubuntu 16.
14010 0
|
10月前
|
编解码 监控 网络协议
如何使用FFmpeg实现RTSP推送H.264和H.265(HEVC)编码视频
本文详细介绍了如何使用FFmpeg实现RTSP推送H.264和H.265(HEVC)编码视频。内容涵盖环境搭建、编码配置、服务器端与客户端实现等方面,适合视频监控系统和直播平台等应用场景。通过具体命令和示例代码,帮助读者快速上手并实现目标。
2369 6
|
消息中间件 RocketMQ 存储
|
设计模式 算法 安全
【C/C++ 关键字 函数说明符 】C++ final关键字(修饰成员函数无法被子类重写覆盖)
【C/C++ 关键字 函数说明符 】C++ final关键字(修饰成员函数无法被子类重写覆盖)
414 1
|
10月前
|
人工智能 自然语言处理 前端开发
100个降噪蓝牙耳机免费领,用通义灵码从 0 开始打造一个完整APP
打开手机,录制下你完成的代码效果,发布到你的社交媒体,前 100 个@玺哥超Carry、@通义灵码的粉丝,可以免费获得一个降噪蓝牙耳机。
6564 16
|
机器学习/深度学习 算法 异构计算
挑战Transformer的Mamba是什么来头?
【5月更文挑战第4天】Mamba是一种新型序列建模架构,由Albert Gu和Tri Dao提出,旨在解决Transformer在处理长序列数据时的效率问题。该模型采用选择性状态空间,允许动态调整状态以关注重要信息,忽略冗余。Mamba通过硬件感知的并行算法实现线性时间复杂度,提高计算效率,并简化架构,融合状态空间模型与Transformer的MLP块。在语言建模等任务中,Mamba表现优越,甚至超越更大规模的Transformer模型。然而,对于某些连续信号如音频,其性能可能不及传统LTI模型。
302 9
无线通信中的重传机制是如何工作的?
无线通信中的重传机制是如何工作的?
602 0
|
Java
JVM 调优常用参数(JDK1.8.0_281+CentOS7)参数1.8其他版本JDK也适用
JVM 调优常用参数(JDK1.8.0_281+CentOS7)参数1.8其他版本JDK也适用
348 0
|
Python Windows
python.exe和pythonw.exe之间的区别
python.exe和pythonw.exe之间的区别