RTSP RTP RTCP SDP基础知识
理论
- 顺序流式传输 (Progressive Streaming)
- 实时流式传输 (Real time Streaming)
实时流式传输是实时传送,特别适合现场事件。“实时”是指在一个应用中数据的交付必须与数据的产生保持精确的时间关系,这需要相应的协议支持,这样RTP和RTCP就相应的出现了。
1.什么是RTSP RTP RTCP SDP?
实时流传输协议(RTSP:Real Time Streaming Protocol)是⼀种⽹络传输协议,旨在发送低延迟流。 该协议由RealNetworks,Netscape和哥伦⽐亚⼤学的专家在1996年开发。它定义了应如何打包流中的数据以进⾏传输。RTSP 用于创建和控制流媒体服务器上的多媒体会话。比如多媒体流播放、暂停、快进和快退。
RTSP 常用于视频会议、视频监控、远程教学和视频点播等场景。它与RTP(实时传输协议)和RTCP(实时传输控制协议)一起工作,其中:
- - RTP 负责传输多媒体数据(如音频和视频)。 服务器默认端口号5004
- - RTCP 提供传输质量反馈和媒体同步。 默认端口号默认为5005
- RTSP负责服务器与客户端之间的请求与响应 默认端口是554
网络体系
SDP
描述可以被用于建立 H.264 视频流的 RTP 传输会话。接收端可以根据这些信息来正确地解码和渲染视频内容.
1. 媒体类型
- 通常使用 `m=video` 来标识视频媒体流。
2. 传输协议和负载类型
- 通常使用 `RTP/AVP` 协议,并指定一个有效负载类型(Payload Type)。
3. 时间基准
- 使用 `a=rtpmap` 属性指定时间基准,如 `a=rtpmap:96 H264/90000`。
4. H.264 编码配置
- 使用a=fmtp属性指定 H.264 的配置参数,如:
- `profile-level-id`: 用十六进制表示的profile和level。
- `packetization-mode`: 分片模式,通常为1(非交错模式)。
- `sprop-parameter-sets`: Base64 编码的SPS和PPS数据。
5. 传输地址
- 使用 `c=IN IP4 <ip-address>` 属性指定传输地址。m=video 55002 RTP/AVP 96 a=rtpmap:96 H264/90000 a=fmtp:96 profile-level-id=4d0028; packetization-mode=1; sprop-parameter-sets=Z2QAKeKQCgC3YC3Af0I=,aM46gA== c=IN IP4 192.168.1.100packetization-mode: 当 packetization-mode 的值为 0 时或不存在时, 必须使用单一 NALU 单元模式. 当 packetization-mode 的值为 1 时必须使用非交错(non-interleaved)封包模式. 当 packetization-mode 的值为 2 时必须使用交错(interleaved)封包模式.sprop-parameter-sets: SPS,PPS 这个参数可以用于传输 H.264 的序列参数集和图像参数 NAL 单元. 这个参数的值采用 Base64 进行编码. 不同的参数集间用","号隔开.profile-level-id: 这个参数用于指示 H.264 流的 profile 类型和级别. 由 Base16(十六进制) 表示的 3 个字节. 第一个字节表示 H.264 的 Profile 类型, 第三个字节表示 H.264 的 Profile 级别:max-mbps: 这个参数的值是一个整型, 指出了每一秒最大的宏块处理速度.
RTSP 运行在TCP或UDP之上,通常使用TCP来建立控制连接,而使用UDP来传输实际的媒体数据。它允许客户端请求实时数据流的播放、录制和广播,并且可以控制播放过程中的各种参数。在以tcp传输音频或视频时RTP RTCP使用统一音频或视频端口,在以udp传输 音频rtp和rtcp 以及视频rtp和rtcp都有独立的端口。
小总结
rtsp承载与rtp和rtcp之上,rtsp并不会发送媒体数据,而是使用rtp协议传输,rtcp质量控制,sdp为了正确的输出音视频数据。
rtp并没有规定发送方式,可以选择udp发送或者tcp发送
使用udp传输数据端rtcp/rtp端口随机分布。
rtp协议封装
rtp负责对流媒体数据进行封包并实现媒体流的实时传输,即它按照RPT数据包格式来封装流媒体数据,并利用与它绑定的协议进行数据包的传输。
RTP报⽂由两部分组成:报头和有效载荷。12 个字节 RTP报头格式如下:
V:RTP协议的版本号,占2位,当前协议版本号为2。
P:填充标志,占1位,如果P=1,则在该报⽂的尾部填充⼀个或多个额外的⼋位组,用于包对齐,它们不是有效载荷
的⼀部分。
X:扩展报头,占1位,如果X=1,则在RTP报头后跟有⼀个扩展报头。
CC:CSRC计数器,占4位,指示CSRC 标识符的个数。
M: 最后一个分片位,占1位
-
对于视频数据,标记位通常用来指示一帧视频数据的结束。这可以帮助接收端确定何时完成了一帧数据的接收,从而可以进行解码和显示。
-
对于音频数据,标记位可能用来指示会话的开始或结束,或者一个逻辑流的开始。
PT: 有效载荷类型,占7位,⽤于说明RTP报⽂中有效载荷的类型,如GSM⾳频、JPEM图像等。
序列号 sequence:占16位,⽤于标识发送者所发送的RTP报⽂的序列号,每发送⼀个报⽂,序列号增1。接收者通过序列号来检测报⽂丢失情况,重新排序报⽂,恢复数据。需注意使用udp接收乱序时,应该设计一个重排机制。
时戳(Timestamp):占32位,时戳反映了该RTP报⽂的第⼀个⼋位组的采样时刻。接收者使⽤时戳来计算延迟和延迟抖动,并进⾏同步控制。需注意单位 如果是90khz 则1/90000 * 1000 = 0.0111s
同步信源(SSRC)标识符:占32位,⽤于标识同步信源。该标识符是随机选择的,参加同⼀视频会议的两个同步信源不能有相同的SSRC。
特约信源(CSRC)标识符:每个CSRC标识符占32位,可以有0~15个。每个CSRC标识了包含在该RTP报⽂有效载荷中的所有特约信源。
SSRC和CSRC详细介绍
SSRC 同步信源是指产⽣媒体流的信源,例如**⻨克⻛、摄像机、RTP混合器**等。它通过RTP报头中的⼀个32位数字SSRC标识符来标识,⽽不依赖于⽹络地址,接收者将根据SSRC标识符来区分不同的信源,进⾏RTP报⽂的分组。
特约信源是指当混合器接收到⼀个或多个同步信源的RTP报⽂后,经过混合处理产⽣⼀个新的组合RTP报⽂,并把混合器作为组合RTP报⽂的SSRC,⽽将原来所有的SSRC都作为CSRC传送给接收者,使接收者知道组成组合报⽂的各个SSRC。
SSRC (Synchronization Source)
1. SSRC是一个32位的随机值,用于标识每个RTP数据流的来源。
2. 每个参与RTP会话的终端都会分配一个唯一的SSRC值。
3. SSRC值在RTP会话中是唯一的,可用于识别和区分不同的数据流。
4. SSRC值可能会在会话过程中发生变化,例如当终端重新加入会话时。
CSRC (Contributing Source)
1. CSRC用于标识参与混音的数据流。
2. 当一个RTP数据包包含来自多个源的混音音频数据时,该数据包的CSRC列表中会包含所有贡献源的SSRC值。
3. 接收端可以根据CSRC列表来确定哪些数据源参与了当前数据包的混音。
4. CSRC列表的长度可以在0到15之间变化。
SSRC和CSRC在RTP协议中的作用如下:
SSRC用于唯一标识每个数据流源,便于接收端进行同步和恢复。
CSRC用于标识参与混音的数据流源,便于接收端进行正确的音频混合和渲染。
这两个标识符确保了RTP会话中各数据流的独立性和可识别性,是RTP协议实现多路复用和同步的关键机制。
CSRC(Contributing Source Identifier)是通过RTP数据包头中的CC(CSRC Count)字段来携带的。例如,如果 CC 字段的值为 2,那么 CSRC 列表中就会有 2 个 32 位的 CSRC 标识符,代表有两个数据源参与了当前数据包的混合。
rtsp交互流程
推流(左图Clinet右图Server)
1.通过OPTION 查询服务器端可⽤⽅法 S返回可用命令表
2.ANNOUNCE 发送媒体描述信息,在此确定了rtpmap96开始 是以音频还是视频。S回应媒体描述信息,并返回了Session ID。
3.SETUP建⽴RTSP会话通过Transport头字段列出可接受的传输选项,请求S建⽴会话。流媒体通道id和c端端口。S通过Transport头字段返回选择的具体转输选项,并返回建⽴的Session ID;以及ssrc 同步。C->SRTP: 31590 -> 59472RTCP: 31591 -> 59473
4.RECORD请求传送数据npt时间戳。S回应该允许的信息
5.RTP数据推送SSRC 就是在setup返回来的SSRC。
6.TEARDOWN关闭会话.S回应该请求
拉流
与推流不同之处:
第⼆步:DESCRIBE得到媒体描述信息。S回应媒体描述信息,⼀般是sdp信息
第四步:PLAY请求开始传送数据。S回应该请求的信息,npt=起始时间 不一定是0.00
⼩总结
推流拉流区别
第⼆步 推流:ANNOUNCE; 拉流:DESCRIBE
第四步:推流:RECORD;拉流:PLAY第五步 :发送方和接收方
SDP协议
SDP 协议是一种会话描述协议,主要用于描述多媒体会话的各种参数,如媒体类型、编码格式、传输地址和端口等。它是 RTSP 协议的一部分,两者通常配合使用。
SDP 协议的主要作用有:
-
会话参数描述
- 描述会话的名称、时间、带宽等基本参数
- 描述会话中包含的媒体流,如音频、视频等
-
媒体参数描述
- 描述每个媒体流的编码格式、传输协议、传输地址和端口等
- 这些参数对接收端初始化和设置播放非常重要
-
网络传输参数描述
- 描述 RTP/RTCP 使用的传输参数,如 SSRC、时间戳单位等
- 这些参数对于媒体同步和质量控制很关键
SDP协议格式
SDP描述由许多⽂本⾏组成,⽂本⾏的格式为<类型>=<值>,<类型>是⼀个字⺟,<值>是结构化的⽂本串.
SDP的结构
SDP仅仅提供了对会话的描述,没有提供将会话和可能的参与者联系起来的⽅法,需要使⽤特定的编码集。字段名称只能使⽤US-ASCII字符集,⽂本信息可以使⽤任何语⾔。由于SDP的ASCII编码⽐⼆进制编码占⽤ 带宽多,所以SDP采⽤紧凑格式提⾼带宽利⽤率。如v=version,s=session name等等。字段名只⽤⼀个字符表示(⼤⼩写敏感),字段值可以有多个信息块组成,⽤分号隔开,“=”左右不能有空格。
SDP语法
根据sdp结构可知 开始是会话级随后媒体流的描述。第⼀个媒体描述 字段(m=)的出现,之后的每个媒体描述字段的出现标志着这个会话中⼜⼀个媒体流数据的开始。
必需字段
v=(协议版本号),⼀个会话描述的开始,前⼀个会话结束标志。
o=(会话源或者会话⽣成者,以及会话标识符)
s=(会话名称)这个字段是个⽂本字符串,可以显示给会话参与者。
t=(会话时间)这个字段指明会话开始时间与结束时间。
m=(媒体)该字段⽤来指明媒体类型、数据应该发送到的传输端⼝,传输协议(例如RTP)以及媒体格式(例如RTP负载格式)
可选字段
SDP可选字段中,⼀些只能应⽤于会话级,⼀些只能应⽤于媒体级,还有⼀些可以应⽤于两种级别。
可选字段如下:
i=(会话信息)对字段的⽂本描述,提供了⽐会话名称更多的信息。该字段既可以⽤于会话级也可以⽤
于媒体级。
u=(描述的URI地址)URI信息,通过这个地址可以获取更多会话相关信息。例如,⼀个会议可能公布
在WEB⻚⾯上,所以需要该WEB的URI。每个会话只能提供⼀个URI
E=(E-mail地址)负责会话个体的E-mail地址,可以有多个。只能⽤于会话级别。
p=(电话号码)同email⼀样,多个,会话级别。
c=(连接信息)该字段提供连接数据,包括连接类型、⽹络类型和连接地址。可应⽤于会话级也可以⽤
于媒体级。
b=(带宽信息)指明带宽需求,单位kbit/s, 可⽤于两个级别
r=(重复次数)如果是有规律的⽇程安排活动,这个字段⽤来指明会话重复频次和时间。
z=(时区调整)⽤于按⽇程安排的有规律活动会话。会话可能会夸时区,避免时区变更造成的混乱。
k=(加密密钥)为了对媒体加密、解密,该字段提供了⼀个加密密钥或者规定了⼀个获取密钥的机制。
可⽤于两个级别。
a=(属性)⽤于描述会话或者某个媒体的额外属性。
字段顺序
举例:
会话级
协议版本号(v)
会话源(o)
会话名称(s)
会话信息(i)(可选)
URI(u)(可选)
E-mail地址(e)(可选)
电话号码(p)(可选)
连接信息(c)(可选)
带宽信息(b)(可选)
时间描述(t)
重复信息(r)(可选)
时区调整(z)(可选)
加密密钥(k)(可选)
属性(a)(可选)
媒体级
媒体描述(m)
媒体信息(i)(可选)
连接信息(c)(会话级进⾏了规定,这⾥可选)
带宽信息(b)(可选)
加密密钥(k)(可选)
属性(a)(可选)
⼦字段
在SDP中许多字段采⽤多个⼦字段的形式,此时,这些字段值由多个以空格符间隔的多个值组成。格式如 下:
字段名称=<⼦字段1的值> <⼦字段2的值> <⼦字段3的值>
媒体信息(m)有四个⼦字段:媒体类型、端⼝、传输协议、格式。
格式: m=(媒体)(端⼝)(传送层)(格式列表)
媒体类型:⾳频(audio),视频(video),应⽤,数据和控制
端⼝:媒体传送层端⼝
传送层:ip4上⼤多基于rtp/udp上传送(RTP/AVP)IETF RTP协议,在udp上传输
格式列表: 对应对应的⾳频负载类型(PT)
m=video 0 RTP/AVP 96
a属性⾏
格式:
a=rtpmap:(净荷类型)(编码名)/(时钟速率)【/(编码参数)】
a=control:(⾳/视频连接信息)
a=control:rtsp://192.168.1.197/h264stream0/trackID=0
a=rtpmap:96 H264/90000
属性有两种形式,第⼀种是特征属性,第⼆种属于值属性。SDP描述了多个建议属性。
例如a=sendonly 表明会话描述的发送者只希望发送数据⽽不打算接收数据,端⼝号⽆意义,可以置为0。rtpmap属性提供了⼀个在VoIP应⽤中的重要属性使⽤⽅法,该属性可⽤于媒体流,在媒体格式不是静态的 RTP负载类型时特别有⽤。 严格来说,“rtpmap”只在使⽤动态负载类型情况下才是必须的,例如标准的G.711语⾳是静态RTP负载类 型,采⽤如下⽅法就可以对它完整描述: m=audio 45678 RTP/AVP 0
对动态负载来说需要指定更多信息才能使远端完全识别到媒体编码,例如16位线性编码16kHz取样的⽴ 体声⾳就是⼀个动态RTP负载类型,如果我们采⽤动态负载类型98表示这个媒体流,那么SDP格式如下:
m=audio 45678 RTP/AVP 0
a=rtpmap 98 L16/16000/2
大家可以抓包分析,有什么不懂的字段格式再去网上查。
RTCP协议
Real-time Transport Control Protocol或RTP Control Protocol或简写RTCP)是实时传输协议 (RTP)的⼀个姐妹协议。RTCP由RFC 3550定义(取代作废的RFC 1889)。RTP 使⽤⼀个 偶数 UDP port ;⽽RTCP 则使⽤ RTP 的下⼀个 port,也就是⼀个奇数 port。RTCP与RTP联合⼯作,RTP实施实 际数据的传输,RTCP则负责将控制包送⾄电话中的每个⼈。其主要功能是就RTP正在提供的服务质量做出 反馈。
RTCP报⽂封装在UDP中进⾏传输,作⽤如下:
质量反馈
传输层标识(CNAME)
给参与者发送RTCP控制报⽂
最⼩会话控制消息(可选)
RTCP端⼝号 = RTP端⼝号 + 1
RTCP报⽂格式--报⽂类型
在RTP的规范(RFC 3550)中,⼀共定义了5种RTCP报告⽤来报告当前控制信息:
PacketType值 分组类型 描述
*200 SR(Sender report) 发送者报告,包含发送者的统计信息。
*201 RR(Receiver report) 接收者报告,包含接收者的统计信息。
202 SDES(Source description) 源描述报告,包含关于发送者的各种描述信息。
203 BYE(Goodbye) 离开会话标识,表示某个参与者退出了会话。
204 APP(Application-defined) 应用定义的报文,用于扩展 RTCP 的功能。
RTCP的5种报告:RR,SR,SDES,BYE和APP。他们使⽤共同的结构,但是在某些具体的地⽅有⼀些不同。本文主要对200和201做出解析
以下是RTCP报⽂基本结构:
typedef struct _rtcp_header_t
{uint32_t v:2; // versionuint32_t p:1; // paddinguint32_t rc:5; // reception report countuint32_t pt:8; // packet typeuint32_t length:16; /* pkt len in words, w/o this word */
} rtcp_header_t;Version (V) 2bit : RTCP 协议版本号,目前为 2。
Padding (P) 1bit : 如果为 1,表示包尾有填充字节。
Item count(IC) 5bit : 有些RTCP分组类型包含多个条⽬(item)
,IC⽤来计算有多少个条⽬。因为IC只有5个⽐特,所以最多31个item。
如果需要的item超过31个,那么应⽤实现必须包含多个RTCP分组。
如果IC为0表示空的item列表。分组如果不需要item列表,那么可以把IC字段⽤于其他⽬的。Packettype(PT) 8bit :**PT标识了分组中携带消息的类型**。在RTP标准中定义了5种类型:RR,SR,SDES,BYE和APP。
Length(M) 16bit :**分组⻓度,以4 bytes为单位,所以意味着RTCP分组必须是4字节对⻬。该⻓度不包含32 bites固定头,也就是说length为0也是合理的,说明只有4字节的头部(这种情况IC也是0)**。**header size = 2 + 1 + 5 +8 + 16 = 4个字节**
RTCP报⽂格式-- SR报⽂格式
RTP协议还规定了最近发送数据的参与者发送SR,该报告提供了发送的媒体的⼀些 信息。主要⽤于接收端同步多媒体流,如语⾳和视频流。
SR 包,总共28字节 = header 4字节 + 4字节 * 6
RTCP报⽂格式-- RR报⽂格式
RTCP通过RR可以很好地保证传输质量,每个接收数据的参与者都要发出RR。
其中PT定义为201。接收者报告包含发送者的SSRC,跟随在由RC指定的(0个或多个)报告 块之后。
Extended highest sequence number received: 接收方收到的最高序号的 RTP 包。
Interarrival jitter: 接收到的 RTP 包的到达时间抖动。
Last SR (LSR): 上次收到的发送者报告(SR)的时间戳。
Delay since last SR (DLSR): 从上次收到 SR 报告到现在的时间延迟。typedef struct _rtcp_rr_t // receiver report
{uint32_t ssrc;
} rtcp_rr_t;
typedef struct _rtcp_rb_t // report block
{uint32_t ssrc;uint32_t fraction:8; // fraction lostuint32_t cumulative:24; // cumulative number of packets lostuint32_t exthsn; // extended highest sequence number receiveduint32_t jitter; // interarrival jitteruint32_t lsr; // last SRuint32_t dlsr; // delay since last SR
} rtcp_rb_t;
丢包率计算:表示⽅式:分⺟固定为256,分⼦是loss fraction表示的整数。所以如果想要表示1/4的报⽂丢失,那么loss fraction=64。
丢包数量计算:cumulative number of packets lost不是以每个周期为计算范围,⽽是以整个会话为计算范围。所以0x7fffff是cumulative number of packets lost的最⼤值,因为它是带符号整数。
扩展⾼位序列号:随着会话时间增⻓,16⽐特⻓度的序列号可能会不够⽤,当序列号⼜回到初始化序列号时,为了表示这个环绕,在⾼16⽐特记录环绕的次数,也就是把序列号扩展了。
总结
RTSP 是一种专门用于控制流媒体传输的网络协议,与 RTP(传输)/RTCP(质量控制) 和 SDP (session以及流媒体信息等等)协议一起构成了流媒体传输的核心技术。
参考
音视频同步!RTCP 协议解析及代码实现_rtcp功能的含义和作用-CSDN博客
SDP协议详细总结-CSDN博客
实时流协议---RTSP【详解】-CSDN博客
学习资料分享
0voice · GitHub
相关文章:

