rtsp协议:rtsp协议参数介绍

目的:

实时流协议(RTSP)用于建立和控制单个或多个时间同步的连续媒体流,例如音频和视频。RTSP 通常不负责实际传输这些连续的媒体流,但可以将连续媒体流与控制流进行交错传输(参见第 10.12 节)。换句话说,RTSP 就像是多媒体服务器的“网络遥控器”。

要控制的流集合由呈现描述(presentation description)来定义。本备忘录未定义呈现描述的格式。

RTSP 中没有连接的概念;相反,服务器通过一个标识符维护一个会话。RTSP 会话并不与传输层连接(例如 TCP 连接)绑定。在一个 RTSP 会话期间,RTSP 客户端可以多次打开和关闭与服务器之间的可靠传输连接以发送 RTSP 请求。或者,它也可以使用诸如 UDP 之类的无连接传输协议。
RTSP 控制的流可以使用 RTP [1],但 RTSP 的操作不依赖于用于传输连续媒体的传输机制。该协议在语法和操作上有意与 HTTP/1.1 [2] 类似,因此在大多数情况下,HTTP 的扩展机制也可以添加到 RTSP 中。然而,RTSP 在许多重要方面与 HTTP 不同:

  • RTSP 引入了许多新的方法,并且具有不同的协议标识符。

  • RTSP 服务器在几乎所有情况下都需要默认维护状态,这与 HTTP 的无状态特性不同。

  • RTSP 服务器和客户端都可以发起请求。

  • 数据由不同的协议进行带外传输。(有一个例外情况。)

  • RTSP 被定义为使用 ISO 10646 (UTF-8) 而不是 ISO 8859-1,这与当前 HTML 国际化的工作保持一致 [3]。

  • Request-URI 始终包含绝对 URI。由于与历史错误的向后兼容性,HTTP/1.1 [2] 仅在请求中携带绝对路径,并将主机名放在一个单独的头字段中。

这使得“虚拟主机”更加容易,即一个具有单个 IP 地址的主机可以托管多个文档树

该协议支持以下操作:

  • 1、 从媒体服务器检索媒体 :客户端可以通过 HTTP 或其他方法请求演示描述。如果演示内容是通过多播进行的,演示描述将包含用于连续媒体的多播地址和端口。如果演示内容仅通过单播发送给客户端,出于安全原因,客户端需要提供目标地址。

  • 2、邀请媒体服务器加入会议 : 媒体服务器可以被“邀请”加入一个已存在的会议,既可以将媒体播放到演示中,也可以录制演示中的全部或部分媒体。此模式对分布式教学应用非常有用。会议中的多方可以轮流“按下遥控按钮”。

  • 3、向现有演示中添加媒体:特别是对于实时演示,如果服务器能够通知客户端有新的媒体可用,这是非常有用的。

RTSP 请求可以像 HTTP/1.1 [2] 中那样由代理、隧道和缓存处理。

协议特性:

