【音视频 | RTSP】RTSP协议详解 及 抓包例子解析

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
🤣本文内容🤣:🍭介绍 🍭
😎金句分享😎:🍭你不能选择最好的,但最好的会来选择你——泰戈尔🍭
⏰发布时间⏰:

本文未经允许,不得转发!!!

目录

  • 🎄一、概述
  • 🎄二、RTSP 方法
  • 🎄三、RTSP的请求与响应
    • 3.1 、RTSP 的 请求报文
    • 3.2 、RTSP 的 响应报文
  • 🎄四
  • 🎄五
  • 🎄六、


在这里插入图片描述

🎄一、概述

RTSP,全称时 Real Time Streaming Protocol,实时流媒体协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学、网景和RealNetworks公司提交的 IETF RFC 标准。

关于 RTSP 协议的官方文档是 RFC2326,文档链接 :RFC2326-Real Time Streaming Protocol (RTSP)。

RTSP 协议的语法和操作参考了 HTTP/1.1,基于文本的协议,采用ISO10646字符集,使用UTF-8编码;承载RTSP的传输层协议为TCP,默认端口554;如果是RTSP-over-HTTP tunneling,则默认TCP端口为8080;一般与RTP/RTCP协议搭配使用,由RTP协议传输实时流数据,RTCP协议完成数据流和控制命令的传输。

在这里插入图片描述

RTP协议:全称Real-time Transport Protocol,实时传输协议,由IETF的多媒体传输工作小组1996年在RFC 1889中公布的。RTP协议详细说明了在互联网上传递音频和视频的标准数据包格式。它是创建在UDP协议上的。

RTCP协议:全称Real-time Transport Control Protocol,实时传输控制协议,与RTP配合使用。RTP 使用一个偶数的 UDP 端口;而RTCP 则使用 RTP 的下一个端口,也就是一个奇数端口。RTCP与RTP联合工作,RTP实施实际数据的传输,RTCP则负责将控制包送至会话中的每个人。其主要功能是就RTP正在提供的服务质量做出反馈。

RTSP协议 与 HTTP协议 的区别:
RTSP是有状态的,其命令总是按照顺序来发送,其中某个命令可能需要总在另外一个命令之前要发送。而 HTTP 则是无状态,协议在发送一个命令以后,连接就会断开,且命令之间是没有依赖性的。
rtsp协议使用554端口,http使用80端口。
RTSP的请求服务器和客户端都可以发送,而HTTP请求则只能由客户端发送


在这里插入图片描述

🎄二、RTSP 方法

RTSP常用的方法包括:OPTIONS、DESCRIBE、SETUP、PLAY、PAUSE、TEARDOWN、ANNOUNCE、GET_PARAMETER和SET_PARAMETER等。详细使用介绍如下:

  • OPTIONS:客户端向服务器获取服务器支持的方法。它不影响服务器的状态;
  • DESCRIBE:客户端向服务器获取URL指定的媒体对象的描述,其中Accept字段指定了描述格式;
  • SETUP:客户端向服务器请求建立会话并准备传输。请求信息主要包括传输协议和客户端的端口号;
  • PLAY:客户端主动通知服务器以SETUP指定的机制开始发送数据。其中Range字段指定了播放的起止时间,当多个PLAY请求到达时,服务器会将PLAY请求排成队列,顺序执行,即必须等待第一个PLAY的时间完成后,才会继续处理第二个PLAY消息。
  • PAUSE:客户端请求服务器的媒体流传输临时暂停。可以通过Range参数在指定时间点暂停,也可以指定某股流暂停,例如,如果指定音频流暂停,则播放将是无音状态
  • RECORD:RECORD通知服务器,客户端将会根据之前的描述开始记录媒体数据。 其中 timestamp 字段反映开始和结束时间 (UTC)。如果该字段不存在,则会使用媒体描述中的开始或结束时间。 如果会话已经开始,则立即开始录制。
    服务器决定是将记录的数据存储在 request-URI 下还是另一个 URI 下。 如果服务器不使用 request-URI,则响应应该是 201(已创建)并包含描述请求状态并引用新资源的实体和 Location 标头。
  • TEARDOWN:客户端请求停止指定URL流发送,释放相关资源。
  • REDIRECT:重定向请求,服务端通知客户端它必须连接到另一个服务器位置。 它包含强制标头 Location,它指示客户端应该发出对该 URL 的请求。 它可能包含参数Range,表示重定向何时生效。 如果客户端想要继续发送或接收此 URI 的媒体,客户端必须为当前会话发出 TEARDOWN 请求,并在指定主机上为新会话发出 SETUP。
  • ANNOUNCE:当客户端向服务器发送时,表示的是将通过请求 URL 识别的表示描述或者媒体对象提交给服务器
    当服务器向客户端发送时,表示的是通知客户端更新会话信息
  • GET_PARAMETER:GET_PARAMETER 请求检索 URI 中指定的表示或流的参数值。 回复和响应的内容留给实现。 没有实体主体的 GET_PARAMETER 可用于测试客户端或服务器的活跃度(“ping”)。
  • SET_PARAMETER:这个方法请求设置演示或URL指定流的参数值。请求仅应包含单个参数,允许客户端决定某个特殊请求为何失败。如请求包含多个参数,所有参数可成功设置,服务器必须只对该请求起作用。服务器必须允许参数可重复设置成同一值,但不让改变参数值。注意:媒体流传输参数必须用SETUP命令设置。将设置传输参数限制为SETUP有利于防火墙。