RTSP RTP RTCP SDP基础知识
理论 流(Streaming ) 是近年在 Internet 上出现的新概念,其定义非常广泛,主要是指通过网络传输多媒体数据的技术总称。 流式传输分为两种 顺序流式传输 (Progressive Streaming) 实时流式传输 (Real time Streaming) …...

静态变量、变量作用域、命名空间
静态变量 静态变量一般位于程序全局data区,只是编程语言根据它所在的scope做语言级别访问限制。 静态变量和全局变量 可以在C语言一个函数中定义static变量,并比较和全局变量的地址差异。 C系语言使用static关键字标示静态变量。 PHP使用大写的STATIC关键…...

Android笔记(二十四)基于Compose组件的MVVM模式和MVI模式的实现
仔细研究了一下MVI(Model-View-Intent)模式,发现它和MVVM模式非常的相识。在采用Android JetPack Compose组件下,MVI模式的实现和MVVM模式的实现非常的类似,都需要借助ViewModel实现业务逻辑和视图数据和状态的传递。在这篇文章中,…...

MySQL 是否支持 XML
MySQL 是否支持 XML:概述与应用 虽然 MySQL 主要以处理关系型数据为主,但它也提供了对 XML 数据的支持。XML(可扩展标记语言)是一种用于数据传输和存储的通用格式。在许多应用场景中,XML 被广泛用于数据交换、配置文件…...