RTSP 具有以下性质:

  • 1、 可扩展性:可以轻松地向 RTSP 添加新方法和参数。

  • 2、 易于解析:RTSP 可以通过标准的 HTTP 或 MIME 解析器进行解析。

  • 3、 安全性:RTSP 重新利用了网络安全机制。所有 HTTP 认证机制,例如基本认证(RFC 2068 [2,第11.1节])和摘要认证(RFC 2069 [8]),都可以直接应用。此外,还可以复用传输层或网络层的安全机制。

  • 4、 传输独立性:RTSP 可以使用不可靠的数据报协议(UDP)(RFC 768 [9])、可靠的数据报协议(RDP,RFC 1151,未广泛使用 [10])或可靠的流协议(如 TCP,RFC 793 [11]),因为它实现了应用层的可靠性。

  • 5、 多服务器能力:一个展示中的每个媒体流可以驻留在不同的服务器上。客户端会自动与不同的媒体服务器建立多个并发的控制会话。媒体同步在传输层进行。

  • 6、 录制设备的控制:该协议可以控制录制和播放设备,以及能够在两种模式间切换的设备(如‘录像机’)。

  • 7、 流控制与会议初始化的分离:流控制与邀请媒体服务器参加会议是分离的。唯一的要求是会议初始化协议要么提供、要么可以用于创建一个唯一的会议标识符。特别是,SIP [12] 或 H.323 [13] 可以用于邀请服务器加入会议。

  • 8、 适用于专业应用:RTSP 支持通过 SMPTE 时间戳实现帧级精确度,以允许远程数字编辑。

  • 9、 呈现描述中立性:该协议不强制要求特定的呈现描述或元文件格式,并且可以传达要使用的格式类型。然而,呈现描述必须至少包含一个 RTSP URI。

  • 10、 代理和防火墙友好:该协议应能够被应用层和传输层(SOCKS [14])防火墙轻松处理。防火墙可能需要理解 SETUP 方法,以便为 UDP 媒体流打开一个‘通道’

  • 11、HTTP 友好:在合理的情况下,RTSP 复用了 HTTP 的概念,以便可以重用现有的基础设施。该基础设施包括用于将标签与内容关联的 PICS(互联网内容选择平台 [15,16])。然而,RTSP 不仅仅是向 HTTP 添加方法,因为控制连续媒体在大多数情况下需要服务器状态。

  • 12、 适当的服务器控制:如果客户端能够启动流,则必须能够停止流。服务器不应以客户端无法停止流的方式开始向客户端传输流。

  • 13、 传输协商:客户端可以在实际处理连续媒体流之前协商传输方式。

  • 14、 功能协商:如果基本功能被禁用,必须有某种明确的机制让客户端确定哪些方法不会被实现。这使客户端能够呈现适当的用户界面。例如,如果不允许寻址功能,用户界面必须能够禁止移动滑动位置指示器。

  • 15、RTSP 早期的一个要求是多客户端能力。然而,后来确定更好的方法是确保该协议能够轻松扩展到多客户端场景。流标识符可以被多个控制流使用,因此可以实现‘传递遥控器’的功能。该协议不解决多个客户端如何协商访问的问题,这留给‘社交协议’或其他控制机制来处理。

扩展 RTSP:

由于并非所有媒体服务器都具有相同的功能,媒体服务器必然会支持不同的请求集。例如:

  • 1、服务器可能只具备播放功能,因此无需支持 RECORD 请求。

  • 2、如果服务器只支持直播事件,它可能无法进行寻址(绝对定位)。

  • 3、有些服务器可能不支持设置流参数,因此不支持 GET_PARAMETER 和 SET_PARAMETER 请求。

服务器应该实现第12节中描述的所有头字段。

呈现描述的创建者应避免向服务器提出不可能实现的要求。这种情况类似于 HTTP/1.1 [2],其中 [H19.6] 中描述的方法不太可能被所有服务器支持。

RTSP 可以通过三种方式扩展,这些方式按所支持的更改幅度排列如下:

  • 1、现有方法可以通过新参数进行扩展,只要接收方能够安全地忽略这些参数。(这相当于向 HTML 标签添加新参数。)如果客户端在方法扩展不被支持时需要负面确认,则可以在 Require: 字段中添加对应于该扩展的标签(参见第12.32节)。

  • 2、可以添加新方法。如果消息的接收方不理解请求,它会返回错误代码 501(未实现),并且发送方不应再次尝试使用此方法。客户端还可以使用 OPTIONS 方法查询服务器支持的方法。服务器应使用 Public 响应头列出其支持的方法。

  • 3、可以定义协议的新版本,允许几乎所有方面发生变化(除了协议版本号的位置)。

整体操作:

每个展示和媒体流都可以通过一个 RTSP URL 进行标识。展示的整体内容以及构成展示的媒体属性由展示描述文件定义,其格式超出了本规范的范围。展示描述文件可以通过客户端使用 HTTP 或其他方式(如电子邮件)获取,并不一定存储在媒体服务器上。

根据本规范的要求,假设展示描述描述了一个或多个展示,每个展示都有一个共同的时间轴。为简化说明且不失一般性,假设展示描述只包含一个这样的展示。一个展示可以包含多个媒体流。

展示描述文件包含构成展示的媒体流的描述,包括其编码、语言以及其他参数,使客户端能够选择最合适的媒体组合。在这个展示描述中,每个可通过 RTSP 单独控制的媒体流都通过一个 RTSP URL 进行标识,该 URL 指向处理该特定媒体流的媒体服务器,并命名存储在该服务器上的流。多个媒体流可以位于不同的服务器上;例如,音频和视频流可以分布在不同的服务器上以实现负载共享。描述还列举了服务器支持的传输方法。

