RTMP vs SRT:延迟与最大带宽的比较

引言

文来自Haivision的白皮书,比较了RTMP和SRT两种流媒体协议的优缺点,并通过实验测试了两种协议在延迟和最大带宽两方面的表现。

本文福利, 免费领取C++音视频学习资料包+学习路线大纲、技术视频/代码,内容包括(音视频开发,面试题,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,编解码,推拉流,srs)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

介绍

对于希望在IP上以低端到端延时进行视频传输的人来说,可供选择的传输协议非常有限。尤其当使用公网作为传输媒介时,因为公网传输需要克服丢包、抖动等诸多障碍。基于此,文中比较和评估了两种常用协议RTMP和SRT的优缺点。

RTMP是一种成熟的流媒体协议,由于其基于TCP的包重传机制和可调缓冲区的能力,所以以可靠性著称。SRT是由Haivision开发的一种开源协议,它使用UDP数据流之上的智能分组重传机制,并使用AES256加密。文中研究了两种传输协议在公网上的传输能力,包括缓冲区的大小,延迟和带宽限制等。

传输时延对比

文中比较的时延指端到端延时,即一帧视频从摄像机采集到在显示器上显示所需要的时间。端到端延时主要受传输链和视频处理步骤的影响,包括编解码,传输媒介(互联网,卫星,光纤等),视频源和显示设备等。虽然每个步骤的延时较小,但累积起来会引入显著的延时。本部分的重点是研究RTMP和SRT对端到端延时的影响,为了使结果具有可比性,所以在测试阶段使用配置完全相同的设备,唯一的变量便是RTMP和SRT协议。但在某些情况下,为了获得稳定的RTMP流,需要对配置作出一定的更改。

测试装置

测试装置要求设计简单,易于复制,且不需要使用特殊的测试设备,最终的测试装置如图1所示。测试系统主要由信号源,显示屏幕,编码器,解码器,Wowza服务器和Haivision媒体网关服务器等组件构成。

图1 测试装置

信号源使用Blackmagic Hyperdeck Shuttle录像机作为视频源,直接作为第一个屏幕,另一个屏幕连接到编码器的输出端,两个屏幕均会显示时间码,时间码可以用来区分视频中的每一帧。使用一个摄像机捕获两个屏幕的图片(如图2所示),便可以根据时间码来得到编码过程中的延时。

图2 视频源与编码输出(时间差为编码时延)

编码器为一个Haivision KB或一个Makito X编码器。基带视频信号经过编码后,可以并行生成RTMP和SRT视频流,对两路视频流采取相同的音频和视频处理过程。编码配置参数如下所示。编码后的视频流码率达到了3Mbps,并且两路输出比特率有所差异,这是由不同的协议开销造成的。

表1 编码配置参数

解码器使用了VLC播放器,这是工业和家庭使用最广泛的视频播放器之一。本测试装置使用了标准的VLC安装设置,默认缓存为250ms。

RTMP流的传输目的地为Wowza流引擎,并托管在AWS上。而SRT流的目的地为Haivision媒体网关服务器,也托管在AWS实例上,并且二者位于同一个数据中心。虽然Wowza也支持SRT协议,但是它的SRT使用的是非常旧的版本,不能发挥SRT的全部潜力。

网络连接的上行链路由Fritzbox 7590 DSL调制解调器建立,下行链路为100Mps,上行链路为42Mbps。连接性能时刻处于监视状态,以确保该连接没有被其他应用程序饱和。

RTMP和SRT的一个主要区别是RTMP流包头中不包含时间戳,只包含实际流的时间戳,并且单个数据包不包含时间戳。因此RTMP接收端需要在规定的时间间隔内将每个接收到的数据包发送到解码器,为了消除各个包之间在传输时间上的差异,需要使用较大的缓冲区。而SRT流每一个数据包都包含时间戳,这使得接收端可以重建信号特性并且显著降低缓冲区的需求,也就是说,SRT发送端的比特流和接收端的比特流是高度相似的。RTMP和SRT流传输前后信号特性如图3所示。

(a)RTMP视频流信号特性

(b)SRT视频流信号特性

