音视频学习(十四)——rtsp详解

news2024/10/7 20:34:14

概念

rtsp(Real Time Streaming Protocol,RFC2326),实时流传输协议,是TCP/IP协议体系中的一个应用层协议。

该协议主要规定了一对多应用程序如何有效地通过IP网络传送多媒体数据。RTSP体系结位于RTP和RTCP之上(RTCP用于控制传输,RTP用于数据传输),使用TCP或UDP完成数据传输!

基本流程

在这里插入图片描述

  • OPTIONS

    • C—>S:客户端向服务器端发现OPTIONS,请求可用的方法;
    • S—>C:服务器端回复客户端,消息中包含当前可用的方法;
  • DESCRIBE

    • C—>S:客户端向服务器请求媒体描述文件,一般通过rtsp开头的url来发起请求,格式为sdp;
    • S—>C:服务器回复客户端sdp文件,该文件告诉客户端服务器有哪些音视频流,有什么属性,如编解码器信息,帧率等;
  • SETUP

    • C—>S:客户端向服务器端发起建立连接请求,请求建立会话连接,准备开始接收音视频数据,请求信息描述了期望音视频数据包基于UDP还是TCP传输,指定了RTP,RTCP端口,以及是单播还是组播等信息;
    • S—>C:服务器端收到客户端请求后,根据客户端请求的端口号确定发送控制数据的端口以及音视频数据的端口;
  • PLAY

    • C—>S:客户端向服务端请求播放;
    • S—>C:服务器回复客户端200 OK! 之后开始通过SETUP中指定的端口开始发送数据;
  • TEARDOWN

    • C—>S:结束播放的时候,客户端向服务器端发起结束请求;
    • S—>C:服务端收到消息后,向客户端发送200 OK,之后断开连接;

消息格式

请求格式

在这里插入图片描述

响应格式

在这里插入图片描述

SDP格式

简介

sdp(Session Description Protocol,会话描述协议)对应RFC2327。RTSP协议中使用sdp进行媒体信息的描述。 sdp的目的就是在媒体会话中,传递媒体流信息,允许会话描述的接收者去参与会话,定义了会话描述的统一格式。

格式

sdp信息由多行"="组成,其中是一个字符串,是一个字符串,type表示类型,value的格式视type而定,整个协议区分大小写,"="两侧不允许有空格!

sdp会话描述包含一个会话级描述(session_level_description)和多个媒体级描述(media_level description)组成!会话级描述的作用域是整个会话,其位置从"v="行开始到第一个媒体描述为止;媒体级描述是对单个的媒体流进行描述,如传输过程中的视频流信息,从m=开始到下一个媒体描述为止,如下图所示:

在这里插入图片描述

字段描述

version

必选。

  • 格式: v=
  • 描述: 表示sdp的版本号,不包含次版本号

origin

必选。

  • 格式:o=
  • 描述:o=选项对会话的发起者进行了描述;
    • username:是用户的登录名, 如果主机不支持,则用"-"代替, 不能包含空格;
    • sessionid:是一个数字串,在整个会话中,必须是唯一的,建议使用个NTP 时间戳;
    • version:该会话公告的版本,建议使用NTP时间戳;
    • network type:网络类型,一般为"IN",表示internet;
    • address type:地址类型,一般为IP4;
    • address:地址;

Session Name

必选。

  • 格式:s=
  • 描述: 会话名称,在整个会话中有且只有1个"s="

Connection Data

可选。

  • 格式: c=
  • 描述: 表示媒体连接信息;一个会话级描述中必须有"c="或者在每个媒体级描述中有一个"c="选项,也可能在会话级描述和媒体级描述中都有"c="选项;
    • network type:网络类型,一般为IN,表示internet;
    • address type:地址类型,一般为IP4;
    • connection address,地址,可能为域名或ip地址两种形式;

Bandwidth

可选。

  • 格式:b=:
  • 描述:该选项描述了建议的带宽,单位 kbs/s,可选,modifier包括两种类型,CT和AS,CT表示总带宽,AS表示单个媒体带宽的最大值;bandwidth-value表示具体的带宽;

Times

必选。

  • 格式:t=
  • 描述:t字段描述了会话的开始时间和结束时间, NTP时间,单位是秒;如果 为0表示过了之后,会话一直持续;当 和 都为0的时候,表示持久会话,如拉实时流;

