SRT协议学习
SRT(Secure Reliable Transport)协议是一种开源的视频传输协议,旨在提供安全,可靠,低延迟的视频流传输。以下是SRT协议的一些关键的工作原理。
1 安全传输,SRT通过使用AES加密和数据完整性验证来确保数据的安全传输。它可以在不信任的网络环境中提供端到端的安全性。
2 可靠传输,SRT使用ARQ 技术来实现可靠传输。它通过在发送端和接受端之间进行反馈循环来检测和纠正数据包的丢失和损坏,从而确保数据的可靠传输。
3 低延迟:SRT通过使用最小的数据包大小和最少的协议开销来实现低延迟传输,通过优化数据包的大小和发送时间来降低传输延迟。
4 流控制:SRT提供了灵活的流控制机制,可以根据网络状况和带宽限制来动态调整传输速率,以确保最佳的传输性能。
5 带宽自适应: SRT支持带宽自适应功能,可以根据网络带宽的变化来自动调整传输参数,以最大程度的利用可用带宽。
6 跨平台支持: SRT可以在各种操作系统平台上运行
7 链接建立:发送端和接收端通过SRT握手协议建立连接。在握手过程中,交换协商参数,包括加密密钥,传输参数,缓冲区大小等。
8 数据传输:发送端讲视频流分成数据包,并加密,打包成SRT数据包发送到接收端。接收端收到数据包后,进行解密和解包,并通过ARQ技术检测和纠正丢失或损坏的数据包。
9 流控制:发送端根据的反馈信息来动态调整发送速率,确保流量控制和带宽自适应。
10 连接维护:发送端和接收端定期发送心跳包来维护连接,并根据需要进行连接重连。
SRT协议的数据包二进制格式主要分为两种类型:数据包Data Packet和控制包Control Packet 以下是SRT数据包的结构细节。
Data Packet数据包
数据包用于承载实际的媒体数据,其结构如下:
1 Packet Sequence Number 数据包序列号,占31位,用于确保数据包的顺序传输。
2 PP 数据包位置标识位;占2位,表示数据包在消息中的位置,10代表第一个数据包,00代表中间的数据包,01代表最后一个数据包,11代表单个数据包。
3 O(顺序标志位):占1位,用于标识数据包的顺序。
4 KK加密密钥标志位:占2位,表示使用的加密密钥,“00”代表不用加密,“01”代表偶数密钥,“10”代表奇数密钥。
Control Packet(控制包)
控制包用于协议控制,如握手、ACK/NAK等,其结构如下:
- PH_SEQNO(Packet Header Sequence Number,数据包序列号):用于确保数据包的顺序传输。
- PH_MSGNO(Packet Header Message Number,消息号):表示消息的编号,用于标识数据包属于哪个消息。
- PH_TIMESTAMP(Packet Header Timestamp,时间戳):用于记录数据包的发送时间,接收端可以利用这个时间戳来计算传输延迟。
- PH_ID(Packet Header ID,标识符):用于区分不同类型的包(如数据包、控制包等)。
控制数据包又包含了握手(Handshake)、肯定应答(ACK)、否定应答(NAK)、对肯定应答的应答(ACKACK),保持连接(Keepalive)、关闭连接(Shutdown)等多种类型。
SRT数据包的首部长度为16字节,最高位为标志位,0代表信息数据包,1代表控制数据包。
这些数据包结构的设计使得SRT协议能够有效地处理多媒体数据的实时传输,确保数据的顺序、完整性和安全性。
SRT 数据包结构示例
+-------+------+----------+----------+--------+--------+----------+
| Magic | Fam | SeqNo | MsgNo | TS/TSC | Flags | Payload |
+-------+------+----------+----------+--------+--------+----------+
- Magic(4字节):用于识别SRT协议的魔数(Magic Number),通常是 0x52 0x54 0x6F 0x73(即 "RTos")。
- Fam(1字节):Family字段,用于标识地址族,例如 0x01 表示IPv4。
- SeqNo(4字节):序列号,用于确保数据包的顺序性。
- MsgNo(4字节):消息编号,用于标识数据包属于哪个消息。
- TS/TSC(4字节):时间戳/时间戳和序列号,用于同步和延迟计算。
- Flags(2字节):标志位,包含多种控制位,如是否是最后一个数据包、是否加密等。
- Payload(可变长):实际传输的数据内容。
十六进制表示
52 54 6F 73 01 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 12 34 56 78 ... (Payload)
- 52 54 6F 73:Magic Number,用于识别SRT协议。
- 01:Family字段,表示IPv4。
- 00 00 00 01:SeqNo,序列号为1。
- 00 00 00 00:MsgNo,消息编号为0。
- 00 00 00 00:TS/TSC,时间戳或时间戳和序列号。
- 00 00:Flags,没有特殊标志。
- 12 34 56 78 ...:Payload,数据负载部分。
这个示例展示了一个包含Magic Number的SRT数据包,其中包含了必要的头部信息和一些示例数据。在实际应用中,数据包可能包含更多的头部信息,如源地址、目的地址、扩展头部等,并且数据负载部分会根据实际传输的数据进行变化。
相关文章:

