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.mzph.cn/news/881744.shtml

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

相关文章

【K8S系列】Kubernetes 集群中的网络常见面试题

在 Kubernetes 面试中,网络是一个重要的主题。理解 Kubernetes 网络模型、服务发现、网络策略等概念对候选人来说至关重要。以下是一些常见的 Kubernetes 网络面试题及其答案,帮助你准备面试。 1. Kubernetes 的网络模型是什么样的? 问题: Kubernetes 的网络模型是怎样的?…

学习Redisson实现分布式锁

官网&#xff1a;https://redisson.org/ 官方文档&#xff1a;https://redisson.org/docs/getting-started/ 官方中文文档&#xff1a;https://github.com/redisson/redisson/wiki/%E7%9B%AE%E5%BD%95 1、引入依赖 <!--redisson--> <dependency><groupId>or…

金融大数据平台总体技术

目录 金融大数据平台应用场景风险管理 场景描述解决方案​​​​​​​市场营销 ​​​​​​​场景描述解决方案​​​​​​​金融大数据信息价值链​​​​​​​金融大数据平台总体目标金融大数据平台功能技术要求​​​​​​​ ​​​​​​​概述数据接入功能要求 ​​…

Git 根据远程分支拉取并创建本地分支

文章目录 1 关联远程仓库2 获取最新更改&#xff0c;并创建分支3 clone时直接指定远程分支 1 关联远程仓库 git remote add remote_repo ssh:git***.git2 获取最新更改&#xff0c;并创建分支 查看本地分支和远程分支 git branch -a获取最新更改 git fetch remote_repo根据…

创建读取比特币1P类型地址

创建读取比特币1P类型地址 比特币的地址类型有多种&#xff0c;其中 P2TR&#xff08;Pay-to-Taproot&#xff09;地址是基于最近的升级&#xff08;Taproot&#xff09;引入的一个新类型。本文将介绍如何创建和读取比特币的 1P 类型地址&#xff0c;主要通过 JavaScript 和相…

谁在窥探我们的网络数据?——在未经许可下获取用户上网数据的情形与维权指南

在数字化时代&#xff0c;网络数据不仅是商业价值的金矿&#xff0c;更是用户隐私的敏感部分。然而&#xff0c;有时用户的上网数据可能会在未经知情与允许的情况下被收集甚至滥用。这篇文章将详细探讨哪些机构在何种情况下可以合法获取用户上网数据、用户如何通过法律手段维护…

吐槽kotlin之垃圾设计

本文重点在于吐槽垃圾设计&#xff0c;基本直只说缺点。 一.没有static关键字 static其实不是很面向对象&#xff0c;但是是很有必要和方便的。 kotlin为了实现java的static功能&#xff0c;必须使用伴生类&#xff0c;一般情况下没啥问题&#xff0c;但是反编译之后的class多…

ES6字符串 全局替换

字符串替换 部分替换replace 全部替换 replaceAll aabbcc.replace(b, _) // aa_bcc如果要替换所有的匹配&#xff0c;不得不使用正则表达式的g修饰符。 aabbcc.replace(/b/g, _) // aa__cc

Github学生包的JetBrains认证过期/idea认证过期如何解决?

官网通过Github更新状态即可JetBrains Account 注意要到邮箱走流程

C++面试速通宝典——26

478. 你了解的网络攻击方式有哪些&#xff1f;SYN攻击的防范方法&#xff1f; 网络攻击方式包括&#xff1a; Dos/DDos攻击&#xff1a;通过大量请求耗尽目标资源。Main-in-the-Middle攻击&#xff1a;攻击者拦截和篡改双方通信。Phishing&#xff1a;通过假冒网站或通信骗取…

SQL Server LocalDB 表数据中文乱码问题

--查看数据库设置 SELECT name, collation_name FROM sys.databases;--出现了The database could not be exclusively locked to perform the operation这个错误&#xff0c; --无法修改字符集为Chinese_PRC_CI_AS&#xff1b;所以需要先设置为单用户模式 ALTER DATABASE MySma…