图3 RTMP和SRT流信号特性

RTMP和SRT的另一个显著区别是包重传机制。RTMP基于TCP,依赖于接收端返回的ACK,但是接收端在接收到一个包以后并不会立刻返回ACK,而是要在一系列的包接收完以后才会发回。如果发送端接收到ACK发现有丢包存在,则将当前的包序列重传。而SRT可以识别每个丢失的包,在发生丢包时只会重传丢失的包,从而能够降低延时。

此外,发送端和接收端的缓冲区大小也会影响延时。更大的缓冲区可以提供更高的吞吐量,但会引入更大的延时,并且每秒字节吞吐量必须小于缓冲区大小/RTT。客户端播放器越远,吞吐量就越小,除非距离很远,否则播放器的默认设置是足够的。但缓冲区也不能设置得太低,不然会严重限制吞吐量。在测试中,尝试使用65000字节的默认设置,但对于目的地在澳大利亚的流,RTT为360ms,为了实现稳定的流,所以缓冲区增加到260000字节。

延迟测试结果

与预期结果一样,视频流目的地越远,对端到端延迟的影响越大。这里的延时是指绝对的端到端延时,包含编解码,传输和显示设备延时。延时的测试结果如图4所示。

图4 往返端到端延时测试结果

德国-悉尼-德国:为了RTMP视频流和音频流的稳定,接收端缓冲区需要提高到260000字节,是默认设置的4倍。由于测试基于双向流,所以VLC播放器的接收缓冲区需要从默认值250ms增加到2000ms。低于这些值时,流的质量会受到影响甚至无法播放。

德国-California-德国:与悉尼相比,尽管去California的RTT约为悉尼的一半,但是RTT不是影响延迟的唯一因素。回到德国的链路有较大的波动导致单个包传输时间有差异。视频流从德国到California的传输使用默认缓冲区大小65000字节,返回路径需要增加缓冲区路径到650ms。

德国-Virginia-德国:令人惊讶的是,测试结果显示发送到Virginia的RTT比California的稍高(小于3帧或50ms),尽管在地图上Virginia距离德国更近。这说明最短的地理路径不一定是最快的,数据在数据中心和路由器之间以光速进行传输。根据数据链路的容量利用率,视频信号可能并不总是沿着最短的路径传输,而是以更快的路径而非更直接的路径。尽管RTT略高于California,但链路更稳定,抖动更少,并且允许RTMP缓冲区更小。使用默认值65000字节和250ms的VLC。

Thuringia-Frankfurt-Thuringia:对于从德国Thuringia到Frankfurt的AWS数据中心的媒体流,RTT只有17ms。端到端往返延时与Virginia和California相比并没有降低很多。但是,相比美国位置,SRT协议能够降低超过1秒的延迟。

在这些测试中,SRT相对于RTMP快了约2.5倍到3.2倍。如图5所示(使用Haivision KB编码器)。

图5 软件编解码器端到端延时测试结果

到目前为止,使用软件编解码最快的结果也有1.5s的延时,这在某些对延时要求较高的场景中是远远无法接受的。因此可以考虑使用硬件编码器和解码器来进一步降低延时。

测试装置中,硬件编解码器选型为Haivision Makito X,实际测试的延时结果如图6所示。实验结果表明,使用硬件编解码器可以显著降低延时。

图6 软件编解码器与硬件编解码器延时测试结果对比

最大传输带宽对比

上面的测试结果证明了SRT在降低延时方面具有显著的作用,下面的测试则主要研究SRT在视频质量方面的性能。测试方法为逐步提高媒体流的带宽,并观察在当前带宽下视频流能否成功传输。考虑到延时才是测试的重点,所以在增加媒体流带宽时,保持缓冲区大小不变。带宽测试装置如图7所示。

图7 带宽测试装置

