live555学习之二RTSP协议说明

2023-11-13

RTSP协议 是一种基于C/S架构的并用于双方通信约定的流媒体协议。全称实时流协议(Real Time Streaming Protocol). 集成了网络实时控制、数据传输接收功能。客户端遵循协议发送指令控制多媒体的资源的功能如播放、暂停、停止、获取多媒体信息熟悉功能。

一:框架协议层次

RTSP协议遵循TCP/IP协议, 从协议分层模型方面来讲TCP/IP由四个层次组成:网络接口层、网络层、传输层、应用层。其和ISO 七层模型的关系如下:

TCP/IP结构对应OSI结构

TCP/IP

OSI

应用层

应用层

表示层

会话层

主机到主机层(TCP)(又称传输层)

传输层

网络层(IP)(又称互联层)

网络层

网络接口层(又称链路层)

数据链路层

物理层


详情可以参考 百科解释

https://baike.so.com/doc/2883582-3043043.html#2883582-3043043-1_1


RTSP 是一种基于文本的应用层协议,RTSP 本身的处于应用层,本身用于信令的交互。

其和TCP/IP 和ISO 七层的关系如下


二:协议通信流程

RTSP 遵循C/S的架构,客户端主动按照TCP三次模式协议规范连接服务器, 实现查询,获取多媒体信息,连接等功能。依据rfc2326的第十章的规定, RTSP 本身功能上包含如下的功能

method 			direction 	object 		requirement
DESCRIBE 		C->S 		P,S 		recommended
ANNOUNCE 		C->S, S->C 	P,S 		optional
GET_PARAMETER 		C->S, S->C 	P,S 		optional
OPTIONS 		C->S, S->C 	P,S 		required
							(S->C: optional)
PAUSE 			C->S 		P,		Srecommended
PLAY 			C->S 		P,		Srequired
RECORD 			C->S 		P,		Soptional
REDIRECT 		S->C 		P,S 		optional
SETUP 			C->S 				Srequired
SET_PARAMETER 		C->S, S->C 	P,S 		optional
TEARDOWN 		C->S 		P,S 		required




P: 呈现(Presentation),S:流(Stream)

详细描述如下

2.1RTSP的主要方法:

方法 方向 对象 要求 含义
DESCRIBE C->S P,S 推荐

检查演示或媒体对象的描述,

也允许使用接收头指定用户理解的描述格式。

DESCRIBE的答复-响应组成媒体RTSP初始阶段

ANNOUNCE C->S S->C P,S 可选

当从用户发往服务器时,

ANNOUNCE将请求URL识别的演示或媒体对象描述发送给服务器; 

反之,ANNOUNCE实时更新连接描述。

如新媒体流加入演示,整个演示描述再次发送,

而不仅仅是附加组件,使组件能被删除

GET_PARAMETER C->S S->C P,S 可选

GET_PARAMETER

请求检查RUL指定的演示与媒体的参数值。

没有实体体时,

GET_PARAMETER也许能用来测试用户与服务器的连通情况

OPTIONS C->S S->C P,S 要求

可在任意时刻发出OPTIONS请求,

如用户打算尝试非标准请求,并不影响服务器状态

PAUSE C->S P,S 推荐

PAUSE请求引起流发送临时中断。

如请求URL命名一个流,仅回放和记录被停止;

如请求URL命名一个演示或流组,

演示或组中所有当前活动的流发送都停止。

恢复回放或记录后,必须维持同步。

在SETUP消息中连接头超时参数所指定时段期间被暂停后,

尽管服务器可能关闭连接并释放资源,但服务器资源会被预订

PLAY C->S P,S 要求

PLAY告诉服务器以SETUP指定的机制开始发送数据;

直到一些SETUP请求被成功响应,客户端才可发布PLAY请求。

PLAY请求将正常播放时间设置在所指定范围的起始处,

发送流数据直到范围的结束处。

PLAY请求可排成队列,服务器将PLAY请求排成队列,顺序执行

RECORD C->S P,S 可选

该方法根据演示描述初始化媒体数据记录范围,

时标反映开始和结束时间;

如没有给出时间范围,使用演示描述提供的开始和结束时间。