email

可选。

  • 格式:e=
  • 描述:用来描述邮件地址;

phone number

可选。

  • 格式:p=
  • 描述:用来描述电话号码;

URI

可选。

  • 格式:u=
  • 描述:url值;

a=(*)

可选。

  • 格式:a=<*>
  • 描述:表示一个会话级别或媒体级别下的0个或多个属性;

media information

必选。

  • 格式:m=
  • 描述:表示一个会话的媒体信息;
    • media:媒体类型。有"audio",“video”,“application”,“data”(不向用户显示的数据),“control”(描述额外的控制通道);
    • port:表示媒体流发往传输层的端口,对于RTP,偶数端口用来传输数据,奇数端口用来传输信令;
    • transport type:表示传输协议,与"c="一行相关联,一般用RTP/AVP表示,即 Realtime Transport Protocol using the Audio/Video profile over udp,即我们常说的RTP over udp;
    • fmt list:表示媒体格式,分为静态绑定和动态绑定;
      • 静态绑定:媒体编码方式与RTP负载类型有确定的一一对应关系,如: m=audio 0 RTP/AVP 8;
      • 动态绑定:媒体编码方式没有完全确定,需要使用rtpmap进行进一步的说明;
m=video 0 RTP/AVP 96
a=rtpmap:96 H264/90000

rtpmap

可选。

  • 格式:a=rtpmap: /
  • 描述:会话的媒体信息;
    • payload type:表示动态负载类型,如 98表示h264;
    • encoding name:表示编码名称,如H.264;
    • clock rate:表示时钟频率,如90000;

命令说明

OPTION

功能

一般为RTSP客户端发起的第一条请求指令,该指令的目的是得到服务端提供了哪些方法!(OPTIONS, DESCRIBE, PLAY, PAUSE, SETUP, TEARDOWN, SET_PARAMETER, GET_PARAMETER等)。

请求

# 请求报文
OPTIONS rtsp://192.168.0.110:554/Streaming/Channels/101 RTSP/1.0
CSeq: 2
User-Agent: LibVLC/3.0.17.4 (LIVE555 Streaming Media v2016.11.28)
  • OPTIONS:标识请求命令的类型;
  • URI:请求的服务端的URI,以rtsp://开头的地址,一般为rtsp://ip:554(rtsp默认端口号);
  • VER:标识RTSP 版本号,一般常见RTSP/1.0;
  • CSeq:数据包序列号,由于OPTIONS一般而言为RTSP请求的第一条指令,一般而言,针对OPTIONS,该值为1;
  • User-Agent:用户代理;

响应

# 响应报文
RTSP/1.0 200 OK
CSeq: 2
Public: OPTIONS, DESCRIBE, GET_PARAMETER, PAUSE, PLAY, SETUP, SET_PARAMETER, TEARDOWN
Date:  Mon, Dec 05 2022 17:00:10 GMT
  • Public:服务端支持的方法;
  • Date:响应时间;

注意:OPTION响应中的序列号与请求中的序列号相同。

DESCRIBE

功能

客户端发起OPTION请求后,得到了RTSP服务器支持的指令。在此之后,客户端会继续向服务器发送DESCRIBE消息,来获取会话描述信息(sdp)。

请求

# 第一次发送describe请求
DESCRIBE rtsp://192.168.0.110:554/Streaming/Channels/101 RTSP/1.0
CSeq: 3
User-Agent: LibVLC/3.0.17.4 (LIVE555 Streaming Media v2016.11.28)
Accept: application/sdp

# 服务端返回401---未认证
RTSP/1.0 401 Unauthorized
CSeq: 3
WWW-Authenticate: Digest realm="IP Camera(J4640)", nonce="a1c588527e4e05c101acf26a8ce7bea6", stale="FALSE"
Date:  Mon, Dec 05 2022 17:00:10 GMT