SRT协议学习
SRT(Secure Reliable Transport)协议是一种开源的视频传输协议,旨在提供安全,可靠,低延迟的视频流传输。以下是SRT协议的一些关键的工作原理。 1 安全传输,SRT通过使用AES加密和数据完整性验证来确保数据的安全传输。它可以在不信…...

南昌大学《2024年837自动控制原理真题》 (完整版)
本文内容,全部选自自动化考研联盟的:《南昌大学873自控考研资料》的真题篇。后续会持续更新更多学校,更多年份的真题,记得关注哦~ 目录 2024年真题 Part1:2024年完整版真题 2024年真题...

ASP.NET Core 应用程序的启动与配置:Program.cs 文件的全面解析
ASP.NET Core 应用程序的启动与配置:Program.cs 文件的全面解析 Program.cs 是 ASP.NET Core 应用程序的入口点,负责应用程序的启动和配置。以下是 Program.cs 文件中完成的主要工作,按逻辑步骤进行总结: 1. 创建和配置主机环境…...

2020-12-02 数字过滤
缘由 C语言 数组:数字过滤-CSDN问答 void chuli(int n15236) {int aa[47]{0},j0,m0;while(n)aa[j]n%10,n/10;while(j)if(aa[--j]%2)m*10,maa[j];cout << m << ends; } void 数字过滤(int n 15236) {int aa[47]{0}, j 0, m 0;while (…...

长短期记忆神经网络(LSTM)介绍
1、应用现状 长短期记忆神经网络(LSTM)是一种特殊的循环神经网络(RNN)。原始的RNN在训练中,随着训练时间的加长以及网络层数的增多,很容易出现梯度爆炸或者梯度消失的问题,导致无法处理较长序列数据,从而无…...

数据结构 ——二叉树转广义表
数据结构 ——二叉树转广义表 1、树转广义表 如下一棵树,转换为广义表 root(c(a()(b()()))(e(d()())(f()(j(h()())())))) (根(左子树)(右子树)) 代码实现 #include<stdio.h> #include<stdlib.h>//保存…...

chattts生成的音频与字幕修改完善,每段字幕对应不同颜色的视频,准备下一步插入视频。
上一节中,实现了先生成一个固定背景的与音频长度一致的视频,然后插入字幕。再合并成一个视频的方法。 但是:这样有点单了,所以: 1.根据字幕的长度先生成视频片断 2.在片段上加上字幕。 3.合并所有片断,…...

数据结构开始——时间复杂度和空间复杂度知识点笔记总结
好了,经过了漫长的时间学习c语言语法知识,现在我们到了数据结构的学习。 首先,我们得思考一下 什么是数据结构? 数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素…...

路由策略与策略路由
路由策略 常用有Router-Policy,Filter-Policy等 控制路由是否可达,通过修改路由条目相关参数影响流量的转发 基于控制平面,会影响路由表表项,但只能基于目地址进行策略判定,于路由协议相结合使用 Router-Policy …...

pytorch_fid 安装笔记
目录 torch安装: pytorch_fid安装 torch安装: pip install torch2.5.0 --index-url https://download.pytorch.org/whl/cu121 pytorch_fid安装 pip install pytorch_fid 安装后,torch也会自动安装,导致torch引用报错。...

Qt绘制仪表————附带详细说明和代码示例
文章目录 1 效果2 原理3 编码实践3.1 创建仪表属性类3.2 设置类属性3.3 绘制图案3.3.1 设置反走样3.3.2 绘制背景3.3.3 重新定义坐标原点3.3.4 绘制圆环3.3.5 绘制刻度线3.3.6 绘制刻度线上的描述值3.3.7 绘制指针3.3.8 绘制指针数值和单位3.3.9 控制指针变化 扩展福利参考 1 效…...

百度地图JavaScript API核心功能指引
百度地图JavaScript API是一套由JavaScript语言编写的应用程序接口,它能够帮助您在网站中构建功能丰富、交互性强的地图应用,包含了构建地图基本功能的各种接口,提供了诸如本地搜索、路线规划等数据服务。百度地图JavaScript API支持HTTP和HT…...

mp4影像和m4a音频无损合成视频方法
第一步:复制高清视频地址 url 第二步:打开网址粘贴复制的视频url视频下载 第三步:下载-影像.mp4和-音频.m4a 第四步:合并视频; 使用ffmpeg进行无损合成(如果没有安装ffmpeg请自行下载安装下载 FFmpeg (p2hp.com)&…...

Ubuntu下将Julia嵌入Jupyter内核
一.安装 Julia 如果 Julia 尚未安装: 打开终端,下载最新的 Julia 安装包: wget https://julialang-s3.julialang.org/bin/linux/x64/1.9/julia-1.9.3-linux-x86_64.tar.gz 解压并移动到 /opt: tar -xvzf julia-1.9.3-linux-x86_…...

openGauss开源数据库实战二十五
文章目录 任务二十五 openGauss 数据库的物理备份与恢复任务目标实施步骤一、为进行物理备份做准备1.确保数据库工作在归档模式2.创建保存数据库物理备份的目录3.创建保存归档日志备份的目录 二、进行openGauss数据库的物理备份1.备份数据库2.切换WAL3.备份归档日志 三、openGa…...

[C/C++] List相关操作
List相关操作 1 链表二分 目标: (1)对于偶数节点,正好对半分; (2)对于奇数节点,前 后 1 (3)断开链表,方便后期合并 // 使用快慢指针完成中点…...

继电器控制与C++编程:实现安全开关控制的技术分享
在现代生活中,继电器作为一种重要的电气控制元件,在电气设备的安全控制中起到了至关重要的作用。通过低电流控制高电流,继电器能够有效地隔离控制电路与被控设备,从而保障使用者的安全。本项目将介绍如何通过树莓派Pico与继电器模块结合,使用C++编程实现继电器的控制。 一…...

题解 - 找子序列(2024.12上海月赛丙组T4)
题目描述 Dave 有一个长度为 n 的非负整数序列 a1-n, 和一个非负整数 m 。 他希望知道是否有一个 a 的非空子序列,使得子序列中所有元素的按位与(bitwise AND)结果为 m。 换言之,他想知道是否存在一个下标序列 i1-k(k ≥ 1),满足 1 ≤ i1 < i2 < …...

在centos 7.9上面安装mingw交叉编译工具
1.说明 为了在centos上面编译windows的程序,需要安装mingw工具,mingw工具是可以编译windows程序的一些工具链,使用方式和linux一致 2.下载脚本 使用脚本方式编译,github的脚本位置:https://github.com/Zeranoe/ming…...

ubuntu wine mobaxterm找不到串口和解决方案
安装好 打开MobaXterm时发现,没有可供选择的串口 我们再检查wine设备映射 ls -la ~/.wine/dosdevices/ 串口是存在的,我们再来一番神操作,并没有回滚操作,不知是否是必要修改 打开 注册表,在HKEY_LOCAL_MACHINE中的…...

如何编译安装系统settings设置应用(5.0.0-Release)
本文介绍如何在OpenHarmony 5.0.0 r版本中修改系统设置应用,并且编译安装到开发板上 开发环境 1.dayu200开发板 2.OpenHarmony 5.0.0r 固件 3.API12 full sdk (如果安装full sdk过程中出现报错hvigor ERROR: Cannot find module typescript,请参考 h…...

<项目代码>YOLOv8 车牌识别<目标检测>
项目代码下载链接 <项目代码>YOLOv8 车牌识别<目标检测>https://download.csdn.net/download/qq_53332949/90121387YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题…...

协同办公软件新升级:细节优化,让办公更简单
细节决定成败,企业酷信协同办公系统通过贴近客户实际需求的一系列改进和创新,在技术架构、系统结构、管理理念和使用性能上,都达到了国内先进水平,同时具备独特的优势。让我们看看企业酷信是如何通过这些细节提升,为企…...

【原创学习笔记】西门子1200 PLC实现变频器控制
一、实现的功能及应用的场合 通过PLC的不同指令,发送指令控制电机的启停和速度大小 二、硬件配置 1、西门子1214 PLC 2.TIA V16 3.SINAMICS G120C 三、实现功能步骤 1.添加设备G120C PN-调整以太网地址 根据实际情况选择有无滤波器,电机参数…...

SQL server学习02-使用T-SQL创建数据库
目录 一, 使用T-SQL创建数据库 1,数据库的存储结构 2,创建数据库的语法结构 1)使用T-SQL创建学生成绩管理数据库 二,使用T-SQL修改数据库 1,修改数据库的语法结构 1)修改学生成绩管理数…...

2024153读书笔记|《春烂漫:新平摄影作品选》——跳绳酷似人生路,起落平常,进退平常,莫惧征途万里长
2024153读书笔记|《春烂漫:新平摄影作品选》——跳绳酷似人生路,起落平常,进退平常,莫惧征途万里长 《春烂漫:新平摄影作品选》作者新平,2019.12.25年读完的小书,当时就觉得挺不错,今…...

MySQL有哪些高可用方案?
大家好,我是锋哥。今天分享关于【MySQL有哪些高可用方案?】面试题。希望对大家有帮助; MySQL有哪些高可用方案? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MySQL 高可用方案旨在确保数据库系统的高可靠性、低宕机时间、以及在硬件故障…...

前台进程是什么
前台进程是什么 前台进程的定义 前台进程是指在操作系统中,与用户当前正在交互的进程。这些进程通常拥有最高的优先级,因为它们直接影响用户体验,是用户正在关注或者正在使用的应用程序对应的进程。例如,当你在手机上打开一个游戏…...

Redis学习笔记之——学习计划
Redis——Remote Dictionary Server,开源、基于内存、速度快、key-value... Redis做为一个高性能的键值存储系统,广泛应用于缓存、会话存储、分布式锁以及其他需要快速访问的数据场景中。熟悉掌握redis,似乎已成为广大码农们必备的一项技能。…...

npm : 无法加载文件 D:\nodejs\npm.ps1
问题描述 npm run serve 启动一个Vue项目,报错如下: npm : 无法加载文件 D:\nodejs\npm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/? LinkID135170 中的 about_Execution_Policies。…...