RTSP系列一:RTSP协议介绍

news2024/11/22 21:21:49

RTSP系列:

        RTSP系列一:RTSP协议介绍-CSDN博客

        RTSP系列二:RTSP协议鉴权-CSDN博客 

        RTSP系列三:RTP协议介绍-CSDN博客 

        RTSP系列四:RTSP Server/Client实战项目-CSDN博客 

目录

一、RTSP协议介绍

二、RTSP信令

三、SDP

四、RTSP抓包分析

4.1 单播:UDP

4.2 组播:UDP

4.3 RTP OVER TCP/RTSP

​五、总结


一、RTSP协议介绍

         RTSP(Real Time Streaming Protocol),实时流传输协议,是TCP/IP 协议体系中的一个应用层协议,由哥伦比亚大学、网景和RealNetworks 公司提交的IETF RFC 标准。该协议定义了一对多应用程序如何有效地通过IP 网络传送多媒体数据。

        其语法和操作参考了HTTP/1.1,默认端口554。RTSP主要应用在视频监控领域,网络摄像头都支持RTSP协议。RTSP只是对媒体传输进行控制,真正传输音视频是RTP协议,将在后面介绍。

        目前RTSP有两个版本1.0和2.0,1.0定义在RFC2326中,2.0定义在RFC7826。2.0是2016年由IETF发布的RTSP新标准,不过现在基本使用的都是RTSP1.0,就算有使用2.0的,也会兼容1.0,该系列都是围绕RTSP1.0进行讲解的。

        RTSP属于应用层协议,和HTTP类似,使用TCP传输,RTSP主要完成媒体信息交互,确认媒体传输方式和媒体传输控制,即RTSP负责上层控制,底层音视频传输使用的是其他的协议(RTP协议),RTSP交互过程中会把媒体信息告知对端,这个媒体信息就放在RTSP的payload(负载)中,和HTTP中的payload是一样的,在RTSP中媒体信息,也就是这个payload使用的是SDP协议,SDP协议就是规定了怎么描述媒体源(网络摄像头)包含哪些媒体流(主要是音频和视频)以及这些媒体流参数是怎么样的(音视频编解码参数等)。所以从IPC(网络摄像头)中获取音视频涉主要及到三个协议:RTSP、SDP、RTP。RTSP负责媒体控制,协商(确定传输方式,使用TCP还是UDP以及传输通道-TCP和传输端口-UDP);SDP负责描述媒体信息;RTP负责传输音视频。此外还有RTCP协议,是传输过程中对媒体质量进行控制(统计丢包,时延等),和RTP是一起使用的,不过RTCP协议是可选的,在具体应用中可以不实现RTCP协议。

        RTSP的请求和响应报文格式如下:

二、RTSP信令

        RTSP报文格式和HTTP完全一样,只不过里面的值不一样,使用的错误码也是一样,比如200表示请求成功,40x表示客户端错误,50x表示服务端错误,这样RTSP就很好理解了。HTTP有GET、POST等方法,同样RTSP也有自己的方法,RTSP1.0包含如下方法:

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

        RTSP是C/S模型,RTSP服务端可向RTSP客户端发送音视频(客户端拉流模式),也可接受来自RTSP客户端发送过来的音视频流(客户端推流模式),RTSP拉流模式使用的方法包括DESCRIBE、SETUP、PLAY。RTSP推流模式使用的方法包括ANNOUNCE、SETUP、RECORD。其他的方法都是推流模式和拉流模式通用的。一般RTSP使用的都是拉流模式,即IPC作为RTSP服务端,RTSP客户端通过DESCRIBE、SETUP、PLAY等方法从IPC拉取音视频流。客户端推流一般使用另外一种协议RTMP,RTMP本系列中不会介绍。RTSP拉流模式和推流模式,基本类似,推拉流模式只是媒体流向不同,使用的方法不同,其他大同小异。本文主要对拉流模式也是目前IPC的音视频传输都在用的模式进行详细介绍。

        下面是RTSP拉流信令交互过程。其中RTP是传输音视频数据,RTCP是音视频质量控制。