上面总共介绍了 11 个RTSP方法,其中,SETUPPLAYTEARDOWN三个命令是 RTSP 流程中必须的,其他方法非必须。而ANNOUNCEGET_PARAMETERSET_PARAMETER三个命令既可以是客户端发给服务端,也可以是服务端发给客户端,其他命令都是客户端发给服务端的。


在这里插入图片描述

🎄三、RTSP的请求与响应

RTSP有两类报文:请求报文和响应报文。请求报文是指从客户向服务器发送请求报文,响应报文是指从服务器到客户的应答。

3.1 、RTSP 的 请求报文

RTSP请求报文由请求行、请求头部和请求体三个部分组成。其中,请求行是必须的,而请求头部和请求体则根据具体情况可选。

  • 请求行:请求行包含一个方法、一个请求URI和一个协议版本,它们之间以空格分隔,并以CRLF(即:\r\n)结束。
    方法:就是上面介绍的RTSP方法。包括OPTIONS、DESCRIBE、SETUP、PLAY、PAUSE、TEARDOWN等。
    请求URI:标识要操作的媒体资源,格式通常为rtsp://example.com/path/to/stream。
    协议版本:表示请求遵循的RTSP协议版本,一般为RTSP/1.0RTSP/2.0
    下面是一个完整的请求行的示例:
    OPTIONS rtsp://192.168.2.88:8554/3840x2160_8bit.264 RTSP/1.0
    
  • 请求头部:请求头部包含一些附加信息,比如:CSeq(用于标识请求的序列号)、Session ID(会话标识符)、Transport(传输协议)等。每个头部字段由字段名、冒号和字段值组成,各头部字段之间以CRLF分隔。
    下面是一个完整的请求头部的示例:
    CSeq: 2
    User-Agent: LibVLC/3.0.19 (LIVE555 Streaming Media v2016.11.28)
    
  • 请求体:某些RTSP(比如:DESCRIBE)请求可能包含请求体,用于传输额外的数据。请求体的具体内容,取决于请求行中所使用的RTSP方法。注意:在请求头部之后,需要插入一个空行(CRLF),用于区分请求头部与请求体。

3.2 、RTSP 的 响应报文

