浅尝RTSP

news2024/12/27 13:34:42

RTSP (real time streaming protocol) RTC2326

RTSP 实时流传输协议,是TCP/IP 协议体系中的一个应用层协议,由哥伦比亚大学, 网景和realnetworks公司提交的IETF RTC 标准,该协议定义了一对多应用程序如何有效地通过IP网络传送多媒体数据。
RTSP在体系结构上位于 rtp 和 rtcp 之上,它使用TCP或UDP完成数据传输。

rtsp 协议层级

HTTP 与 RTSP 相比,http 请求由客户机发出,服务端做出响应;使用RTSP时,客户机和服务器都可以发出请求,rtsp是双向的。
rtsp是用来控制音频或视频的多媒体串流协议,并允许同时多个串流需求控制,传输时所用的网络通讯协议并不在其定义的范围内,服务端可以自行选择使用tcp或者udp 来传送串流内容,它的语法和运作跟http 1.1类似,但并不强调时间同步,所以比较能容忍网络延迟。而前面提到的允许同时多个串流需求控制,除了可以降低服务器端的网络用量,更进而支持多方视讯会议。
SDP (session description protocol) 会话描述协议
rtp realtime transfer protocol 实时传输协议
用来控制声音或视频的多媒体串流协议,RTSP提供了一个 可扩展框架,使实时数据,如音频与视频的受控,点播成为可能。
媒体数据一般使用rtp rtcp协议
一般使用udp作为传输层。
适合IPTV场景。
数据源包括现场数据与存储在文件中的数据。
该协议的目的在于控制多个数据发送连接,为发送选择通道,如udp,多播udp与tcp提供途径,并为选择基于rtp上发送机制提供方法,传输时所用的网络通讯协定,并不在其定义的范围内,服务器端可以自行选择使用tcp或udp来传输串流内容,比较能容忍网络延迟。

简介

rtsp是基于文本的协议,采用iso10646字符集,使用utf-8编码(rfc2279)方案。
行以CRLF中断(\r\n:10,13:ox0a,0x0d),包括消息类型,消息头,消息体和消息长。
但接收者本身可将CR和LF解释成行终止符。基于文本的协议使其以自描述方式增加可选参数更容易,接口采用sdp作为描述语言。
rtsp协议支持
rtsp建立并控制一个或几个时间同步的连续流媒体,尽管连续媒体流与控制流交换是可能的,通常它本身并不发送连续流,换言之,rtsp充当多媒体服务器的网络远程控制。
rtsp连接没有绑定到传输层连接,如tcp。在rtsp连接期间。rtsp用户可打开或关闭多个服务器的可传输连接以发出rtsp请求。
此外可使用无连接传输协议,如udp。
rtsp流控制的流可能用到rtp,但rtsp操作不依赖用于携带连续流媒体的传输机制。

协议支持的操作如下:
rtsp协议支持

  1. 从媒体服务器上检索媒体: 用户可通过http或其他方法提交一个演示描述。如演示是组播,演示式就包含用于连续媒体的组播地址和端口。如演示仅通过单播发送给用户,用户为了安全应提供目的端口
  2. 媒体服务器邀请进入会议:媒体服务器可被邀请参加正进行的会议,或回放媒体,或记录其中一部分,或全部。这种模式在分布式教育应用上很有用,会议中几方可轮流按远程控制按钮。
  3. 将媒体加到现成讲座中:如服务器告诉用户可获得附加媒体内容,对现场讲座显得尤其有用。如HTTP/1.1中类似,rtsp请求可由代理,通道与缓存处理。

协议格式

请求消息

请求消息
请求消息由请求行,标题行中的各种标题域和主体实体组成。
请求行和标题行由ASCII 字符组成。
请求消息格式
其中方法包括option describe setup play pause teardown等
url是接收方的地址,例如rtsp://192.168.0.1/video.264
rtsp 版本一般都是 rtsp/1.0
每行后面的CRLF 表示回车换行,需求接收端有相应的解析,最后一个消息头需要有两个CRLF
消息是可选的,有的请求消息并不带消息体