初试PostgreSQL数据库

文章目录 一、PostgreSQL数据库概述1.1 PostgreSQL的历史1.2 PostgreSQL安装1.3 安装PostgreSQL二、PostgreSQL起步2.1 连接数据库2.1.1 SQL Shell2.1.2 执行SQL语句2.2 pgAdmin 42.2.1 打开pgAdmin 42.2.2 查找数据库2.2.3 打开查询工具2.2.4 执行SQL语句三、实战小结文章目录…

日本AZBIL山武燃烧控制器AUR450C42350D0

顺序定时 (在室温、湿度和额定电压下)火焰电压输出范围火焰电压范围 (在额定电压、室温和湿度下)推荐火焰电压额定电源电压允许电压范围功耗介电强度页序&#xff0c;如果发生火修非循环操作629279484士1秒&#xff0c;8士2秒可根据型号选择)仅限《行员7.52.5秒主要审判73秒火老…

大一计算机课程之线性代数

《大一计算机课程之线性代数》 在大一的计算机课程中&#xff0c;线性代数是一门极为重要的基础学科&#xff0c;它就像一把神奇的钥匙&#xff0c;为计算机科学领域的诸多方面开启了智慧之门。 线性代数主要研究线性方程组、向量空间、线性变换等内容。对于计算机专业的学生…

主动降噪技术:原理、方法与应用的深度解析

目录 一、主动降噪的原理二、主动降噪的技术分类三、主动降噪中的核心算法四、主动降噪的应用领域五、主动降噪技术的挑战与未来发展六、结论 主动降噪&#xff08;Active Noise Cancellation&#xff0c;ANC&#xff09;是当前音频技术中的重要应用&#xff0c;广泛用于耳机、…

HCIP-HarmonyOS Application Developer 习题(九)

(多选) 1、HarmonyOS多窗口交互能力提供了以下哪几种交互方式&#xff1f; A. 全局消息通知 B.平行视界 C.悬浮窗 D.分屏 答案&#xff1a;BCD 分析&#xff1a;系统提供了悬浮窗、分屏、平行视界三种多窗口交互&#xff0c;为用户在大屏幕设备上的多任务并行、便捷的临时任务…

【已解决】黑群晖绕过双重认证(2FA)登录(终极方案)

黑群晖绕过双重认证&#xff08;2FA&#xff09;登录&#xff08;终极方案&#xff09; 黑裙版本7.x&#xff0c;之前设置了双重认证&#xff0c;但是由于更换设备导致卡在2FA登录界面&#xff0c;无法登录&#xff0c;之前也没开SSH&#xff0c;网上找了很多方法&#xff0c;…

LeetCode322:零钱兑换

题目链接&#xff1a;322. 零钱兑换 - 力扣&#xff08;LeetCode&#xff09; 代码如下 class Solution { public:int coinChange(vector<int>& coins, int amount) {vector<int> dp(amount 1, INT_MAX);dp[0] 0;for(int i 0; i < coins.size(); i){fo…

程序员必读:精通ER图设计,解锁数据库高效构建秘籍

在信息技术的浩瀚星空中&#xff0c;数据库如同星辰般璀璨&#xff0c;而ER图&#xff08;Entity-Relationship Diagram&#xff0c;实体-关系图&#xff09;则是那把引领我们穿越数据迷雾的钥匙。对于每一位程序员而言&#xff0c;掌握ER图设计不仅是数据库设计的基础&#xf…

Flutter 3.24 发布:GPU模块及多视图嵌入功能

Flutter 3.24 发布&#xff1a;GPU模块及多视图嵌入功能 Flutter 3.24 带来了许多新功能和改进&#xff0c;让开发应用程序变得更加容易和有趣。这个版本重点展示了 Flutter GPU 的预览功能&#xff0c;让应用程序可以直接使用高级图形和 3D 场景功能。 此外&#xff0c;网页…