RTSP请求报文由状态行、响应头部和响应体三个部分组成。其中,状态行是必须的,而响应头部和响应体则根据具体情况可选。

  • 状态行:状态行包含一个协议版本、一个状态码和一个状态文本,它们之间由空格分隔,并以CRLF(即:“\r\n”)结束。
    协议版本:表示响应遵循的RTSP协议版本,一般为RTSP/1.0或RTSP/2.0。
    状态码:三位数字,比如:200、401、500等,用于指示请求的处理结果。第一位数字代表响应类别:2xx表示成功,4xx表示客户端错误,5xx表示服务器错误。
    状态文本:简短的文字描述,解释对应状态码的具体含义,比如:OK、Unauthorized等。
    下面是响应行例子:
    RTSP/1.0 200 OK
    
  • 响应头部:响应头部包含与请求头部类似的信息,比如:CSeq(用于标识请求的序列号)、Session ID(会话标识符)、Transport(传输协议)等。每个响应头部字段的格式与请求头部相同,故这里不再赘述。
    CSeq: 2
    Date: Wed, Feb 04 1970 03:25:10 GMT
    Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, SET_PARAMETER
    
  • 响应体:某些RTSP响应(比如:DESCRIBE)可能包含响应体,用于传输额外的数据。注意:在响应头部之后,需要插入一个空行(CRLF),用于区分响应头部与响应体。
    下面是一个完整的响应体的示例。
    v=0
    o=- 8913478 1 IN IP4 192.168.3.91
    s=LIVE555 Streaming Media v2016.07.19
    i=1080
    t=0 0
    a=tool:LIVE555 Streaming Media v2016.07.19
    a=type:broadcast
    a=control:*
    a=range:npt=0-
    a=x-qt-text-nam:LIVE555 Streaming Media v2016.07.19
    a=x-qt-text-inf:1080
    m=video 0 RTP/AVP 96
    c=IN IP4 0.0.0.0
    b=AS:5000
    a=rtpmap:96 H264/90000
    a=fmtp:96 packetization-mode=1;profile-level-id=64002A;sprop-parameter-sets=Z2QAKq2EAQwgCGEAQwgCGEAQwgCEO1A8ARPyoA==,aO48sA==
    a=control:track1
    m=audio 0 RTP/AVP 97
    c=IN IP4 0.0.0.0
    b=AS:768
    a=rtpmap:97 PCMA/48000/2
    a=control:track2
    

在这里插入图片描述

🎄四

在这里插入图片描述

🎄五

在这里插入图片描述

🎄六、

在这里插入图片描述
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁

参考:
实时流协议—RTSP【详解】
从零开始精通RTSP之请求与响应详解1

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

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

相关文章

maven-surefire-report-plugin插件生成测试报告

目录 官网 pom.xml配置 测试类 执行测试结果 修改测试类 pom文件更改配置maven-jxr-plugin xref xref-test ​Source Xref​ ​Test Source Xref​ 再此验证 有凭(有理)有据 官网 Maven Surefire Report Plugin – Showing Only Fail…

2024 年第十四届 APMCM 亚太地区大学生数学建模竞赛B题超详细解题思路+数据预处理问题一代码分享

B题 洪水灾害的数据分析与预测 亚太中文赛事本次报名队伍约3000队,竞赛规模体量大致相当于2024年认证杯,1/3个妈杯,1/10个国赛。赛题难度大致相当于0.6个国赛,0.8个妈杯。该比例仅供大家参考。 本次竞赛赛题难度A:B:C3:1:4&…

Java数据结构-树的面试题

目录 一.谈谈树的种类 二.红黑树如何实现 三.二叉树的题目 1.求一个二叉树的高度,有两种方法。 2.寻找二叉搜索树当中第K大的值 3、查找与根节点距离K的节点 4.二叉树两个结点的公共最近公共祖先 本专栏全是博主自己收集的面试题,仅可参考&#xf…

pandas,dataframe使用笔记

目录 新建一个dataframe不带列名带列名 dataframe添加一行内容查看dataframe某列的数据类型新建dataframe时设置了列名,则数据类型为object dataframe的保存保存为csv文件保存为excel文件 dataframe属于pandas 新建一个dataframe 不带列名 df pd.DataFrame() 带…

gda动态调试-cnblog

忽的发现gda有动态调试功能 动态监听返回值 框柱指定方法,选择调试方法,gda会自动监听函数的返回值,例如 自定义frida脚本 gda会自动生成hook该函数的frida脚本

SpringBoot学习06-[SpringBoot与AOP、SpringBoot自定义starter]

SpringBoot自定义starter SpringBoot与AOPSpringBoot集成Mybatis-整合druid在不使用启动器的情况下,手动写配置类进行整合使用启动器的情况下,进行整合 SpringBoot启动原理源码解析创建SpringApplication初始化SpringApplication总结 启动 SpringBoot自定义Starter定…

matplotlib下载安装