1)OPTIONS

        C--->S

        客户端向服务器端发现OPTIONS,请求可用的方法。

        S--->C

        服务器端回复客户端,消息中包含当前可用的方法。

2)DESCRIBE

        C--->S

        客户端向服务器请求媒体描述文件,一般通过rtsp 开头的url 来发起请求,格式为sdp。

        S--->C

        服务器回复客户端sdp 文件,该文件告诉客户端服务器有哪些音视频流,有什么属性,如编解码器信息,帧率等。

3)SETUP

        为音视频数据的传输准备通道,确定音视频传输方式(TCP/UDP)

        C--->S

        客户端向服务器端发起建立连接请求,请求建立会话连接,准备开始接收音视频数据,请求信息描述了期望音视频数据包基于UDP 还是TCP 传输,指定了RTP,RTCP 端口,以及是单播还是组播等信息。

        S--->C

        服务器端收到客户端请求后,根据客户端请求的端口号确定发送控制数据的端口(RTCP)以及音视频数据(RTP)的端口。

4)PLAY

        C--->S

        客户端向服务端请求播放媒体。

        S--->C

        服务器回复客户端200 OK! 之后开始通过SETUP 中指定的端口开始发送数据。

5)TEARDOWN

        C---->S

        结束播放的时候,客户端向服务器端发起结束请求。

        S--->C

        服务端收到消息后,向客户端发送200 OK,之后断开连接。

三、SDP

        sdp格式由多行的type=value组成

        sdp会话描述由一个会话级描述和多个媒体级描述组成。会话级描述的作用域是整个会话,媒体级描述描述的是一个视频流或者音频流.

        会话级描述由v=开始到第一个媒体级描述结束,媒体级描述由m=开始到下一个媒体级描述结束

        下面是上面示例的sdp文件,我们就来好好分析一下这个sdp文件

        v=0\r\n

        o=- 91565340853 1 in IP4 192.168.31.115\r\n

        t=0 0\r\n

        a=contol:*\r\n

        m=video 0 RTP/AVP 96\r\n

        a=rtpmap:96 H264/90000\r\n

        a=framerate:25\r\n

        a=control:track0\r\n

        这个示例的sdp文件包含一个会话级描述和一个媒体级描述,分别如下:

1、会话级描述
v=0\r\n

o=- 91565340853 1 IN IP4 192.168.31.115\r\n

t=0 0\r\n

a=contol:*\r\n

解释:

v=0:表示sdp的版本

o=- 91565340853 1 IN IP4 192.168.31.115

格式为 o=<用户名> <会话id> <会话版本> <网络类型><地址类型> <地址>

用户名:-

会话id:91565340853,表示rtsp://192.168.31.115:8554/live请求中的live这个会话

会话版本:1

网络类型:IN,表示internet

地址类型:IP4,表示ipv4

地址:192.168.31.115,表示服务器的地址

2、媒体级描述
m=video 0 RTP/AVP 96\r\n

a=rtpmap:96 H264/90000\r\n

a=framerate:25\r\n

a=control:track0\r\n

解释:

m=video 0 RTP/AVP 96\r\n

格式为 m=<媒体类型> <端口号> <传输协议> <媒体格式 >

媒体类型:video

端口号:0,为什么是0?因为在SETUP过程会告知端口号,所以这里就不需要了

传输协议:RTP/AVP,表示RTP OVER UDP,如果是RTP/AVP/TCP,表示RTP OVER TCP

媒体格式:表示负载类型(payload type),RTP中包含RTP Header和payload(音视频),RTP Header中有个字段为负载类型,和SDP中的负载类型是对应的,从SDP中获取音视频的payload type,那么传输音视频数据的时候,就可以通过判断RTP中的负载类型来判断当前RTP数据包是音频还是视频。

a=rtpmap:96 H264/90000

格式为a=rtpmap:<媒体格式><编码格式>/<时钟频率>

a=framerate:25表示帧率

a=control:track0 表示这路视频流在这个会话中的编号

        音视频的媒体描述格式是一样的。这里SDP不做详细介绍,作为入门,了解这些就可以完成满足基本的开发需求。