# 第二次发送describe请求
DESCRIBE rtsp://192.168.0.110:554/Streaming/Channels/101 RTSP/1.0
CSeq: 4
Authorization: Digest username="admin", realm="IP Camera(J4640)", nonce="a1c588527e4e05c101acf26a8ce7bea6", uri="rtsp://192.168.0.110:554/Streaming/Channels/101", response="6e0f28a1a40865ab098d748eb306be92"
User-Agent: LibVLC/3.0.17.4 (LIVE555 Streaming Media v2016.11.28)
Accept: application/sdp
  • Accept:指明接收数据的格式,如application/sdp表示接收sdp信息,之后加入\r\n表示此条目结束;
  • CSeq:RTSP序列号,一般DESCRIBE包在RTSP请求过程中的序列号为2(此例中CSeq为3),之后加入\r\n表示此条目结束;
  • UserAgent:指明用户代理,由于是最后一个条目,加入两组\r\n表示结束;
DESCRIBE消息,有两种返回结果:
1)服务端需要认证,则首先返回401,并要求客户端认证,客户端再次发送包含认证信息的DESCRIBE指令,服务端收到带认证信息的DESCRIBE请求,返回sdp信息给客户端;
2)服务端不需要认证,则直接返回sdp;

响应

# 响应报文
RTSP/1.0 200 OK
CSeq: 4
Content-Type: application/sdp
Content-Base: rtsp://192.168.0.110:554/Streaming/Channels/101/
Content-Length: 788

v=0
o=- 1670259610794238 1670259610794238 IN IP4 192.168.0.110
s=Media Presentation
e=NONE
b=AS:5100
t=0 0
a=control:rtsp://192.168.0.110:554/Streaming/Channels/101/
m=video 0 RTP/AVP 96
c=IN IP4 0.0.0.0
b=AS:5000
a=recvonly
a=x-dimensions:2560,1440
a=control:rtsp://192.168.0.110:554/Streaming/Channels/101/trackID=1
a=rtpmap:96 H265/90000
a=fmtp:96 sprop-vps=QAEMAf//AWAAAAMAAAMAAAMAAAMAlqwJ; sprop-sps=QgEBAWAAAAMAAAMAAAMAAAMAlqABQCAFoWNrkk5TNwEBAQQAADhAAAV+QoQ=; sprop-pps=RAHA8vAiQA==
m=audio 0 RTP/AVP 11
c=IN IP4 0.0.0.0
b=AS:50
a=recvonly
a=control:rtsp://192.168.0.110:554/Streaming/Channels/101/trackID=2
a=rtpmap:11 PCM/16000
a=Media_header:MEDIAINFO=494D4B480103003E0000007D000000000000000000000000000000000000;
a=appversion:1.0
  • Content-type:回复内容类型,值为application/sdp;
  • Content-Base:一般用RTSP URI表示;
  • Content-length:返回的sdp信息的长度 ;

ANNOUNCE

功能

  • C—>S:将请求URL标识的演示文稿或媒体对象的描述发布到服务器;
  • S—>C:实时更新会话描述;
  • 如果新的媒体流被添加到演示文稿中(例如,在实时演示中),则应该再次发送整个演示文稿描述,而不仅仅是附加的组件,以便可以删除组件;

请求

ANNOUNCE rtsp://192.168.0.110:554/Streaming/Channels/101 RTSP/1.0 
CSeq:312
Date:23Jan 199715:35:06GMT
Session:47112344Content-Type:application/sdp
Content-Length:332
文本内容

响应

RTSP/1.0 200 OK

SETUP

功能

  • 指明媒体流该以什么方式传输;
  • 每个流PLAY之前必须执行SETUP操作;
  • 发送SETUP请求时,客户端会指定两个端口,一个端口用于接收RTP数据;另一个端口接收RTCP数据,偶数端口用来接收RTP数据,相邻的奇数端口用于接收RTCP数据;

请求

SETUP rtsp://192.168.0.110:554/Streaming/Channels/101/trackID=1 RTSP/1.0
CSeq: 5
Authorization: Digest username="admin", realm="IP Camera(J4640)", nonce="a1c588527e4e05c101acf26a8ce7bea6", uri="rtsp://192.168.0.110:554/Streaming/Channels/101/", response="512cc1939bddf54e217bdb9ca51cdfc7"
User-Agent: LibVLC/3.0.17.4 (LIVE555 Streaming Media v2016.11.28)
Transport: RTP/AVP/TCP;unicast;interleaved=0-1
  • URI:请求的RTSP服务器的地址;
  • VER:RTSP的版本;
  • Transport:媒体流的传输方式,具体包括传输协议如RTP/UDP;指出是单播,组播还是广播;声明两个端口,一个奇数,用于接收RTCP数据,一个偶数,用于接收RTP数据;
  • CSeq:数据包请求序列号;
  • User-Agent:用户代理;
  • Authorization:认证信息;