除了媒体参数之外,还需要确定网络目标地址和端口。可以区分几种操作模式:

  • 1、 单播:媒体传输到 RTSP 请求的来源,端口号由客户端选择。或者,媒体通过与 RTSP 相同的可靠流进行传输。

  • 2、 多播,服务器选择地址:媒体服务器选择多播地址和端口。这是直播或准点播传输的典型情况。

  • 3、 多播,客户端选择地址:如果服务器要参与一个已存在的多播会议,会议描述将提供多播地址、端口和加密密钥,这些是通过本规范范围之外的方法建立的  。

RTSP 状态:

RTSP 控制的流可以通过一个独立于控制通道的协议传输。例如,RTSP 控制可以通过 TCP 连接进行,而数据通过 UDP 传输。因此,即使媒体服务器未收到 RTSP 请求,数据传输仍然会继续。此外,在其生命周期内,单个媒体流可以通过依次在不同的 TCP 连接上发出的 RTSP 请求进行控制。因此,服务器需要维护‘会话状态’以便将 RTSP 请求与流关联。状态转换在第 A 节中描述。

许多 RTSP 方法不影响状态。然而,以下方法在定义服务器上流资源的分配和使用方面起着核心作用:SETUP、PLAY、RECORD、PAUSE 和 TEARDOWN:

  • 1、SETUP:   使服务器为流分配资源并启动 RTSP 会话 .

  • 2、PLAY  and  RECORD:  启动通过 SETUP 分配的流的数据传输。

  • 3、PAUSE:  暂时停止流的传输,但不释放服务器资源。

  • 4、TEARDOWN:  释放与该流相关的资源。RTSP 会话在服务器上终止。

影响状态的 RTSP 方法使用 Session 头字段(第 12.37 节)来标识正在操作状态的 RTSP 会话。服务器在响应 SETUP 请求时生成会话标识符(第 10.4 节)。

与其他协议的关系 :

RTSP 在功能上与 HTTP 有一定的重叠。它也可能与 HTTP 交互,因为对流媒体内容的初始访问通常通过网页进行。当前的协议规范旨在允许在实现 RTSP 的网络服务器和媒体服务器之间设置不同的交接点。例如,展示描述可以通过 HTTP 或 RTSP 获取,这减少了基于网页浏览器场景中的往返次数,同时也支持独立的 RTSP 服务器和客户端,完全不依赖于 HTTP。

然而,RTSP 与 HTTP 在本质上有所不同,因为数据传输是在带外通过不同的协议进行的。HTTP 是一个非对称协议,客户端发出请求,服务器响应。而在 RTSP 中,媒体客户端和媒体服务器都可以发出请求。RTSP 请求也不是无状态的;它们可以设置参数,并在请求被确认后继续控制媒体流。

重用 HTTP 功能在至少两个方面具有优势,分别是安全性和代理。这两者的需求非常相似,因此能够采用 HTTP 在缓存、代理和身份验证方面的工作是非常有价值的。

虽然大多数实时媒体会使用 RTP 作为传输协议,但 RTSP 并不依赖于 RTP。RTSP 假设存在一种展示描述格式,能够表达包含多个媒体流的展示的静态和时间属性。

协议参数:

RTSP Version:

[H3.1] 适用,将 HTTP 替换为 RTSP。

RTSP URL:

'rtsp' 和 'rtspu' 方案用于通过 RTSP 协议引用网络资源。本节定义了 RTSP URL 的特定方案语法和语义 :

rtsp_URL  =   ( "rtsp:" | "rtspu:" )"//" host [ ":" port ] [ abs_path ]host      =   <A legal Internet host domain name of IP address(in dotted decimal form), as defined by Section 2.1of RFC 1123 \cite{rfc1123}>port      =   *DIGIT

abs_path 定义于 [H3.2.1]。

请注意,片段和查询标识符目前没有明确定义,其解释留给 RTSP 服务器处理。

rtsp 方案要求通过可靠的协议(在互联网中为 TCP)发出命令,而 rtspu 方案标识使用不可靠的协议(在互联网中为 UDP)。