四、RTSP抓包分析

        前面说过RTSP是交互媒体信息,确定数据传输方式的。其中传输方式包括TCP和UDP,UDP又包括单播和组播,下面将对每种方式进行数据包分析。

        下面是wireshark抓取的RTSP数据包(仅包含一路媒体流,SETUP仅请求一次):

4.1 单播:UDP

1、OPTIONS

        OPTINOS是客户端查询服务端支持哪些方法。​

2、DESCRIBE

​        DESCRIBE是客户端请求服务端返回关于音视频的描述,用SDP表示。

3、SETUP

​        SETUP是请求音视频,这里只有视频并且视频的control是track0,如果还要音频的话就还需要再发起一次SETUP请求,请求音频数据。RTP/AVP表示使用UDP传输音视频数据,cilent_port中记录了客户端的RTP和RTCP数据接收端口,响应中server_port表示服务端的RTP和RTCP数据发送端口,规定RTCP端口 = RTP端口 + 1。

        此外SETUP响应包中还会包含Session字段,表示当前会话,后面客户端请求都要带上这个Session字段,服务器用Session区分不同的客户端。

4、PLAY

​        服务端收到客户端发起的PLAY请求后,就开始向客户端发送音视频。

5、TEARDOWN

        客户端与服务端断开连接,媒体结束。

4.2 组播:UDP

        组播需要RTSP服务器支持才行,服务器的组播地址会记录在SDP中,组播与单播相比,DESCRIBE和SETUP不同。        

1、DESCRIBE

        服务器支持组播需要在SDP中描述。

2、SETUP

​        客户端加入多播组即可收到服务端的音视频数据。RTSP中组播一般很少用。

4.3 RTP OVER TCP/RTSP

         当使用TCP协议承载RTSP/RTP时,所有的命令和媒体数据都将通过RTSP端口,RTP数据发送使用RTSP的socket和端口,数据将经过二元交织格式化之后才能发送。

        要使用TCP连接,RTSP客户端需要在SETUP阶段请求TCP连接。SETUP命令中应该包括如下格式的Transport:

Transport: RTP/AVP/TCP;interleaved=0-1

        上述Transport将告诉服务端使用TCP协议发送媒体数据,并且使用信道 0 和 1 对流数据以及控制信息进行交织。详细说来,使用偶数信道作为数据传输信道,使用奇数信道作为控制信道(数据信道 + 1)。所以,如果你设定数据信道为 0 ,那控制信道应该是 0 + 1 = 1。

        RTP,RTCP数据和RTSP数据共享TCP数据通道,所以必须有一个标识来区别三种数据。

        RTP和RTCP数据会以$符号+1个字节的通道编号+2个字节的数据长度,共4个字节的前缀开始,RTSP数据是没有前缀数据的。RTP数据和RTCP数据的区别在于第二个字节的通道编号,

RTP基于TCP的包头比基于UDP的包头多了4个字节:

* magic固定为0x24,

* channel用来区分音视频等多路流媒体的通道,其中偶数通道为流媒体内容,奇数通道为RTCP

* len表示数据包的长度减去开始的4个字节,即len字段之后的数据长度

SETUP:

RTP OVER TCP数据传输:

​五、总结

一个完整的RTSP流媒体传输过程是:

  1. RTSP信令交互阶段:

    • 客户端发起RTSP连接请求到服务端。
    • 服务端响应,建立RTSP连接。
    • 客户端与服务端交互,协商媒体传输方式(例如,使用UDP或TCP)。
    • 服务端确认传输方式,建立媒体传输通道。
  2. 采集音视频阶段:

    • 服务端开始采集音频和视频数据。
  3. 音视频编码阶段:

    • 服务端进行H.264/H.265视频编码和AAC/PCM/PCMA/PACMU音频编码。
  4. RTP封装阶段:

    • 服务端将编码后的音视频数据封装成RTP数据包。
    • 视频使用H.264/H.265 RTP封装,音频使用AAC/PCM/PCMA/PACMU RTP封装。
  5. RTP数据传输阶段:

    • 使用选择的传输方式(UDP或TCP),服务端将RTP数据包发送到客户端。
  6. 客户端接收与解包阶段:

    • 客户端接收RTP数据包。
    • 如果使用UDP传输,客户端直接解包RTP数据。
    • 如果使用TCP传输,客户端从RTSP信令中获取通道信息,然后通过TCP连接接收RTP数据。
  7. 解码与播放阶段:

    • 客户端对接收到的音视频数据进行解码。
    • 解码后的数据传递给播放器进行播放。

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

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