响应

RTSP/1.0 200 OK
CSeq: 5
Session: 366292562;timeout=60
Transport: RTP/AVP/TCP;unicast;interleaved=0-1;ssrc=224b8452;mode="play"
Date:  Mon, Dec 05 2022 17:00:10 GMT
  • mode:当前rtsp连接的模式;
  • Session:会话ID;

PLAY

功能

客户端发送的播放请求,发送播放请求的时候可以指定播放区间。发起播放请求后,如果连接正常,则服务端开始播放,即开始向客户端按照之前在TRASPORT中约定好的方式发送音视频数据包。

请求

PLAY rtsp://192.168.0.110:554/Streaming/Channels/101/ RTSP/1.0
CSeq: 6
Authorization: Digest username="admin", realm="IP Camera(J4640)", nonce="a1c588527e4e05c1cf26a8ce7bea6", uri="rtsp://192.168.0.110:554/Streaming/Channels/101/", response="0365b758c23e959fa5964cb47098b"
User-Agent: LibVLC/3.0.17.4 (LIVE555 Streaming Media v2016.11.28)
Session: 366292562
Range: npt=0.000-
  • URI:请求的RTSP 地址;
  • Version:版本号;
  • CSeq:请求的序列号;
  • User-Agent:用户代理;
  • Session:会话id,与SETUP请求返回id对应;
  • Authorizatiuon:认证信息;
  • Range:PLAY消息特有的,代表请求播放的时间段,使用ntp时间来表示。“Range: npt=0.000-”表示拉实时流。

响应

RTSP/1.0 200 OK
CSeq: 6
Session: 366292562
RTP-Info: url=rtsp://192.168.0.110:554/Streaming/Channels/101/trackID=1;seq=16946;rtptime=2502369666
Date:  Mon, Dec 05 2022 17:00:10 GMT
  • URI:请求的RTSP 地址;
  • Version:版本号;
  • CSeq:请求的序列号;
  • User-Agent:用户代理;
  • Session:会话id,与SETUP请求返回id对应;
  • RTP-Info:RT;
  • Date:日期;

PAUSE

功能

暂停请求会使得流传输暂时中断,主要用于回放或录制

请求

PAUSE rtsp://192.168.0.110:554/Streaming/Channels/101/ RTSP/1.0
CSeq:12
Session:366292562
  • URI:请求的RTSP 地址;
  • Version:版本号;
  • CSeq:请求的序列号;
  • Session:会话id,与SETUP请求返回id对应;

响应

RTSP/1.0  200 OK
CSeq:12
Session:366292562

TEARDOWN

功能

结束流。

请求

TEARDOWN rtsp://192.168.0.110:554/Streaming/Channels/101/ RTSP/1.0
CSeq: 7
Authorization: Digest username="admin", realm="IP Camera", nonce="a1c588527e401acf26a8ce7bea6", uri="rtsp://192.168.0.110:554/Streaming/Channels/101/", response="d57351cf4606ef70ef80e4709b"
User-Agent: LibVLC/3.0.17.4 (LIVE555 Streaming Media v2016.11.28)
Session: 366292562

字段基本与其他命令含义相同。

响应

RTSP/1.0 200 OK
CSeq: 7
Session: 366292562
Date:  Mon, Dec 05 2022 17:00:13 GMT

GET_PARAMETER

功能

向服务器获取参数,一般用于获取时间范围。当发送的请求中没有相关请求参数时,则用作保持RTSP连接**(tcp方式的心跳)**。

请求

GET_PARAMETER rtsp://192.168.0.110:554/Streaming/Channels/101/?transportmode=unicast&profile=Profile_12 RTSP/1.0
CSeq: 17
Authorization: Digest username="admin", realm="bcad28138995", nonce="a1a5b9d3865180dc1cb2eb2a27", uri="rtsp://192.168.0.110:554/Streaming/Channels/101/", response="4764a1f2772821f5528e18c3f9"
User-Agent: LibVLC/3.0.11 (LIVE555 Streaming Media v2016.11.28)
Session: 366292562
  • URI:请求的RTSP 地址;
  • Version:版本号;
  • CSeq:请求的序列号;
  • User-Agent:用户代理;
  • Session:会话id,与SETUP请求返回id对应;
  • Authorizatiuon:认证信息;

