干货:如何实现RTSP推送H.264、RTSP推送H.265(hevc)

简介: rtsp推送相关的资料和测试软件比较少,本文介绍rtsp推送相关信令和测试效果:1. rtsp推送流程. 主要分两部分:第一部分先发送信令;第二部分发送rtp包。 信令流程: 1.1 先发送OPTIONS, OPTIONS比较常用,就不做详细说明了。

rtsp推送相关的资料和测试软件比较少,本文介绍rtsp推送相关信令和测试效果:


1. rtsp推送流程.

主要分两部分:第一部分先发送信令;第二部分发送rtp包。

 信令流程:

 1.1 先发送OPTIONS, OPTIONS比较常用,就不做详细说明了。

1.2 发送ANNOUNCE, 发送ANNOUNCE主要是把要推送的音视频信息通过sdp格式传给服务器。关于sdp信息如何构造,对于h264请参考rfc6184. h265请参考rfc7798. 下面举两个例子.

h264+aac ANNOUNCE:

ANNOUNCE rtsp://192.168.0.188:554/livexxxx.sdp RTSP/1.0
Content-Type: application/sdp
CSeq: 2
User-Agent: xxxyyy
Content-Length: 489 

v=0
o=- 0 0 IN IP4 127.0.0.1
s=dddookkk
c=IN IP4 192.168.0.188
t=0 0
m=video 0 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z00AKp2oHgCJ+WbgICAoAAADAAgAAAMBlCA=,aO48gA==; profile-level-id=4D002A
a=control:streamid=0
m=audio 0 RTP/AVP 97
a=rtpmap:97 MPEG4-GENERIC/44100/1
a=fmtp:97 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3; config=1208
a=control:streamid=1

h265(hevc) + aac ANNOUNCE:

ANNOUNCE rtsp://192.168.0.174:554/live3.sdp RTSP/1.0
Content-Type: application/sdp
CSeq: 2
User-Agent: mmmmd
Content-Length: 364

v=0
o=- 0 0 IN IP4 127.0.0.1
s=uvsdewewe
c=IN IP4 192.168.0.174
t=0 0
m=video 0 RTP/AVP 96
a=rtpmap:96 H265/90000
a=control:streamid=0
m=audio 0 RTP/AVP 97
a=rtpmap:97 MPEG4-GENERIC/44100/1
a=fmtp:97 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3; config=1208
a=control:streamid=1

1.3 发送 SETUP,这个和播放基本一样,请参考播放流程.

1.4 发送 RECORD,record之后,信令流程完成, 接下来发送rtp包即可。


关于rtp包的构造,h264 参考rfc6184。 h265参考 rfc7798。

接下来实际测试推送效果,从github或者大牛直播SDK官网下载rtsp h264 h265推送工具和rtsp播放工具(请下载windows版本测试).

1. 先打开rtsp推送程序SmartPublisherDemo.exe(测试h265推送请用64位exe) 进行配置:

2. 按上图配置好后,点击 "推送rtsp"按钮后会看到相应的播放地址:

3. 拷贝播放器地址,然后打开 SmartPlayer.exe, 进行播放即可:

4. 使用rtsp推送延时也非常低,可低至100多毫秒,下图是测试延时的截图:

可以看到,延时就100多毫秒,我是从家里推送到公网服务器,然后再拉取播放的.


小结:

rtsp相对于rtmp推送的优势是可以用udp传输音视频数据,udp传输可以避免延时累积,当然rtsp也可以用tcp传输rtp包, 上面的推送程序upd和tcp传输都支持。 另外rtsp协议本身就支持h265,不像rtmp还需要用一个非官方扩展去支持.  实际测试可以看出延时非常低,就几百毫秒,这个延时可以满足大多数低延时场景需求.  另外rtsp协议本身就是为实时流传输设计的,能更好的兼容现有的监控系统等. rtsp推送更适合互联网远程监控等项目.


资料参考:https://github.com/daniulive/SmarterStreaming

目录
相关文章
|
存储 缓存 安全
C++数组全解析:从基础知识到高级应用,领略数组的魅力与技巧
C++数组全解析:从基础知识到高级应用,领略数组的魅力与技巧
589 1
|
10月前
|
Docker 容器
将本地的应用程序打包成Docker镜像
将本地的应用程序打包成Docker镜像
1385 122
|
9月前
|
存储 数据采集 算法
构建AI数据管道:从数据到洞察的高效之旅最佳实践
本文探讨了大模型从数据处理、模型训练到推理的全流程解决方案,特别强调数据、算法和算力三大要素。在数据处理方面,介绍了多模态数据的高效清洗与存储优化;模型训练中,重点解决了大规模数据集和CheckPoint的高效管理;推理部分则通过P2P分布式加载等技术提升效率。案例展示了如何在云平台上实现高性能、低成本的数据处理与模型训练,确保业务场景下的最优表现。
|
人工智能 自然语言处理 测试技术
软件测试/人工智能|如何使用ChatGPT帮我们写自动化测试脚本
软件测试/人工智能|如何使用ChatGPT帮我们写自动化测试脚本
软件测试/人工智能|如何使用ChatGPT帮我们写自动化测试脚本
|
存储 关系型数据库 MySQL
MySQL中利用FIND_IN_SET进行包含查询的技巧
`FIND_IN_SET`提供了一种简便的方法来执行包含查询,尤其是当数据以逗号分隔的字符串形式存储时。虽然这个方法的性能可能不如使用专门的关系表,但在某些场景下,它提供了快速简便的解决方案。开发者应该根据具体的应用场景和性能要求,权衡其使用。
442 0
|
存储 Linux
挂在mount报错can't read superblock修复过程
`can't read superblock`错误表明存在文件系统或硬件问题,解决这类问题需要先从软件层面尝试修复,无效时再考虑硬件替换。值得注意的是,数据备份对于防范这类突发故障至关重要,应定期进行数据备份,以最大限度减少数据丢失风险。
6971 3
|
运维 安全 Linux
Softether详解(一)——V*N与softether概述
Softether详解(一)——V*N与softether概述
821 3
|
Linux 网络安全
1、Linux下搭建研究live555的开发环境
1、Linux下搭建研究live555的开发环境
595 0
|
编解码 C++
ffmpeg处理rtmp/文件/rtsp的推流和拉流
ffmpeg处理rtmp/文件/rtsp的推流和拉流   本demo演示了利用ffmpeg从服务器拉流或本地文件读取流,更改流url或文件类型名称发送回服务器或存到本地的作用。 由于本程序只写了3个小时,还要忙别的,所以会有一些bug和优化的地方。
6105 0