如连接已经启动,立即开始记录,

服务器数据请求URL或其他URL决定是否存储记录的数据;

如服务器没有使用URL请求,响应应为201(创建),

并包含描述请求状态和参考新资源的实体与位置头。

支持现场演示记录的媒体服务器必须支持时钟范围格式,

smpte格式没有意义

REDIRECT S->C P,S 可选

重定向请求通知客户端连接到另一服务器地址

。它包含强制头地址,指示客户端发布URL请求;

也可能包括参数范围,以指明重定向何时生效。

若客户端要继续发送或接收URL媒体,

客户端必须对当前连接发送TEARDOWN请求,

而对指定主执新连接发送SETUP请求

SETUP C->S S 要求

对URL的SETUP请求指定用于流媒体的传输机制。

客户端对正播放的流发布一个SETUP请求,

以改变服务器允许的传输参数。

如不允许这样做,响应错误为"455 Method Not Valid In This State”。

为了透过防火墙,客户端必须指明传输参数,

即使对这些参数没有影响

SET_PARAMETER C->S S->C P,S 可选

请求设置演示或URL指定流的参数值。

请求仅应包含单个参数,

允许客户端决定某个特殊请求为何失败。

如请求包含多个参数,所有参数可成功设置,

服务器必须只对该请求起作用。

服务器必须允许参数可重复设置成同一值,但不让改变参数值。

注意:媒体流传输参数必须用SETUP命令设置。

将设置传输参数限制为SETUP有利于防火墙。

将参数划分成规则排列形式,结果有更多有意义的错误指示

TEARDOWN C->S P,S 要求

TEARDOWN请求停止给定URL流发送,释放相关资源

。如URL是此演示URL,任何RTSP连接标识不再有效。

除非全部传输参数是连接描述定义的,

SETUP请求必须在连接可再次播放前发布                                        

注:P---演示,C---客户端,S---服务器, S(对象栏)---流

2.2  一次流程的过程如下

1.客户端按照协议标准 发送OPTIONS 获取服务器的功能信息。

2.服务器 回复OPTIONS 告知rtsp服务器提供的服务功能。

3.客户端 发送DESCRIBE针对一个多媒体文件的描述请求

4.服务器 回复  告知该文件的SDP 描述信息。

5.客户端 发送  SETUP 命令 要求服务端建立改文件的传输机制。

6.服务器 回复   告知OK。

7.客户端 发送  PLAY 执行播放功能

8.服务器 回复告知OK.

 

流程图如下


三:协议信息语法单位

RTSP 有着自身规定的语法结构组成。

3.1 RTSP URL的语法结构

不管我们是用VLC还是其他自己的开发的客户端去观看流媒体, 总是要遵循RTSP的 URL语法结构规范。详情参见RFC2326的第三节

3 Protocol Parameters

rtsp_URL = ( "rtsp:" | "rtspu:" )"//" host [ ":" port ] [ abs_path ]


The "rtsp" and "rtspu" schemes are used to refer to network resources via the RTSP protocol. This section defines the scheme-specific
syntax and semantics for RTSP URLs.

RTSP 或者RTSPU 表示遵循RTSP的协议规范。


host = <A legal Internet host domain name of IP address(in dotted decimal form), as defined by Section 2.1of RFC 1123 \cite{rfc1123}>

host 表示服务器的IP地址


port = *DIGIT

port 表示端口号


abs_path is defined in [H3.2.1].

abs_path 表示RTSPServer端的流媒体文件的标记描述


比如:rtsp://192.168.11.100:8554/h264ESVideoTest

表示 按照RTSP协议请求播放IP地址为192.168.11.100 端口号为8554的h264ESVideoTest文件


3.2 RTSP 报文数据语法结构

RTSP 采用模仿HTTP基于文本的形式,数据+CRLF的组合构成每一行信息。针对发送的方向,又分为如下的两种类型。

请求报文,请求报文是客户端发出,发向服务端,请求实现一些功能或者查询信息。


根据语法 RTSP的报文由三部分构成,开始行、首部行和实体主体


开始行(请求端就是请求行):

Method 空格 Request-URI 空格 RTSP-Version CRLF
其中