如果端口为空或未指定,则假定为端口 554。语义是,所标识的资源可以通过 RTSP 进行控制,服务器在主机的该端口上监听 TCP('rtsp' 方案)连接或 UDP('rtspu' 方案)数据包,该资源的 Request-URI 为 rtsp_URL。

应尽可能避免在 URL 中使用 IP 地址(参见 RFC 1924 [19])。

展示或流通过文本媒体标识符进行标识,使用 URL 的字符集和转义约定 [H3.2](RFC 1738 [20])。URL 可以引用一个流或多个流的集合,即展示。因此,第10节中描述的请求可以应用于整个展示或展示中的单个流。请注意,有些请求方法只能应用于流,不能应用于展示,反之亦然。

例如,RTSP URL:

rtsp://media.example.com:554/twister/audiotrack

标识展示 'twister' 中的音频流,该流可以通过向主机 media.example.com 的 554 端口发出的 RTSP 请求进行控制,RTSP 请求通过 TCP 连接发送。

同样,RTSP URL:

rtsp://media.example.com:554/twister

标识展示 'twister',该展示可能由音频和视频流组成。
这并不意味着存在一种标准方式来通过 URL 引用流。展示描述定义了展示中的层次关系以及各个流的 URL。展示描述可能将一个流命名为 'a.mov',而将整个展示命名为 'b.mov'。

RTSP URL 的路径部分对客户端是不可见的,并且不暗示服务器有任何特定的文件系统结构。这种解耦还允许通过简单地替换 URL 中的方案,将展示描述用于非 RTSP 媒体控制协议。

会议标识符:

会议标识符对 RTSP 是不可见的,并使用标准 URI 编码方法进行编码(即,LWS 使用 % 进行转义)。它们可以包含任何八位字节值。会议标识符必须是全局唯一的。对于 H.323,应使用 conferenceID 值。

conference-id =   1*xchar

会议标识符用于允许 RTSP 会话从媒体服务器参与的多媒体会议中获取参数。这些会议由本规范范围之外的协议创建,例如 H.323 [13] 或 SIP [12]。例如,RTSP 客户端不需要明确提供传输信息,而是请求媒体服务器使用会议描述中的值。

会话标识符:

会话标识符是具有任意长度的不透明字符串。线性空格必须进行 URL 转义。会话标识符必须随机选择,并且长度必须至少为八个八位字节,以增加猜测的难度。(参见第 16 节)。

session-id   =   1*( ALPHA | DIGIT | safe )

SMPTE 相对时间戳:

SMPTE 相对时间戳表示相对于剪辑开始的时间。相对时间戳以 SMPTE 时间码表示,以实现帧级访问精度。时间码的格式为 小时:分钟:秒:帧.子帧,起点为剪辑的开头。默认的 SMPTE 格式为 'SMPTE 30 drop' 格式,帧率为 29.97 帧每秒。其他 SMPTE 码(例如 'SMPTE 25')可以通过使用其他 'SMPTE 时间' 支持。时间值中的 'frames' 字段可以取值 0 到 29。30 帧每秒与 29.97 帧每秒之间的差异通过在每分钟的前两帧索引(值为 00 和 01)丢弃来处理,除了每第十分钟。如果帧值为零,可以省略。子帧以帧的百分之一测量。

5656983e00185f4a6002e9998f9b915e.png

正常播放时间:

正常播放时间 (NPT) 表示流相对于展示开头的绝对位置。时间戳由小数部分组成。小数点左边的部分可以用秒或小时、分钟和秒表示。小数点右边的部分表示秒的小数部分。

展示的开始对应于 0.0 秒。不定义负值。特殊常量 'now' 表示直播事件的当前时刻,仅可用于直播事件。

NPT 的定义与 DSM-CC 中相同:'直观上,NPT 是观看者与节目相关联的时钟。它通常会在录像机上以数字形式显示。当处于正常播放模式(比例 = 1)时,NPT 正常前进;当快速向前扫描时,NPT 以更快的速率前进(高正比例);当反向扫描时,NPT 减少(高负比例);暂停模式下,NPT 固定不动。NPT 在逻辑上相当于 SMPTE 时间码。'" [5]

4f896a8fa92297bd7a905fd13e6eb287.png