响应

RTSP/1.0 200 OK
CSeq: 17
Date: Thu, Aug 27 2022 18:29:00 GMT

SET_PARAMETER

功能

给URI指定的流地址设置参数。

请求

可跟一个或多个参数。

响应

RTP

简介

RTP是一种应用层协议,传输层协议可以是TCP或者UDP(UDP多一些)。

RTP数据包由两部分组成,一部分是RTP Heaeder,一部分是RTP body,RTP Header占用最少12个字节,最多72个字节;另一部分是RTP Payload,用来封装实际的数据负载,如封装h264编码的视频数据!

格式

在这里插入图片描述

RTP Header

结构

  0               1                 2               3             4
    
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |V=2|P|X|  CC |M|     PT          | sequence number             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | timestamp                                                     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | synchronization source (SSRC) identifier                      |
   +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
   | contributing source (CSRC) identifiers                        |
   | ....                                                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • 版本号(V):2比特,用来标志使用的RTP版本,固定为2;
  • 填充位(P):1比特,如果该位置位,则该RTP包的尾部就包含附加的填充字节;
  • 扩展位(X):1比特,如果该位置位的话,RTP固定头部后面就跟有一个扩展头部;
  • CSRC计数器(CC):4比特,含有固定头部后面跟着的CSRC的数目;
  • 标记位(M):1比特,该位的解释由配置文档(Profile)来承担;
  • 载荷类型(PT):7比特,标识了RTP载荷的类型;
  • 序列号(SN):16比特,发送方在每发送完一个RTP包后就将该域的值增加1,接收方可以由该域检测包的丢失及恢复包序列。序列号的初始值是随机的;
  • 时间戳:32比特,记录了该包中数据的第一个字节的采样时刻。在一次会话开始时,时间戳初始化成一个初始值。即使在没有信号发送时,时间戳的数值也要随时间而不断地增加(时间在流逝嘛)。时间戳是去除抖动和实现同步不可缺少的;
  • 同步源标识符(SSRC):32比特,同步源就是指RTP包流的来源。在同一个RTP会话中不能有两个相同的SSRC值。该标识符是随机选取的 RFC1889推荐了MD5随机算法,就是ssrc;
  • 贡献源列表(CSRC List):0~15项,每项32比特,用来标志对一个RTP混合器产生的新包有贡献的所有RTP包的源。由混合器将这些有贡献的SSRC标识符插入表中。SSRC标识符都被列出来,以便接收端能正确指出交谈双方的身份;

对照表

有效载荷类型表

PT*Encoding Name**Audio/Video (A/V)**Clock Rate (Hz)**Channels**Reference*
0PCMUA80001[RFC3551]
1Reserved
2Reserved
3GSMA80001[RFC3551]
4G723A80001[Vineet_Kumar][RFC3551]
5DVI4A80001[RFC3551]
6DVI4A160001[RFC3551]
7LPCA80001[RFC3551]
8PCMAA80001[RFC3551]
9G722A80001[RFC3551]
10L16A441002[RFC3551]
11L16A441001[RFC3551]
12QCELPA80001[RFC3551]
13CNA80001[RFC3389]
14MPAA90000[RFC3551][RFC2250]
15G728A80001[RFC3551]
16DVI4A110251[Joseph_Di_Pol]
17DVI4A220501[Joseph_Di_Pol]
18G729A80001[RFC3551]
19ReservedA
20UnassignedA
21UnassignedA
22UnassignedA
23UnassignedA
24UnassignedV
25CelBV90000[RFC2029]
26JPEGV90000[RFC2435]
27UnassignedV
28nvV90000[RFC3551]
29UnassignedV
30UnassignedV
31H261V90000[RFC4587]
32MPVV90000[RFC2250]
33MP2TAV90000[RFC2250]
34H263V90000[Chunrong_Zhu]
35-71Unassigned?
72-76Reserved for RTCP conflict avoidance[RFC3551]
77-95Unassigned?
96-127dynamic?[RFC3551]

GB28181中对payload的定义