相关文章

梅特勒金属探测器检测仪维修SAFELINE V3-QF1

梅特勒L系列和HDS管道式金属检测机主要用于食品行业&#xff0c;检测液态或者粘稠的产品&#xff0c;因为这类产品都是通过管道传输。 梅特勒HDS管道式系统为肉食加工和火腿类产品的检测需求度身制造,可与多种填充机联接,能够方便的介入各类加工生产线。 梅特勒T和ST系列金属检…

【091】基于SpringBoot+Vue实现的超市管理系统

系统介绍 基于SpringBootVue实现的超市管理系统 基于SpringBootVue实现的超市管理系统采用前后端分离的架构方式&#xff0c;系统分为管理员、员工两种角色&#xff0c;实现了销售管理、人事管理、个人中心、库存管理、会员管理、系统管理、商品管理等功能模块 技术选型 开发…

二十七、【人工智能】【机器学习】- 【数学基础】 之数学要素

目录 前言 数学基础 数学基础进阶 高级数学加减法 高级数学乘法 总结 前言&#xff1a; 在数学的广阔宇宙中&#xff0c;有一颗璀璨的星辰&#xff0c;它既神秘又迷人&#xff0c;这便是复数——一个融合了实数与虚数的世界。复数&#xff0c;用数学语言表示为 CC&#…

dpdk调试

1、gdb调试coredump dpdk的Makefile加上-g编译 ulimit -c unlimited echo "/home/core/core-%e-%p-%t" > /proc/sys/kernel/core_pattern

触发邮件API接口与第三方系统集成的方法?

触发邮件API接口的性能优化策略&#xff1f;如何管理API接口&#xff1f; 触发邮件API接口成为了不可或缺的工具&#xff0c;不仅能自动化邮件发送&#xff0c;还能与第三方系统无缝集成&#xff0c;提高工作效率。AokSend将探讨如何使用触发邮件API接口与第三方系统进行集成的…

自动化与机器人:新时代的驱动力

在现代科技的飞速发展中&#xff0c;自动化与机器人技术已成为推动各行业变革的重要力量。特别是机器人流程自动化&#xff08;RPA&#xff09;和协作机器人&#xff08;Cobot&#xff09;的应用&#xff0c;极大地提升了企业的效率和生产力。本文将深入探讨这两种技术的基本概…

等保测评中的访问控制与用户认证:构建安全的访问管理机制

在当今数字化时代&#xff0c;信息安全已成为企业和组织不可忽视的关键议题。等保测评&#xff0c;作为我国信息安全等级保护制度的重要组成部分&#xff0c;对访问控制与用户认证提出了严格要求&#xff0c;旨在构建安全的访问管理机制&#xff0c;保护信息资产不受未授权访问…

【ARM】SMMU系统虚拟化(2)_转换页表的配置方式boot_code.s

#工作记录# 拖了非常久的页表转换整理&#xff0c;补坑&#xff01;废话不多说开整。 MMU相关的知识点可以参考我之前的博客&#xff0c;这篇博客主要介绍如何在boot_code.s中配置页表。 目录 1.boot_code.s简介 2. MMU配置相关 2.1系统寄存器 2.2 ttb0_base的配置 1.boo…

手把手教你打造Vue2项目中的自定义折叠组件

场景 产品&#xff1a;新增表单页面过长&#xff0c;操作不便捷&#xff0c;增加折叠功能。前端&#xff1a;OK&#xff01;&#xff01;&#xff01;PS&#xff1a;前端就是这么好说话o(*&#xffe3;︶&#xffe3;*)o废话一 本文将带领大家了解如何在Vue2项目中创建一个自定…

简单的docker学习 第7章 docker网络