应答消息

应答消息
rtsp版本一般都是 RTSP/1.0
状态码是一个数值,用于表示请求消息的执行结果,比如200表示成功。
短语是状态码对应的文本解释。

交互过程

rtsp交互过程
(1)OPTION
client —> server
c—>s
客户端向服务器端发送option,请求可用的方法。
s—>c
服务端回复客户端,消息中包含当前可用的方法。
option

(2) DESCRIBE

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

在这里插入图片描述
(3)SETUP
为音视频数据的传输准备通道
c—>s
客户端向服务器端发起建立连接请求,请求建立会话连接,准备开始接受音视频数据,请求信息描述了期望音视频数据包基于udp还是tcp传输,指定rtp rtcp端口,以及是单播还是组播等信息。
s—>c
服务器端收到客户端请求后,根据客户端请求的端口号确定发送控制数据的端口以及音视频数据的端口

setup
(4)PLAY
c—>s
客户端向服务器请求播放媒体
s—>c
服务器回复客户端200 ok 之后开始通过setup 中指定的端口开始发送数据
在这里插入图片描述
(5)TEARDOWN
c—>s
结束播放时,客户端向服务器发起结束请求
s—>c
服务端收到消息后,向客户端发送200 ok,之后断开连接

rtsp抓包附件

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

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

相关文章

二分搜索树层序遍历

二分搜索树的层序遍历,即逐层进行遍历,即将每层的节点存在队列当中,然后进行出队(取出节点)和入队(存入下一层的节点)的操作,以此达到遍历的目的。 通过引入一个队列来支撑层序遍历…

【SpringBoot】整合Mybatis-Plus并输出SQL日志

目录 本地开发环境说明pom.xml主要依赖application.yml主要配置MapperScan注解使用说明实体类示例Mapper接口示例Service接口示例Service接口实现类示例单元测试示例打印SQL日志使用slf4j打印SQL 总结 本地开发环境说明 开发依赖版本Spring Boot3.0.6Mybatis-Plus3.5.3.1JDK20…

git客户端的使用

1. git 分布式版本控制工具。 具有中央服务器仓库和本地仓库。 客户端下载:GitHub Desktop | Simple collaboration from your desktop 2. git的使用 2.1 修改操作本地仓库的用户信息 2.2 创建本地仓库 左上角:File - New repository 本地的两个仓库…

chatgpt赋能python:Python中4.5/2:浮点数除法的谬误

Python中4.5/2:浮点数除法的谬误 在Python中,当我们尝试对两个整数进行除法运算时,通常可以得到预期的正确结果。但是,当我们的被除数或者除数是浮点数时,可能会遇到令人疑惑的结果。 例如,执行4.5/2的计…

chatgpt赋能python:Python中Delete的用法及其重要性

Python中Delete的用法及其重要性 Python是一种强大的编程语言,它提供了许多强大的工具和API,帮助程序员轻松编写高效的代码。其中,Delete是Python语言中一个非常重要的关键字,用于删除对象和变量。 Delete的用法 Delete作为Pyt…

chatgpt赋能python:Python中IDLE怎么执行代码

Python中IDLE怎么执行代码 介绍 作为一种非常流行的编程语言,Python可以编写各种应用程序,从自动化脚本到网站后端。无论您是一个新手还是一个经验丰富的程序员,您都可能会使用Python编程语言来完成您的工作。 一个好的Python IDE可以大大…

sql的各种排序(order by加asc或者desc、order by加field()加asc或者desc)

sql的各种排序(order by加asc或者desc、order by加field()加asc或者desc) 1.单字段排序; 【order by】排序:order by后面跟着的字段就是数据的排序字段; (1)升序排序; 举例&#x…

c++—封装:构造函数、析构函数、成员操作

1. 封装的主要目的是解决代码的维护性问题,经过封装的函数代码独立性高; 2. 封装的演变历史,以栈为例子介绍: ①成员(top、data[ ])都在main函数里,动作方法(push、pop)…