RTSP请求报文的方法包括:OPTIONS、DESCRIBE、SETUP、TEARDOWN、PLAY、PAUSE、GET_PARAMETER和SET_PARAMETER。

URL:表示目标的IP地址+端口号+流媒体文件的标记描述

RTSP-Version: 表示 RTSP的协议版本

例如

OPTIONS rtsp://192.168.11.100:8554/h264ESVideoTest RTSP/1.0



首部行:首部行包含的信息导致本身往往有多行

“首部字段名”   +   “:”  +  “VALU值” +  “CRLF”   组成
首部字段名 ( Require-Header)包括如下的功能

request-header =Accept | 

Accept-Encoding | 

Accept-Language | 

Authorization | 

Proxy-Require | 

User-Agent | 

Range | 

Scale | 

Session | 

Speed | 

Transport 

例子如下:

CSeq: 2
User-Agent: LibVLC/2.2.6 (LIVE555 Streaming Media v2016.02.22)


实体主体

实体往往不用

因此 请求报文整体上如下图


响应报文,相应报文是服务端发出, 发向客户端,响应客户端请求的功能。

同发送报文,相应报文也是有三部分组成


开始行(请求端就是请求行):

Method 空格 Request-URI 空格 RTSP-Version CRLF
其中

RTSP请求报文的方法包括:OPTIONS、DESCRIBE、SETUP、TEARDOWN、PLAY、PAUSE、GET_PARAMETER和SET_PARAMETER。

URL:表示目标的IP地址+端口号+流媒体文件的标记描述

RTSP-Version: 表示 RTSP的协议版本

例如

Response: RTSP/1.0 200 OK\r\n

首部行:首部行包含的信息导致本身往往有多行

“首部字段名”   +   “:”  +  “VALU值” +  “CRLF”   组成
首部字段名 ( Response-Header)包括如下的功能

Response-header 	=	Location
  			|	Proxy-Authenticate
  			|	Public
  			|	Retry-After
  			|	Server
  			|	Vary
  			|	WWW-Authenticate
例子如下:

CSeq: 2
Date: Mon, Sep 18 2017 00:02:36 GMT
Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN,PLAY, PAUSE, GET_PARAMETER, SET_PARAMETER

实体主体

实体往往不用

因此 响应报文整体上如下图


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