负载类型编码名称时钟频率通道数SDD描述中m字段的media项
4G.7238k HZ1audio
8PCMA(G.711 A)8k HZ1audio
9G7228k HZ1audio
18G.7298k HZ1audio
20SVACA(SVAC音频)8k HZ1audio
96PS90k HZvideo
97MPEG-4video
98H.264
99SAVC(SVAC视频)

示例

在这里插入图片描述

RTP Body

载荷数据。

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

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

相关文章

etsy账号被封的原因有哪些?

Etsy之所以让人又爱又恨&#xff0c;是因为它的流量大&#xff0c;但缺点是规则限制&#xff0c;尤其是对于中国卖家。根据各大社交媒体的留言和评论&#xff0c;大多数电商人最关心Etsy关店的问题。   为什么Etsy会被封号&#xff1f;首先&#xff0c;我们需要了解封号的原因…

高压放大器的输入和输出阻抗为啥是50欧的

选择高压放大器的时候&#xff0c;经常会看到有些高压放大器的输入和输出阻抗都是50欧&#xff0c;今天就来说说高压放大器和无处不在的50欧姆&#xff0c;来聊聊它们的关系。 电子测量仪器在使用的时候会出现电子信号幅度突然加倍或者减少一半的情况&#xff0c;原因是几乎所有…

用echarts实现柱状图

目录前言&#xff1a;什么是 Echarts 插件柱状图成品展示步骤&#xff1a;柱状图代码&#xff1a;前言&#xff1a; 大家都知道&#xff0c;一般情况下&#xff0c;想要使用前端设置一个 柱状图 需要使用 canvas 画布进行编写&#xff0c;不仅代码多&#xff0c;逻辑处理麻烦&…

搭建Nacos集群

nacos的默认端口是8848&#xff0c;但是他还占用了另外两个接口&#xff1a;9848、9849。因此&#xff0c;在单机配置集群时&#xff0c;不可使用三个连续的端口&#xff0c;否则会导致 gRPC端口冲突。 端口与主端口&#xff08;8848&#xff09;偏移量作用98481000客户端gRPC…

7.javase_数组1

一. 数组定义格式 格式1&#xff1a;数据类型[] 变量名; 范例&#xff1a;int[] arr; 格式2&#xff1a;数据类型 变量名[]; 范例&#xff1a; int arr[];二. 数组初始化方式 1.1静态初始化&#xff1a;【初始化时指定每个数组元素的初始值&#xff0c;由系统决定数组长度】格…

ARFoundation系列讲解 - 89 适配华为机型

一、简介 使用 ARCore 开发安卓应用的时候,由于谷歌的制裁和鸿蒙系统的不兼容,导致华为大部分机型无法使用,而国内使用华为设备的群体占比较大的比例所以兼容华为设备是一个绕不过的坎。这个章节我们将学习使用 HuaweiAREngine 结合 ARFoundation 兼容使用来解决这个问题。 …

职业教育数字化成行业发展新方向

