SRT对比TCP协议的优缺点

news2025/1/29 13:53:38

        主流的流媒体协议,如HTTP,HLS,RTMP是TCP协议,而RTSP既可以基于TCP也可基于UDP协议进行数据传输。

        从趋势来看,新的流媒体协议大都选择UDP作为底层传输协议,其主要原因和流媒体业务本身的特性及TCP特性有关。 流媒体最常见的业务直播来看,用户需要直播出流快,延时低,不卡顿,在遇到弱网的情况下,能接受损失一部分画面,但是希望能快速恢复。

1.TCP协议的局限性    

        首先,TCP协议握手耗时长。TCP协议建立链接需要3次握手,如要通过TLS加密则还需要4次的握手。在建立链接方面,TCP协议交互流程太多,不适合快速出流。

        其次,窗口阻塞导致耗时严重。TCP协议是一个高可靠且有序的协议,因此如果出现序号较低的数据包丢了,即使序号高的已经收到了,也要等序号低的重传接收后才能使用,导致当前窗口阻塞在原地(TCP队头阻塞),要是重传的数据包也丢失,触发再次重传需要等待的时间会加倍(重传策略温和),而这个机制会影响数据的传输效率,对于实时性要求较高的流媒体业务,是不可接受的。

        最后,弱网情况表现差。TCP协议的慢启动和拥塞避免算法都会大幅度的降低自身的带宽占用,从而保护整个通信链路的稳定。所以在这种策略下一旦遭遇弱网,表现出来就是直播画面卡顿,基本没有弱网对抗能力。

2.SRT协议的优缺点

        SRT协议通过简单的握手、固定的延时量、ARQ(自动重传请求)、FEC(前向纠错)以及ACK、NACK等策略解决TCP协议在流媒体业务上存在的问题。

2.1. SRT如何解决握手耗时长?

        SRT通过2次握手和参数交换即可快速建立起一个SRT链接(总耗时:2RTT),相比基于TCP的流媒体协议RTMP 3RTT的握手时间,总耗时减少1个RTT。

2.2. SRT如何实现可靠传输?

        SRT握手结束之后,就可以发媒体数据和控制指令,媒体数据结构如下:

图片

  • 数据包序列号:数据包序号的初始值在握手时确定,之后每发一个数据包,数据包序号就会加1;
  • 报文序号:报文序号从0开始,之后每发一个数据包,报文序号就会加1,报文序号前4个标志位功能如图3所示;
  • 时间戳:以建立时间为基准,单位为微秒;
  • 目的地端口套接字ID:在多路复用的时候可以用来区分不同的SRT流。

ACK控制指令

图片

NAK控制指令

图片

        SRT发送端通过数据包序列号和报文序号,能明确那些数据包已经被发送出去;

        SRT发送端通过接收端发送过来的ACK控制指令,就知道发送出去的哪些数据已经被成功接收了;

        如果出现丢包情况,SRT发送端通过接收端发送过来的NAK控制指令,就能确定哪些数据需要重传。

        通过以上方式,SRT实现了可靠传输。

2.3. SRT如何实现解决窗口阻塞问题?

        从2.2的实现来看,SRT发送端必须有一个发送缓存区,SRT接收端也需要一个接收缓冲区才能实现在丢包后数据重传的机制。SRT协议通过设置固定延时量来统一规定发送缓冲区和接收缓冲区的大小。

        发送缓冲区用来保存有可能需要重发的数据包,一旦数据包收到了肯定应答(ACK),则该数据包会被清理出发送缓冲区(这点和TCP也类似),一旦发送缓冲区某个数据包一直收不到肯定应答,则该数据包在超过固定延时时间后也会被清理出发送缓冲区,SRT通过这种方式解决了TCP队头阻塞的问题。

        基于以上的原理,可以看出SRT并不是完全可靠的传输协议,它的可靠性介于UDP协议和TCP协议之间。

2.4. SRT如何实现解决弱网情况表现差?

        从ACK控制指令内容可以发现,ACK中带有许多网络参数,例如RTT时间等。通过RTT时间和链路带宽等参数,SRT就可以估计整个网络状态,从而实现自适应的调整。

        SRT在网络较差的情况下,依然会保持较大的发送速率。因此,在弱网环境时,SRT会占用更大的网络带宽来保证流畅度。

        值得注意:如果网络中都是类似于SRT这种发送策略的协议,最终可能导致谁的数据也发不出去。因此,在业务的选择上可以综合考虑SRT和TCP协议的特点,优先保证重要业务。

2.5. SRT的缺陷

        虽然SRT协议有很多优势,但是有一些缺点也不容忽视。首先就是SRT协议在弱网环境,带宽占用高;其次SRT协议传输策略激进,会影响同网络下的其他用户;最后由于SRT底层是走的UDP,而防火墙对于UDP并不友好。

        因此,SRT协议更适合点对点的高质量低延迟可靠传输,而不大适合对海量用户的内容分发。

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

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

相关文章

[相遇 Bug] - ImportError: numpy.core.multiarray failed to import

背景: 因为最近在看点云模型, 在自己的环境上部署该项目: https://github.com/open-mmlab/OpenPCDet/tree/master 执行命令: 这里执行github项目给的demo.py文件, 命令格式如下: python demo.py --cfg_file cfgs/kitti_models/pointpillar.yaml --ckpt xxx/pointpillar_772…

找回删除的照片?这4招很简单!

“电脑上删除的照片还能找回来吗?我的照片刚刚被误删了很多张,现在想把它们恢复回来,还有成功的可能性吗?” 对于很多朋友来说,将照片保存下来是一件很美好的事。当我们想起某个场景时,我们能通过这些照片来…