live555学习之二RTSP协议说明 的相关文章

  • [1228]Python prometheus-client使用方式

    文章目录 安装 prometheus client 基本使用介绍 应用实例 收集 CPU 使用率指标 收集自定义指标 Python封装 调用 github https github com prometheus client python
  • MkDocs全文搜索中的中文支持

    在前一篇MkDocs全文搜索中使用模糊匹配中已经实现了模糊匹配 这次通过lunr languages来实现lunr对中文搜索的支持 MkDocs版本 v0 16 3 lunr js版本2 0 3 lunr languages版本1 0 0
  • Linux配置tomcat

    Linux配置tomcat 1 下载tomcat tomcat官网 https tomcat apache org 2 上传tomcat到Linux 将下载的tomcat上传到linux的并解压 3 运行tomcat 启动tomcat之前要
  • C#中的拆装箱,与object类型紧密相关

    class Program static void Main string args Console WriteLine Hello World int a 1 装箱操作 比较消耗性能 最 box 值类型隐式转换为object类型或由此值类
  • Oracle字符串拆分

    文章目录 Oracle字符串拆分 1 使用regexp substr 函数 1 1 拆分aaa bbb ccc 1 2 拆分aaa bbb ccc 1 3 level作用 2 在oracle中实现MySQL的find in set 函数 2
  • shell脚本循环插入参数到另外一个shell脚本

    bin bash cd var lib hadoop hdfs reflush array 0 1 2 for i 0 i lt array i do startKey array i let n i 1 let m array 如果当前值
  • 【SSA-LSTM】基于麻雀算法优化LSTM 模型预测研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 1 1 麻雀搜索算法 1 2 长短期记忆神经网络 2 运行结果 3 参考文献 4 Matlab代码实现 1
  • CryptoPP的 Timer算法的使用

    密码学库Cryptopp不仅给提供了丰富的密码学算法 而且还包含了一些有用的工具类算法 比如本次要讲到的Timer 使用该类定义的对象 可以在程序中统计某一段代码的运行时间 前面我们在讲解随机数发生器的使用的时候 在程序中用到统计产生1G
  • 分布式日志系统的设计和实践

    什么是日志 日志是一种按照时间顺序存储记录的数据 它记录了什么时间发生了什么事情 提供精确的系统记录 根据日志信息可以定位到错误详情和根源 按照APM概念的定义 日志的特点是描述一些离散的 不连续的 事件 日志是按照错误级别分级的 常见的错
  • matlab 逆否,逆否命题与反证法

    在原命题 逆命题 否命题与逆否命题中 原命题与逆否命题等价 同真同假 所以证明一个命题成立可以去证明它的逆否命题成立 即先否定结论 在这个否定的结论下 去推出原来的条件的否定成立 例题一 1 判断命题 如果 x y neq 3 那么 x n
  • Python使用xlwt和xlrd读写excel文件

    Python使用xlwt和xlrd读写excel文件 xlwt和xlrd是两个相互配套的模块 在Python中 用于将数据写入Excel文件和读取Excel文件的数据 从字面即可看出xlwt是对xls格式的文件进行write xlrd是对x
  • nvidia-docker踩坑记录

    docker nvidia docker配置镜像创建容器 众所周知 想要在容器中使用nvidia的显卡 需要使用nvidia docker命令创建容器 环境说明 服务器端为Ubuntu18 04离线 nvidia smi正常使用 CUDA版
  • APIPOST入门+认识接口(前后端分离)

    APIPOST入门 认识接口 前后端分离 文章目录 APIPOST入门 认识接口 前后端分离 啥是 API 接口 笑话小案例 编写mock数据 如何解决跨域问题 后续要解决的 实战二维码 驾照题库实战项目 自己写一个接口 2 post和ge
  • 6:sort_values,loc,corr数据筛选,绘图

    一 使用sort values 对某一列 进行从小到大或者从大到小的排序 1 对一列进行操作 import pandas as pd df pd read excel r C Users 73575 Desktop 北京新发地菜价 xlsx
  • 整型的提升和截断详解(看完包会)

    所有常量值 在没有后缀得情况下 默认是4个字节 int型 将一个int型值赋给char型变量时 会发生整形截断 按存储顺序截断 先到先截 一个char截断一个字节即8个bit位 将char类型值按有常量值 在没有后缀得情况下 默认是4个字节
  • linux常用库 对应函数

    1 include