第7章 Docker 网络 7.1Docker 网络理论基础 Docker 网络中的相关命令非常少&#xff0c;但需要掌握的底层原理相对较多。 首先使用busybox创建两个容器&#xff0c;方便后续使用 # 之后使用ctrl p q 退出&#xff0c;保持后台运行 docker run --name bb1 -it busybox /bi…

【楚怡杯】职业院校技能大赛 “Python程序开发”赛项样题六

模块一&#xff1a;网络爬虫&#xff08;20分&#xff09; 任务一&#xff1a;获取网站数据 【任务说明】 数据是很多企业的生命&#xff0c;没有数据就没有一切。企业首先要解决的问题就是数据问题&#xff0c;那么获取数据的手段有很多种&#xff0c;其中爬虫就是性价比最…

市值1.3亿的厂房,1.8万就被捡漏了 究竟是馅饼还是陷阱

建筑总面积达9550.64平方米 市场价为1.3亿元的厂房 被1元钱起拍变卖 最终成交价仅有1.8万元 每平方米房价不足2元 究竟是馅饼还是陷阱 2024年8月5日&#xff0c;北京市西城区人民法院的一个价值1.3亿元的厂房以18162.97元的最高价竞成交。 7 月 7 日起&#xff0c;北京市西…

【初阶数据结构题目】12.环形链表I

环形链表I 点击链接做题 思路&#xff1a;快慢指针 代码&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ typedef struct ListNode ListNode; bool hasCycle(struct ListNode *head) {//快慢指针…

【机器学习】BP神经网络基本结构

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 BP神经网络基本结构1. 引言2. BP神经网络的基本概念2.1 什么是BP神经网络2.2 BP…

性价比高的蓝牙耳机推荐?分享我的2024年开放式耳机选购指南

2024年快到下旬了&#xff0c;市场上的蓝牙耳机价格也是差不多都沉淀起来了。所以就性价比高的蓝牙耳机的入手时间来说&#xff0c;那确实是年底左右的时间挑选入手会比较好一点。 而挑选性价比高的蓝牙耳机类型呢&#xff0c;我会首选开放式耳机。因为就开放式耳机而言&#…

yarn insntall 报错,显示 @achrinza/node-ipc@9.2.2 不支持现在的node版本

最近执行yarn install 时&#xff0c;突然遇到这样一个段报错 error achrinza/node-ipc9.2.2: The engine "node" is incompatible with this module. Expected version "8 || 10 || 12 || 14 || 16 || 17". Got "18.10.0" error Found incompa…

中创算力:以知识产权转化运用促进高质量发展

创新是引领发展的第一动力&#xff0c;保护知识产权就是保护创新。为深入实施知识产权公共服务普惠工程&#xff0c;促进知识产权公共服务更好服务高水平科技&#xff0c;国家知识产权局发布关于全面提升知识产权公共服务效能的指导意见。 在政策落地过程中&#xff0c;如何精…

《Milvus Cloud向量数据库指南》—Milvus Cloud赋能Ivy.ai:解锁大数据潜力,加速AI创新

引入Milvus Cloud:Ivy.ai的大规模全托管向量数据库解决方案新篇章 在人工智能驱动的数字化时代,数据成为了企业最宝贵的资产之一,而如何高效地管理和利用这些数据,则是决定企业能否在竞争中脱颖而出的关键因素。对于Ivy.ai这样致力于提升高等教育、医疗保健和公共部门沟通…

BM1反转链表[栈+头插法]

题目要求如下: 问题比较简单,就是将链表中的值进行反转即可。 一种比较简单的方式是使用栈链表的方式来实现,下面是相应的代码: #include <stdio.h> #include <stdlib.h> int arr[10001] {0}; struct ListNode* ReverseList(struct ListNode* head ) {if (head …

【数据结构】——介绍树

树 树的概念和结构 树是⼀种⾮线性的数据结构&#xff0c;它是由 n&#xff08;n>0&#xff09;个有限结点组成⼀个具有层次关系的集合。把它叫做树是因为它看起来像⼀棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;⽽叶朝下的。 • 有⼀个特殊的结点&#xff0c;…