2022年,职业教育正迎来新的风口。随着与普通教育同等重要的地位得到确认,职业教育将肩负起建设与我国经济结构转型需求相匹配的人才供给的重任,在社会服务业、战略新兴行业等各大领域中大放异彩。 一、职业教育是什么? 1、职业教育定义 联合国教科文组织认为职业教育(Vocat…

PID控制器的远程设定点功能及其应用

摘要&#xff1a;远程设定点功能是超高精度PID控制器的重要拓展功能之一&#xff0c;其在实际自动控制中有着广泛的应用。本文详细介绍了远程设定点的功能和操作设置过程&#xff0c;同时还介绍了远程设定点功能在跟踪控制、串级控制和比值控制中的具体应用。 原文阅读&#x…

争议不断的AI绘画,靠啥成为了顶流?

今年以来&#xff0c;AIGC迅速崛起。所谓AIGC&#xff0c;即AI-Generated Content&#xff0c;指的是利用人工智能来生成内容&#xff0c;被认为是继专业产出内容&#xff08;PGC&#xff09;、用户产出内容&#xff08;UGC&#xff09;后的新型内容创作方式。不久前掀起热议的…

品牌化、跨境电商、专注细分赛道,平台助力品牌快速出海

国内国外产品都面临着日趋激烈的竞争&#xff0c;卖家越来越意识品牌的效应的重要作用。在竞争激烈的大环境之下&#xff0c;卖家必须采取有效的产品品牌营销策略来提高自身产品的市场竞争力。品牌营销在一定程度上可以增强产品在激烈的市场竞争的影响力。同时&#xff0c;口碑…

【DL】Windiws10系统下安装CUDA和CUDNN实践教程

Windiws10系统下安装CUDA和CUDNN实践教程(手把手系列,不错过任何一个环节): 一、查看需要的CUDA版本 点击开始菜单栏右侧的放大镜,输入NVIDIA 然后点击NVIDIA Control Panel,进入NVIDIA控制面板 点击管理3D设置->系统信息 弹出以下界面框 点击组件,就可以看到驱动对…

工业CT检测技术及工业CT基本组成

工业CT基本组成 由重建CT图像的基本过程出发&#xff0c;我们可以想象一下组成一台工业CT设备的基本要求&#xff1a;它应该能够量 X射线穿透被检物体以后射线的强度&#xff0c;同时能够完成X射线机-探测器系统与被检测物体之间的扫描运动&#xff0c;从而获得重建CT图像所需的…

如何将u盘两个分区合并?u盘怎么合并一个区

U盘是我们日常工作中应用得很广泛的便携式存储设备&#xff0c;具有体积小、便携易带、容量大、随插随拔等优势。为了方便存储数据&#xff0c;不少的用户都会对U盘分区&#xff0c;那么&#xff0c;如何将u盘两个分区合并&#xff1f; 一、合并U盘分区的应用与说明 合并U盘分…

Java高效率复习-MySQL下篇

前言 本文章的语言描述会比上篇多一些 数据库的创建修改与删除 标识符命名规则 数据库名、表名不得超过30个字符&#xff0c;变量限制为29个必须只能包含A-Z&#xff0c;a-z&#xff0c;0-9&#xff0c;_等63个字符数据库名、表名、字段名等对象名中间不要包含空格同一个My…

【Unity编辑器扩展】GF_HybridCLR自定义Toolbar, 一键出包/打热更扩展工具

GF_HybridCLR是基于GameFramework HybridCLR的一款工具链完善&#xff0c;工作流简洁的游戏框架。拥有标准高效的开发工作流&#xff0c;开箱即用&#xff0c;适用于快速研发。 出包时经常遇到忘记刷新配置表、忘记重新打AB包等等&#xff0c;接入HybridCLR每次打热更包也需要…

Android Span进阶之路——ClickableSpan

一、前言 在Android中&#xff0c;可以使用强大的标记&#xff08;Span&#xff09;对象来实现富文本展示&#xff0c;相比 HTML 而言更高效实用。关于 Android Span 的入门篇可以阅读 Android中强大的标记对象-Span。本文将对 ClickableSpan &#xff08;可点击的Span&#xf…

WebDAV之葫芦儿·派盘 + Koder

Koder 支持WebDAV方式连接葫芦儿派盘。 一款可以让你在iPhone、iPad上写各种编程语言代码的app,码农不要错过。 Koder是iPad和iPhone的代码编辑器。它确实具有许多功能,包括语法突出显示,代码段管理器,选项卡式编辑,查找和替换代码,编辑器主题,远程和本地文件连接等等…

OpenCV入门(C++/Python)- 使用OpenCV标注图像(六)

使用OpenCV标注图像用颜色线标注图像绘制圆绘制实心圆绘制矩阵绘制椭圆绘制带轮廓和填充半椭圆使用文本注释图像为图像和视频添加标注的目的不止一个&#xff0c;包含&#xff1a;向视频中添加信息在对象检测的情况下&#xff0c;在对象周围绘制边界框&#xff0c;用不同颜色的…

并查集介绍

文章目录&#xff1a;并查集原理并查集实现并查集的类结构并查集的合并统计集合数量并查集原理 在一些应用问题中&#xff0c;需要将 n 个不同的元素划分成一些不相交的集合。开始时&#xff0c;每个元素自成一个单元素集合&#xff0c;然后按照一定的规律将归于同一组元素的集…

《找对英语学习方法的第一本书》

简 述: 此书写于二十年前&#xff0c;结合我自身情况参照&#xff0c;有了一种理论指导&#xff0c;可在众多学习方法中有效抉择&#xff0c;亦能在不同阶段更换不同策略。本文为读后的一个简要归纳和札记。 文章目录第一章&#xff1a;爱之愈深、误之愈切第二章&#xff1a;我…