随机推荐

  • Vue在线引入地址

    Vue在线引入地址 vue2 vue3 CodePan在线运行ElementUI时添加的JS及CSS引用地址 Vue https cdn jsdelivr net npm vue 2 dist vue
  • 【Flink系列1】flink与spark的区别

    Flink简介 spark基本架构 flink基本架构 Spark提出的最主要抽象概念是弹性分布式数据集 RDD flink支持增量迭代计算 基于流执行引擎 Flink提供了诸多更高抽象层的API以方便用户编写分布式任务 1 DataSet
  • RabbitMQ镜像集群搭建

    RabbitMQ镜像集群搭建 消息队列 在消息的传输过程中保存消息的容器 MQ角色 Broker 即消息队列服务器实体 Exchange 消息交换机 它指定消息按什么规则 路由到哪个队列 Queue 消息队列载体 每个消息都会被投入到一个或
  • 基于SpringBoot并整合MyBatis和Thymeleaf模板引擎开发的图书管理系统

    先展示下前端页面 登录页面 用户注册页面 一 管理员相关页面以及功能 管理员主页信息以及左侧导航栏 页头可查看当前管理员的信息
  • Unity Application.LoadLevel() 已过时

    解决办法 使用EditorSceneManager方法 https blog csdn net shenqiankk article details 100137502
  • 大数据技术——Scala语言基础

    Scala基础知识 控制结构 if条件表达式 有一点与Java不同的是 Scala中的if表达式的值可以赋值给变量 while循环 for循环 基本语法 其中 变量 lt 表达式 被称为 生成器 generator 守卫 guard 的表达
  • finereport连接oracle_FINEREPORT连接远程ORACLE数据库

    有如下错误提示 SEVERE CannotcreatePoolableConnectionFactory Listenerrefusedtheconnectionwiththefollowingerror ORA 12505 TNS lis
  • python小技巧大应用--基础实用漂亮界面(无边框,圆角,可拖拽)

    这回要实现一个漂亮的基础界面 要具有如下特色 无边框 圆角 漂亮的背景 可拖拽移动 具有最小化 关闭按钮 界面与代码分离 支持qss 先展示一下最后的效果 那就开始工作吧 1 通过Qt Designer实现界面设计 将设计好的界面保存为di
  • 【数据结构】设计循环队列详解

    我的个人主页 我们登上并非我们所选择的舞台 演出并非我们所选择的剧本 Enchiridion 设计循环队列 前言 1 什么是循环队列 2 循环队列的设计 2 1 MyCircularQueue k 实现 2 2 isEmpty 和 isFu
  • usb 命名乱的一批,怎么破

    USB 的命名真是乱的一批 命名里 一股浓浓的 印度风扑面而来 我想给 iso 文件加个驱动直接跪了 被绕进去了 幸运的是速度没乱 以下用速度整理该文档 USB2 0 时代 12 mbps usb1 0 480 mbps usb2 0 US
  • 什么是Restful?

    REST 简介 REST 是英文 Representational State Transfer 的缩写 有中文翻译为 具象状态传输 REST 这个术语是由 Roy Fielding 在他的博士论文 Architectural Styles
  • 大数据课程最后任务-hive处理数据

    好的这是第五次也就是不加额外挑战任务的最后任务 基本过程来自于厦门大学的hive教程 主要是hive处理20w的数据 两部分 一部分是安装 来自http dblab xmu edu cn blog 959 一步分是运行http dblab
  • Yii Framework 开发教程(34) Zii组件-AutoComplete示例

    CJuiAutoComplete 在用户输入时可以根据用户输入的前几个字符自动提示用户可以输入的文字 它封装了 JUI autocomplete插件 基本用法如下 php view plain copy print
  • vue3优雅实现移动端登录注册模块

    前言 近期开发的移动端项目直接上了vue3 新特性composition api确实带来了全新的开发体验 开发者在使用这些特性时可以将高耦合的状态和方法放在一起统一管理 并能视具体情况将高度复用的逻辑代码单独封装起来 这对提升整体代码架构的
  • VUE element-ui 之table表格表头插入输入框

    很简单
  • 手把手教你安装RabbitMQ(基于CentOS7系统)

    RabbitMQ简介及安装 什么是RabbitMQ RabbitMQ的特点 安装 安装Erlang 配置Erlang环境变量 验证环境 安装RabbitMQ 启动RabbitMQ 添加用户 访问 什么是RabbitMQ RabbitMQ是一
  • 财富自由?五年后为什么他月入十万,而我月入六千

    最近无论是在社群里还是 各种付费平台上 都能看到闪闪发光的一个词 财富自由 我好奇地去搜索了一下百度百科 财富自由是指 你无需为生活开销而努力 为钱工作的状态 简单的说 你的资产产生的被动收入 至少等于或超过你的日常开支 这是我们大多数人最
  • int、float和double的字节及位码

    int类型 4字节32位 第一位 符号位 2 9位 阶位 指数位 10 32位 普通数值位 0 00000000 00000000000000000000001 flaot类型 4字节32位 第一位 符号位 2 9位 阶位 指数位 10 3
  • 神经网络优化(二) - 激活函数和损失函数

    1 神经网络中的激活函数activation function 1 1 引入激活函数概念 神经网络的基本构成单元是神经元 在搭建神经网络一文中使用的神经元模型为 这个神经元模型是较为简化的基本神经元模型 还有一种理论模型包含有激活函数和偏置
  • live555学习之二RTSP协议说明

    RTSP协议 是一种基于C S架构的并用于双方通信约定的流媒体协议 全称实时流协议 Real Time Streaming Protocol 集成了网络实时控制 数据传输接收功能 客户端遵循协议发送指令控制多媒体的资源的功能如播放 暂停 停