pikachu靶场总结(四)
九、越权漏洞 1.概述 如果使用A用户的权限去操作B用户的数据,A的权限小于B的权限,如果能够成功操作,则称之为越权操作。 越权漏洞形成的原因是后台使用了 不合理的权限校验规则导致的。 一般越权漏洞容易出现在权限页面(需要登…...

24.3 基于文件的服务发现模式
本节重点介绍 : 基于文件的服务发现提供了一种配置静态目标的更通用的方法可以摆脱对特定服务发现源的依赖通常的做法是调用内部CMDB的接口获取target数据,打上标签,生成json文件发给prometheus采集 基于文件的服务发现模式 解决的问题 之前手动配置…...

【Java】面向UDP接口的网络编程
【Java】面向UDP接口的网络编程 一. 基本通信模型二. APIDatagramSocketDatagramPacket 三. 回显服务器/客户端示例服务器客户端总结 一. 基本通信模型 UDP协议是面向数据报的,因此此处要构建数据报(Datagram)在进行发送。 二. API DatagramSocket DatagramSocke…...

SRS服务器搭建
1、配置 listen 1935; max_connections 1000; #srs_log_tank file; #srs_log_file ./objs/srs.log; daemon on; http_api { enabled on; listen 1985; } http_server { enabled on; listen 808…...

iMazing只能苹果电脑吗 Win和Mac上的iMazing功能有区别吗
在当今数字时代,管理和备份手机数据变得越来越重要。无论是转移照片、备份短信,还是管理应用程序,一个强大的工具可以大大简化这些操作。iMazing作为一款备受好评的iOS设备管理软件,已经成为许多用户的选择。但是,许多…...

ChatGPT可以分析股票吗?
结合国庆前大A股市的小波牛市以及今天的股市表现,我从多个角度为你提供一些分析和建议: 一、国庆前的小波牛市分析 国庆前,大A股市出现了一波小幅上涨,市场呈现出一些积极的信号: 政策面利好:政府出台了…...

Dockerfile搭建镜像
Dockerfile搭建镜像的优势与区别 引言 在现代软件开发与运维中,容器化技术日益普及,而Docker作为最流行的容器化平台之一,通过Dockerfile提供了一种灵活、自动化的方式来构建Docker镜像。Dockerfile使得镜像的构建过程可重复、可版本化&…...

Kubernetes-Kind篇-01-kind搭建测试集群
1、Kind 介绍 官方文档地址:https://kind.sigs.k8s.io/ github仓库地址:https://github.com/kubernetes-sigs/kind 国内镜像仓库地址:https://gitcode.com/gh_mirrors/ki/kind/overview kind 是一种使用 Docker 容器 nodes 运行本地 Kubern…...

在UniApp中高效处理大量文件请求的策略
在开发跨平台应用时,尤其是在使用UniApp这样的框架时,我们可能会遇到需要同时请求多个文件的情况。然而,不加节制地同时发起大量请求可能会带来严重的性能问题,如界面卡顿、内存溢出、网络带宽饱和等。本文将探讨如何在UniApp中高…...

docker compose入门4—常用命令
在使用 Docker Compose 管理多容器应用时,常见的命令帮助我们高效地管理容器的生命周期、服务、日志等。以下是一些常用的 Docker Compose 命令及其详细讲解: 1. docker-compose up 这个命令用于启动定义在 docker-compose.yml 文件中的服务。 用法&am…...

wps文本框文字居中对齐
直接点对齐里的水平居中,垂直居中是将文本框水平垂直居中,文字不会居中 将文本框里的文字居中: 垂直居中: 水平居中:...

注册信息页面
知识点: !+Enter 直接生成前端基本框架 1.<h1></h1> (2,3,4,5) 表示各级标题 2.<form></form> 表单建立 3.<input type" "></input> 表格(表单嵌套表格) type属…...

详解Java中的BIO、NIO、AIO
1、 详解Java中的BIO、AIO、NIO 1.1、引言 IO流是Java中比较难理解的一个知识点,但是IO流在实际的开发场景中经常会使用到,比如Dubbo底层就是NIO进行通讯。本文将介绍Java发展过程中出现的三种IO:BIO、NIO以及AIO,重点介绍NIO。…...

CAN和CANFD如何转换和通信
随着科技的发展,汽车电子和工业领域中CAN通信需要承载数据量也越来越大,传统CAN通信有了向CANFD通信过渡的倾向。在实现过渡的过程中可能会出现自己设备是CAN通信,客户设备是CANFD通信的情况,或者自己设备是CANFD通信,…...

QDateTimeEdit Class
Header:#include qmake:QT += widgets Inherits:QAbstractSpinBox Inherited By:QDateEdit and QTimeEdit Public Types enum Section {NoSection, AmPmSection, MSecSection, SecondSection, MinuteSection, …, YearSection } flags SectionsProperties calendarPopu…...

Windows环境安装CentOS7
【注意】安装CentOS需要先安装Vmware虚拟机 【下载前准备】 一、下载CentOS 7镜像文件阿里云镜像开源,点击跳转 二、安装VMware(17): a. 官网,点击跳转 b. 许可证:JU090-6039P-08409-8J0QH-2YR7F 安装V…...

用docker启动mysql步骤
以下是在 Docker 中启动 MySQL 的详细步骤: **一、拉取 MySQL 镜像 ** 1. 打开终端,确保 Docker 服务正在运行。可以使用以下命令检查 Docker 服务状态: sudo systemctl status docker 2. 使用以下命令拉取 MySQL 官方镜像: d…...

[Linux] Linux 初识进程地址空间 (进程地址空间第一弹)
标题:[Linux] Linux初识进程地址空间 个人主页水墨不写bug (图片来源于AI) 目录 一、什么是进程地址空间 二、为什么父子进程相同地址的变量的值不同 三、初识虚拟地址、页表 一、什么是进程地址空间 其实,在很久之前…...

力扣21~25题
21题(简单): 分析: 按要求照做就好了,这种链表基本操作适合用c写,python用起来真的很奇怪 python代码: # Definition for singly-linked list. # class ListNode: # def __init__(self, v…...

04. prometheus 监控 Windows 服务器
prometheus 监控 Windows 服务器 1. 下载安装 Windows_exporter 安装包下载:https://github.com/prometheus-community/windows_exporter/releases 下载 msi 版本,上传至要监控的 Windows 服务器,双击安装即可,exporter 会自动…...

【机器学习】——决策树以及随机森林
文章目录 1. 决策树的基本概念与结构1.1 决策树的构建过程 2. 决策树的划分标准2.1 信息增益(Information Gain)2.2 信息增益比(Information Gain Ratio)2.3 基尼指数(Gini Index)2.4 均方误差(…...

怎么选择合适的数据恢复软件?适用于 Windows 的数据恢复软件对比
针对 Windows 的领先数据恢复软件的全面回顾: 丢失重要数据对任何 Windows 用户来说都是一场噩梦。从意外删除到系统崩溃,数据丢失是一个非常普遍的问题。值得庆幸的是,有强大的数据恢复工具可以帮助找回丢失的文件。这篇评论深入探讨了适用于…...

CI/CD 和 DevOps 工具概述:Jenkins 、Docker 的概述、工作流程、对比
随着软件开发的复杂性不断增加,持续集成(CI)、持续交付(CD)和运维(Ops)的概念逐渐成为现代软件开发流程中的核心组成部分。这些概念促进了开发团队与运维团队之间的协作,提升了软件的…...

基于SpringBoot+Vue+uniapp的高校教务管理小程序系统设计和实现
2. 详细视频演示 文章底部名片,联系我获取更详细的演示视频 3. 论文参考 4. 项目运行截图 代码运行,效果展示图 代码运行,效果展示图 代码运行,效果展示图 代码运行,效果展示图 代码运行,效果展示图 5. 技…...

如何在 Ubuntu VPS 上从 Apache Web 服务器迁移到 Nginx
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 在启动网站或应用程序时,您需要做出许多选择。有时,您的需求会发生变化,新技术变得可行&#x…...

pikachu靶场总结(一)
最近看到好多人还在打这个靶机所以把以前写的总结放上来了,主要是皮卡丘靶场漏洞的原理,利用方式,防护方法简略总结,纯手敲记录,总结如果不到位请评论区留言! 一、暴力破解 1.基于表单的暴力破解 原理&a…...