matplotlib下载安装过程同之前写的pygame很类似。 Pygame下载安装 python官网 1.搜索matplotlib 直接点进去 查看历史版本,因为新版本可能出现与python不匹配问题。 我选择3.6.3版本,因为我安装的python是3.8,可以匹配版本。同时window操…

Android - 模拟器

Android SDK 包括一个在您的计算机上运行的虚拟移动设备模拟器。 该模拟器可让您在不使用物理设备的情况下对 Android 应用程序进行原型设计、开发和测试。 在本章中,我们将探索真实安卓设备中存在的模拟器中的不同功能。 创建 AVD 如果您想模拟真实设备&#xff0c…

赋能心理大模型,景联文科技推出高质量心理大模型数据库

生成式大模型作为当前发展势头最为强劲的人工智能前沿技术,其在临床心理学领域中的创新应用已成为社会关注和医学聚焦的热点之一。 心理大模型在落地应用过程中可能面临的痛点主要包括以下几个方面: 数据隐私与安全:确保敏感的个人信息在模型…

第一次的pentest show总结

第一次的pentest show总结 前言 开始之前,我特别感谢TryHackMe(英)、HackTheBox(美)、zero-point security(英)、offsec(美)等平台,使我们能够通过网络以线上的方式学习与练习,打破传统线下各地区教育资源差异大的限制,对网络教…

磁钢生产领域上下料解决方案

随着智能制造技术的不断革新,磁钢生产领域正逐步引入自动化生产线。然而,传统的人工上下料方式存在诸多问题,难以满足现代生产需求。富唯智能提出了一款复合机器人磁钢上下料解决方案,通过先进的自动化技术,提高生产效…

海量设备集中运维,向日葵远程控制赋能农牧产品加工产业链

产业规模越大,单位成本就越低,这是一个广泛存在的商业规律。 在诸多行业中,农牧业的这种“规模效应”尤为明显,这使得在农牧行业内逐渐发展出许多横跨产业链上下游的大型企业集团,业务甚至覆盖相关产业设备的设计与生…

【Odoo开源ERP】别把ERP与进销存软件混为一谈

导读:企业使用ERP软件能够实现管理升级,多方信息集成,按照既定策略逻辑运算,生成计划建议,减少人力成本,提高准确率的同时提高经营能力。 ERP,是MRP II的下一代软件,除了MRP II已有的…

DataWhale-吃瓜教程学习笔记 (七)

学习视频**:第6章-支持向量机_哔哩哔哩_bilibili 西瓜书对应章节: 第六章 支持向量机 - 算法原理 几何角度 对于线性可分数据集,找距离正负样本距离都最远的超平面,解是唯一的,泛化性能较好 - 超平面 - 几何间隔 例…

网络爬虫(二) 哔哩哔哩热榜高频词按照图片形状排列

我们有时候需要爬取结果生成为自定义的词云图 生成自定义的词云图通常需要以下步骤: 1. 爬取数据:使用爬虫工具或库,如requests、BeautifulSoup等,可以爬取网页、论坛、社交媒体等平台上的文本数据。 2. 数据预处理&#xff1a…

学习笔记(linux高级编程)10

IPC 进程间通信 interprocess communicate 三大类: 1、古老的通信方式 无名管道 有名管道 信号 2、IPC对象通信 system v BSD suse fedora kernel.org 消息队列(用的相对少,这里不讨论) 共享内存 信号量集 3、socket通信 网络通信 特…

windows电脑网络重置后wifi列表消失怎么办?

我们的电脑网络偶尔会出现异常,我们通常会下意识选择网络诊断,运行完诊断后一般会让我们选择重置网络,然而,重置后wifi列表突然消失,无法愉快地上网了,找了一圈,都说是更改适配器选项&#xff0…

【东奥会计-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

JavaScript(6)——数据类型转换

为什么需要类型转换? JavaScript是弱数据类型:JavaScript不知道变量到底属于哪种数据类型,只有赋值了才清除 使用表单,prompt获取的数据默认为字符串类型,此时不能直接进行算数运算 隐式转换 某些运算符被执行时&am…

gitLab使用流程

标题1.配置账户 git config --global user.name git config --global user.email mygitlabmali.cn 标题2.生成秘匙 ssh-keygen -t rsa -C “mygitlabmail.cn” 。 //输入命令后一直回车 ,输入命令后一直回车(密码可以不填),至…