力扣sql中等篇练习(二十八)

力扣sql中等篇练习(二十八) 1 每个城市最高气温的第一天 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # Write your MySQL query statement below SELECT w.city_id,MIN(w.day) day,w.degree FROM Weather w INNER JOIN (SELECT city_id,MAX(degr…

chatgpt赋能python:Python中keys的概述

Python中keys的概述 在Python中,字典(dictionary)是一种非常常见的数据结构,它由一系列键(keys)和对应值(values)组成。键是唯一的,而值可以重复。在字典中,…

Lucene基础学习

一、基础知识 1.Lucene简介 2.入门实例 3.内建Query对象 4.分析器Analyzer 5.Query Parser 6.索引 7.排序 8.过滤 9.概念简介 10.Lucene入门实例 二、Lucene的基础 三、索引建立 1.lucene索引_创建_域选项 2.lucene索引_的删除和更新 3.lucene索引_加权操作和Luke的简单演示…

msvcp140.dll丢失怎么办?msvcp140.dll重新安装的解决方法

msvcp140.dll是微软编译器系统中的一个动态链接库文件,它存储了许多的代码和数据,能帮助计算机程序正常运行。当系统中出现了msvcp140.dll丢失的情况时,则会出现程序无法正常运行的错误。这篇文章将为大家介绍如何解决msvcp140.dll丢失的问题…

WookTeam是一款轻量级的开源在线团队协作工具

产品介绍 English Documentation wookteam 是一款轻量级的在线团队协作工具,提供各类文档工具、在线思维导图、在线流程图、项目管理、任务分发,知识库管理等工具。wookteam 支持团队在线聊天沟通,订阅任务动态实时推送。wookteam 全部开源…

JavaScript实现用while语句来计算1-10的和的代码

以下为实现用while语句来计算1-10的和的程序代码和运行截图 目录 前言 一、用while语句来计算1-10的和 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 前言 1.若有选择,您可以在目录里进行快速查找; 2.本博文代码可以根据…

chatgpt赋能python:Python中的Dayup:如何用编程实现日益进步?

Python中的Dayup:如何用编程实现日益进步? 在Python编程语言中,Dayup是一个非常受欢迎的概念,它代表了一种积极向上的生活态度,即每天都在不断进步。这一概念起源于一位中国作家的作品,被广泛应用于生活、…

哈希表(模拟散列表 字符串哈希)

目录 一、哈希表的概念二、模拟散列表题目代码实现①拉链法②开放寻址法 三、字符串哈希题目思路注意点代码实现 一、哈希表的概念 哈希表(又称为散列表),将一个比较大的值域映射到一个小的范围。 例如有哈希函数 h(x),将区间 [ …

点到直线距离

点到直线距离最小二乘解释 推倒部分 形象描述是C到AB距离最短,也就是CD最短用数学语言描述是 m i n ∣ ∣ ( B − A ) λ A − C ∣ ∣ min||(B-A) \lambda A - C || min∣∣(B−A)λA−C∣∣ 其中 D ( B − A ) λ A D (B-A) \lambda A D(B−A)λA,其实本质…

c++—断言、异常

一、 断言,主要用于在函数入口处进行参数检查,是否符合参数设置要求; (1)true:继续执行;false:终止运行; (2)特点:在程序运行时才能起…

chatgpt赋能python:Python中Decimal模块的使用

Python中Decimal模块的使用 在Python中,用来处理浮点数的内置浮点数类型float,其精度受限于机器上的位数和操作系统的规范。当需要比float类型更高精度的计算时,Python提供了decimal模块。 Decimal模块的导入 from decimal import Decimal…

chatgpt赋能python:Python中的Curdir:介绍与使用

Python中的Curdir: 介绍与使用 Python中的Curdir是一个重要的概念,它表示当前工作目录。Curdir是操作系统中的概念,它在Python中也有着广泛的应用。Curdir不仅仅是一个字符串常量,还是一个有用的属性,通过它我们可以更方便地进行…