该语法符合 ISO 8601 标准。npt-sec 记法优化用于自动生成,npt-hhmmss 记法则便于人类阅读。'now' 常量允许客户端请求接收直播内容,而非存储或延迟播放的版本。这是必要的,因为对于这种情况,绝对时间或零时间都不合适。

绝对时间:

绝对时间以 ISO 8601 时间戳表示,使用协调世界时 (UTC)(格林尼治标准时间)。可以表示秒的小数部分.

8fdc1ad65722a79bc81cb0af114cc27a.png

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

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

相关文章

Xcode报错:Undefined symbols,Linker command failed with exit code1

这种编译报错点击Xcode左侧的小红叉这两行点击没反应&#xff0c;不知道具体报错原因怎么弄&#xff1f; 解决办法&#xff1a; 第一步&#xff1a;点周Xcode左侧工具栏的编译log日志按钮 第二步&#xff1a;第一步点击完Xcode左侧出现了编译历史列表&#xff0c;可以看到有报…

每个程序员都应该了解的硬件知识

作者:shizhaoyang 在追求高效代码的路上,我们不可避免地会遇到代码的性能瓶颈。为了了解、解释一段代码为什么低效,并尝试改进低效的代码,我们总是要了解硬件的工作原理。于是,我们可能会尝试搜索有关某个架构的介绍、一些优化指南或者阅读一些计算机科学的教科书(如:计…

taozige/Java语言的Netty框架+云快充协议1.5+充电桩系统+新能源汽车充电桩系统源码

云快充协议云快充1.5协议云快充1.6云快充协议开源代码云快充底层协议云快充桩直连桩直连协议充电桩协议云快充源码 介绍 云快充协议云快充1.5协议云快充1.6云快充协议开源代码云快充底层协议云快充桩直连桩直连协议充电桩协议云快充源码 软件架构 1、提供云快充底层桩直连协…

Kubernetes--深入理解Service与CoreDNS

文章目录 Service功能Service 的常见使用场景 Service的模式iptablesIPVS Service类型ClusterIPNodePortLoadBalancerExternalName Service的工作机制EndpointEndpoint 与 Service 的关系Endpoint 的工作原理命令操作 CoreDNSCoreDNS 的配置CoreDNS 的典型插件Corefile 示例Cor…

msvcr100.dll丢失的解决方法,如何安全下载 msvcr100.dll 文件:完全指南

在使用 Windows 操作系统的电脑上运行某些程序或游戏时&#xff0c;可能会遇到一个常见的错误消息&#xff0c;提示缺少 msvcr100.dll 文件。这个 DLL 文件是 Microsoft Visual C 2010 Redistributable Package 的一部分&#xff0c;对于运行依赖于 C 的软件来说至关重要。如果…

图文深入理解Oracle DB Scheduler(续)-调度的创建

List item 今天是国庆假期最后一天。窗外&#xff0c;秋雨淅淅沥沥淅淅下个不停。继续深宅家中&#xff0c;闲来无事&#xff0c;就多写几篇博文。 本篇承接前一篇&#xff0c;继续图文深入介绍Oracle DB Scheduler。本篇主要介绍调度的创建。 1. 创建基于时间的作业 • 可以…

嵌入式硬件设计:从原理到实践

嵌入式硬件设计&#xff1a;从原理到实践 嵌入式硬件设计在物联网、智能设备、工业自动化等领域中扮演着至关重要的角色。随着技术的发展&#xff0c;越来越多的设备依赖于嵌入式系统进行实时控制与数据处理。本文将详细介绍嵌入式硬件设计的各个方面&#xff0c;从设计原理到…

<Project-8 pdf2tx-MM> Python Flask应用:在浏览器中翻译PDF文件 NLTK OCR 多线程 指定翻译器 改进后的P6

项目概述 名字解释 缩写&#xff1a; pdf2tx-MM pdf file transfer to text content with Multi-threads and Multi-translators pdf2tx-MM 是一个基于 Flask 的 Web 应用程序&#xff0c;提供将 PDF 文件中的内容提取、翻译并展示。使用者上传 PDF 文件&#xff0c;应用程序…

cenos没有ens33网卡或网卡突然消失解决

目录 一、问题 二、解决方案 情况1:一直没有网卡,需要配置,参考往期: 情况2:之前配置成功过,ens33网卡突然没有了,如下解决方案: 三、内容 四、总结 🧐 问题 今天发现服务器连接不上了,然后输入ifconfig发现是没有网卡了,以下是解决方案: 没有ens33网卡: ✅…

全面讲解C++

数据类型 1.1 基本数据类型 1.1.1 整型&#xff08;Integer Types&#xff09; 整型用于表示整数值&#xff0c;分为以下几种类型&#xff1a; int&#xff1a;标准整数类型&#xff0c;通常为4字节&#xff08;32位&#xff09;。short&#xff1a;短整型&#xff0c;通常…

quic-go源码一---server启动

前言&#xff1a; 走马观花地看了RFC 9000:QUIC: A UDP-Based Multiplexed and Secure Transport&#xff0c; 感受不是那么直观&#xff0c;所以再来看看这个协议的golang语言实现&#xff1a;quic-go,加强学习。 https://quic-go.net/docs/quic/quic-go文档 本篇准备的代…

九寨沟,智慧旅游新名片

九寨沟属于自然类景区&#xff0c;以优美的自然风光取胜&#xff0c;景区文化内涵相对缺失。智慧化和文旅融合是智慧文旅景区的两个必备条件&#xff0c;九寨沟在智慧文旅景区建设过程中&#xff0c;经历了两个阶段&#xff0c;先是从传统景区迈向智慧景区&#xff0c;然后是充…

SpringBoot项目打成jar包,在其他项目中引用

1、首先新建一个SpringBoot工程 记得要将Gradle换成Maven 2、新建一个要引用的方法 3、打包的时候要注意&#xff1a; ① 不能使用springboot项目自带的打包插件进行打包&#xff0c;下面是自带的&#xff1a; ②要换成传统项目的maven打包&#xff0c;如下图&#xff1a; 依…

SQL 干货 | 使用 Having 子句筛选聚合字段

如果你编写 SQL 查询已有一段时间&#xff0c;那么你可能对 WHERE 子句非常熟悉。虽然它对聚合字段没有影响&#xff0c;但有一种方法可以根据聚合值过滤记录&#xff0c;那就是使用 HAVING 子句。本博客将介绍它的工作原理&#xff0c;并提供几个在 SELECT 查询中使用它的示例…

ssm基于java的网上手机销售系统

系统包含&#xff1a;源码论文 所用技术&#xff1a;SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习&#xff0c;获取源码请私聊我 需要定制请私聊 目 录 目 录 III 1 绪论 1 1.1 研究背景 1 1.2 目的和意义 1 1.3 论文结构安排 2 2 相关技术 3 2.1 SSM框…

特定风格素材的网站推荐

在创作短视频或视觉内容时&#xff0c;找到符合主题和风格的素材至关重要。以下推荐的素材网站覆盖了丰富的创意资源库&#xff0c;从情感表达到时代背景、从悬疑到冒险等多种风格&#xff0c;帮助创作者轻松找到心仪的素材。无论你是抖音短视频创作者&#xff0c;还是从事广告…

git gui基本使用

一、图形化界面 二、创建新项目 创建文件&#xff0c;加入暂存区&#xff0c;提交到版本库 三、创建分支 四、合并分支 1.切换至master 五、更新分支 六、解决冲突 修改冲突&#xff0c;加入暂存区&#xff0c;提交到版本库 七、远程创建库 Gitee - 基于 Git 的代码托管和研…

自动化运维:提升效率、降低风险的利器

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

【读书笔记·VLSI电路设计方法解密】问题12:制造MOSFET晶体管的主要工艺步骤是什么

VLSI芯片是在半导体材料上制造的,这种材料的导电性介于绝缘体和导体之间。通过一种称为掺杂的工艺引入杂质,可以改变半导体的电气特性。能够在半导体材料的细小且定义明确的区域内控制导电性,促使了半导体器件的发展。结合更简单的无源元件(电阻、电容和电感),这些器件被…

Open WebUI | 自托管的类 ChatGPT 网站

Open WebUI 是一个扩展性强、功能丰富且用户友好的自托管 WebUI&#xff0c;支持 ChatGPT 网页端的大部分功能&#xff0c;支持各类模型服务&#xff0c;包括 Ollama 和 OpenAI 的 API。该项目在 GitHub 上已有 38k 星&#xff0c;非常受欢迎。 功能介绍 本篇介绍该项目的功能…