为了测试高带宽媒体流,测试地点选择了具有良好的互联网连接状况的地方——位于华盛顿Redmond的微软制作工作室,距离下一个互联网主要连接点只有两跳的距离,并且所有的连接设备都支持1Gbps的传输速率。具体测试方法为,使用2Mbps视频流来确定缓冲区大小,一旦2Mbps流稳定下来,则固定缓冲区大小不变,依次使用1,2,6,10,20Mbps的流进行传输测试。媒体流由Haivision KB5.4编码器提供,发送到California和Virginia的AWS数据中心的Haivision媒体网关,为了测试视频的质量,视频流通过SRT被发回Redmond,并在Haivision Play 2000机顶盒上播放。测试结果如图8所示。

图8 带宽测试结果

带宽测试结果表明,SRT在任何地方都可以传输高达20Mbps码率的媒体流,而RTMP只在发送端和接收端位于同一大洲时才表现良好,当距离过远时,如图8中红色线所示,只能传输2Mbps码率的流。

结论

在端到端延迟和最大传输码率方面,SRT的性能高于RTMP。尽管这些测试是在实验室中完成,并且使用工具包来添加丢包和抖动,但在测试过程中有意使用公网进行传输,所以结果仍然具有较高的可信度。展望未来,SRT会成为流媒体公网传输的又一个选择。

本文福利, 免费领取C++音视频学习资料包+学习路线大纲、技术视频/代码,内容包括(音视频开发,面试题,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,编解码,推拉流,srs)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/607890.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

zabbix监控部署

目录 一、什么是zabbix? 二、zabbix监控原理 三、zabbix常见的五个程序 四、zabbix监控mysql实验 1、部署服务端 2、部署客户端 3、自定义监控内容 一、什么是zabbix? zabbix 是一个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级的…

如何让GPT支持中文

上一篇已经讲解了如何构建自己的私人GPT,这一篇主要讲如何让GPT支持中文。 privateGPT 本地部署目前只支持基于llama.cpp 的 gguf格式模型,GGUF 是 llama.cpp 团队于 2023 年 8 月 21 日推出的一种新格式。它是 GGML 的替代品,llama.cpp 不再…

构建异步高并发服务器:Netty与Spring Boot的完美结合

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 ChatGPT体验地址 文章目录 前言IONetty1. 引入依赖2. 服务端4. 客户端结果 总结引导类-Bootstarp和ServerBootstrap连接-NioSocketChannel事件组-EventLoopGroup和NioEventLoopGroup 送书…

C#之反编译之路(二)

先阅读C#之反编译之路(一)可以增加文章连续性 阅读C#之反编译之路(一) 如何快速定位代码位置 用一个小小的例子举例,用户反馈新能源车牌号无法录入,燃油车牌正常,查看日志报如下错误 拿到关键字车牌号长度错误直接反编译代码 打开dnSpy.exe→加载项目→CtrlF打开搜索框→输入…

学习笔记16——操作系统

学习笔记系列开头惯例发布一些寻亲消息,感谢关注! 链接:https://www.mca.gov.cn/lljz/indexdetail.html?idd0afa7f6f36946319a206d61937f9b63&type0&t10.11199120579373845 八股——操作系统一些基础知识整理 一个java程序对应一个…

极海APM32F003通过IEC 60730/60335功能安全认证,为产品安全保驾护航

近日,极海APM32F003系列工业级超值型MCU,已顺利通过IEC 60730/60335功能安全认证,并可提供符合CLASS B标准的功能安全设计套件,有助于客户减少认证时间与成本,快速推出稳定可靠的终端产品。 *VDE是德国的一个权威性电气…

Spring - 配置支持多数据源

目录 SpringBoot整合多数据源整合步骤具体整合步骤如下:1、在application.properties中配置出多个数据源2、在代码中创建出mapper目录,在mapper目录下创建出不同数据源的目录创建出目录MySQL数据源的MapperSQL Server数据源的Mapper 3、创建config packa…

Excel:通过excel将表数据批量转换成SQL语句

这里有一张表《student》,里面有10条测试数据,现在将这10条测试数据自动生成 insert语句,去数据库 批量执行 P.S. 主要用到excel表格中的 CONCATENATE函数,将单元格里面的内容填入到sql里面对应的位置 1. 先写好一条insert语句&a…

Vue使用printJS导出网页为pdf、printJS导出pdf