Vue3 – 高级语法补充

1 Vue中自定义指令 2 Vue内置组件Teleport 3 Vue内置组件Suspense 4 Vue中安装插件的方式 5 Vue中渲染函数的使用 6 Vue中编写jsx的语法 Vue中自定义指令 自定义指令的绑定方法有两种,一种是局部的,一种是全局的。 指令可以将部分js代码转换成指令的…

前端 | (四)CSS基础及CSS选择器 | 尚硅谷前端html+css零基础教程2023最新

学习来源:尚硅谷前端htmlcss零基础教程,2023最新前端开发html5css3视频 文章目录 📚CSS基础🐇CSS简介🐇CSS编写位置⭐️行内样式⭐️内部样式⭐️外部样式 🐇样式表的优先级🐇CSS语法规范&#…

Appium 全新 2.0 全新跨平台生态,版本特性抢鲜体验!

关于Appium V2 Appium V2 beta版本在2021年发布,从2022年1月1号开始,Appium核心团队不会再维护Appium 1.x版本了,所有近期官方发布的平台驱动(如Android平台的UIAutomator,IOS平台的XCUITest)不再兼容Appi…

大数据分析案例-基于随机森林算法构建心力衰竭预测模型

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

云原生周刊:6 项 K8s 成本控制策略 | 2023.7.17

开源项目推荐 Base Image Finder 当使用容器扫描工具来识别已知漏洞(CVE,或常见漏洞和暴露)时,可能很难理解漏洞在容器中的位置,以及如何缓解这些漏洞。通常,最简单、最有效的缓解方法是更新 "基本映…

EasyPoi实战系列集合

历史文章(文章累计480) 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 导…

【黑马头条之对象存储服务MinIO】

本笔记内容为黑马头条项目的对象存储服务MinIO部分 目录 一、MinIO简介 二、MinIO特点 三、开箱使用 1、安装启动 2、管理控制台 四、快速入门 1、创建工程,导入pom依赖 五、封装MinIO为starter 1、创建模块heima-file-starter 2、配置类 3、封装操作mi…

VBA命令及语法列表之字典Dictionaries相关

【分享成果,随喜正能量】真正的修佛之人。首先,得明白自己的来处和归宿,懂得敬畏自己的生命和他人的生命,尽其所能释放善意。学会悲天悯人,渡人的同时渡己,始终走在止于至善的路上。真正的慈悲为怀&#xf…

有哪些方法可将PPT转成PDF?分享三个方法给大家!

将PPT(演示文稿)文件转换为PDF(便携式文档格式)是一种常见的需求,特别适用于共享演示文稿、打印或以静态格式保存的情况。本文将介绍三种简单易用的方法来实现PPT转PDF的操作,其中方法一是使用记灵在线工具…

MarkDown 生成目录的树结构

1. tree 命令的使用 Markdown没有办法直接生成目录的树结构,需要借助Windows下的tree命令,具体如下: 显示所有目录,不包含目录下的文件,tree 文件夹路径 显示所有目录,包含目录下的文件,tree …

命令行查看numpy版本

问题 查看numpy版本 解决方法 python -c "import numpy;print(numpy.version.version)"成功

OpenCV中reshape()函数详解-改变矩阵的通道数,对矩阵元素进行序列化

文章目录 1、函数原型2、示例3、结论: OpenCV中reshape()函数详解-改变矩阵的通道数,对矩阵元素进行序列化 在opencv中reshape函数,既可以改变矩阵的通道数,又可以对矩阵元素进行序列化 1、函数原型 Mat Mat::reshape(int cn, in…

echarts_雷达图

目录 雷达图(radar)需求[1] 复制案例[2] 色调统一[3] 配置项实现代码 雷达图(radar) 需求 [1] 复制案例 如上图,先复制一个最简单的雷达图 [2] 色调统一 直角系坐标都是使用xAxis/yAxis配置项,但是雷达图使用的是radar配置项配置坐标系。 配置项注解区…

GoFrame v2.5 版本发布,企业级 Golang 开发框架

大家好啊,GoFrame 框架今天发布了 v2.5.0 正式版本啦!👏👏👏👏 本次版本主要是对已有功能组件以及开发工具上的改进工作。其中,开发工具新增了 gf gen ctrl 命令,以规范化定义、开发…

【C#】并行编程实战:使用并发集合

在上一章的并行编程实现里,为了保护资源,我们对共享资源加锁(各种同步原语)来进行保护,避免多线程同时访问(主要是写入)。但一般来说,共享资源是一个可以由多个线程读写的集合&#…

AR气象博物馆模拟体验提升青少年认知

国际气象节主要目的是唤起人们对气象工作的重视和热爱。近年来,极端天气频发,人们需要提高警惕,AR气象远程普利用ar技术特有的沉浸式的体感互动,通过模拟演练提升体验者的安全防范意识和求生技巧。 系统结合VR虚拟现实、AR增强现实…

【多模态】1、几种多模态 vision-language 任务和数据集介绍

文章目录 一、Phrase Grounding1.1 概念介绍1.2 常用数据集介绍 二、Referring Expression Comprehension(REC)2.1 概念介绍2.2 常用数据集介绍 三、Visual Question Answer(VQA)3.1 概念介绍 四、Image Caption4.1 概念介绍 现在…

MySQL-数据库读写分离(上)

♥️作者:小刘在C站 ♥️个人主页: 小刘主页 ♥️努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️学习两年总结出的运维经验,以及思科模拟器全套网络实验教程。专栏&#xf…