先放几个参考链接 感谢! Vue使用PrintJS实现页面打印功能_vue print.js 设置打印pdf的大小-CSDN博客 前台导出pdf经验汇总 (html2canvas.js和浏览器自带的打印功能-print.js)以及后台一些导出pdf的方法_iqc后台管理系统怎么做到导出pdf-CSD…

使用fs.renameSync(oldPath,newPath)方法,报错Error: EPERM: operation not permitted

出错翻译:表示操作被拒绝,因为当前用户没有足够的权限执行该操作。这可能是由于文件或目录 的权限设置不正确或操作系统限制所致 出现错误场景:使用element-plus的Upload 上传功能;后端使用Nodejs提供的fs.renameSync(oldPath,ne…

可碧教你C++——位图

本章节是哈希的延申 可碧教你C——哈希http://t.csdnimg.cn/3R8TU 一文详解C——哈希 位图 位图是基于哈希表的原理产生的一种新的container——bitset 基于哈希映射的原理,我们在查找的时候,可以直接去定址到元素的具体位置,然后直接访问该…

OpenAI ChatGPT-4开发笔记2024-04:Chat之Tool之2:multiple functions

从程序员到ai Expert 1 定义参数和函数2 第一轮chatgpt3 第一轮结果和function定义全部加入prompt再喂给chatgpt4 大结局7 参考资料 上一篇解决了调用一个函数的问题。这一篇扩展为调用3个。n个自行脑补。 1 定义参数和函数 #1.设定目标 import json import openai#1.定义para…

基于JavaWeb+BS架构+SpringBoot+Vue协同推荐的黔醉酒业白酒销售系统的设计和实现

基于JavaWebBS架构SpringBootVue基于协同推荐的黔醉酒业白酒销售系统系统的设计和实现 文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 文末获取源码 Lun文目录 1.2 国内外研究概况 2 1.3 研究的内容 2 1.4 本章…

mybatisPlus 将List<String>字段转成json字符串,使用JacksonTypeHandler以及自定义类型处理器实现

文章目录 场景使用JacksonTypeHandler实现类型转换自定义StringListTypeHandler处理器实现 场景 项目中经常需要将List转成json存储到配置文件中, mybatisPlus默认实现了JacksonTypeHandler,GsonTypeHandler,FastjsonTypeHandler,也可以自定义…

JAVA基础语句1

目录 前言 一.JAVA特性 简单 面向对象 分布式 多线程 二.关键字 三.对象和类 对象 类 构造方法 创建对象 访问实例变量和方法 源文件声明规则 Java 包 import 语句 总结 前言 这里参考了:Java 教程 | 菜鸟教程 (runoob.com) 第一个必须是: hello world&a…

Github 2024-01-09Python开源项目日报 Top10

根据Github Trendings的统计,今日(2024-01-09统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目10Jupyter Notebook项目1 Payloads All The Things - 有用的Web应用程序安全负载和绕过列表 创建…

带前后端H5即时通讯聊天系统源码

带有前后端的H5即时通讯聊天系统源码。该源码是一个开源的即时通信demo,需要前后端配合使用。它的主要目的是为了促进学习和交流,并为大家提供开发即时通讯功能的思路。尽管该源码提供了许多功能,但仍需要进行自行开发。该项目最初的开发初衷…

C#.Net学习笔记——CLR核心机制

一、CLR基本介绍 (1)C(Common) L(Language) R(Runtime) IL的运行环境 (2)从下图可以看到,我们的计算机会先把我们写的语言,编写成IL语言,再给计…

Gartner发布2024年SASE融合战略路线图

向云计算和远程工作的转变增加了 SASE 需求,以实现从任何设备的安全访问。安全和风险管理领导者必须将网络和安全融合到一两个明确合作的 SASE 供应商产品中,并淘汰遗留的边界系统。 主要发现 安全访问服务边缘 (SASE) 框架为混合劳动力以及设备、分支机…

java基础之HashMap练习题

应用了 外循环,自循环,Lambda表达式,keySet()方法,values()方法,Entry对象 ,entrySet()方法 Map集合框架 1:(Map)关于下列Map 接口中…