流媒体传输 - RTSP 协议

news2025/7/27 17:12:04

概述

协议简介

RTSP

RTSP (Real-Time Stream Protocol) 实时流传输协议是一种基于文本的应用层协议,常被用于 建立的控制媒体流的传输,该协议用于 C/S 模型 , 是一个 基于文本 的协议,用于在客户端和服务器端建立和协商实时流会话。

RTP

RTP (Real-time Transport Potocol) 实时传输协议,用于 实时数据的传输

详见:下一篇

RTCP

RTCP (Real-time Transport Control Protocol) 实时传输控制协议, RTCPRTP 数据流提供 信道外控制,RTCP 的主要功能是保证服务质量,为 RTP 提供服务质量反馈

详见:下一篇

传输渠道

协议名称协议文档传输层协议功能
RTSPRFC 2326 RFC 7836TCP/UDP控制媒体流的传输
RTPRFC 3550 RFC 3551 RFC 6184UDP/TCP媒体流的传输
RTCPRFC 3550UDP/TCP传输质量反馈

RTSP 协议

RTSP URL

rtsp_URL = "rtsp://" host [":" port] [ abs_path ]
host: 有效的域名或 IP 地址
port: 端口号,缺省为 554,若为缺省可不填写,否则必须写明
例如:
rtsp://media.example.com:554/twister/audiotrack

以海康摄像机为例,其 RTSP URL 格式为:

rtsp://[username]:[password]@[ip]:[port]/[channel]/[subtype]/av_stream
例如:
rtsp://admin:12345@192.168.1.67:554/h264/ch1/main/av_stream
rtsp://admin:12345@192.168.1.67/mpeg4/ch1/sub/av_stream

RTSP 报文

RTSP 是一种基于文本的协议,用 CRLF (回车换行) 作为每一行的结束符,其好处是,在使用过程中可以方便地增加自定义参数,也方便抓包分析。从消息传送方向上来分,RTSP 的报文有两类:请求报文和响应报文。请求报文是指从客户端向服务器发送的请求 (也有少量从服务器向客户端发送的请求),响应报文是指从服务器到客户端的回应。

RTSP 请求报文的常用方法:

方法方向对象是否必要作用
DESCRIBEC->SP, S推荐得到会话描述信息
ANNOUNCEC->S, S->CP, S可选
GET_PARAMETERC->S, S->CP, S可选
OPTIONSC->S, S->CP, S必须 (S->C: 可选)获得服务器提供的可用方法
PAUSEC->SP, S推荐客户端发起暂停播放请求
PLAYC->SP, S必须客户端发起播放请求
RECORDC->SP, S可选
REDIRECTS->CP, S可选
SETUPC->SS必须客户端请求建立会话
SET_PARAMETERC->S, S->CP, S可选
TEARDOWNC->SP, S必须客户端发起关闭会话

通过 VLC 播放 RTSP 网络流,经抓包得以下内容:

OPTIONS rtsp://192.168.199.152:554/live/test RTSP/1.0
CSeq: 2
User-Agent: LibVLC/3.0.8 (LIVE555 Streaming Media v2016.11.28)
​
RTSP/1.0 200 OK
CSeq: 2
Date: Mon, Jul 27 2020 15:32:38 GMT
Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, ANNOUNCE, RECORD, SET_PARAMETER, GET_PARAMETER
Server: ZLMediaKit-5.0(build in Jul 12 2020 14:02:13)
​
DESCRIBE rtsp://192.168.199.152:554/live/test RTSP/1.0
CSeq: 3
User-Agent: LibVLC/3.0.8 (LIVE555 Streaming Media v2016.11.28)
Accept: application/sdp
​
RTSP/1.0 200 OK
Content-Base: rtsp://192.168.199.152:554/live/test/
Content-Length: 544
Content-Type: application/sdp
CSeq: 3
Date: Mon, Jul 27 2020 15:32:38 GMT
Server: ZLMediaKit-5.0(build in Jul 12 2020 14:02:13)
Session: hEu0JzMKcfK2
x-Accept-Dynamic-Rate: 1
x-Accept-Retransmit: our-retransmit
​
v=0
o=- 0 0 IN IP4 127.0.0.1
c=IN IP4 127.0.0.1
t=0 0
s=Streamed by ZLMediaKit-5.0(build in Jul 12 2020 14:01:57)
a=tool:libavformat 58.29.100
m=video 0 RTP/AVP 96
a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z2QAHqzZQNg95f/wFAAUEQAAAwABAAADADIPFi2W,aOvjyyLA; profile-level-id=64001E
a=rtpmap:96 H264/90000
a=control:streamid=0
m=audio 0 RTP/AVP 97
b=AS:128
a=fmtp:97 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3; config=121056E500
a=rtpmap:97 MPEG4-GENERIC/44100/2
a=control:streamid=1
SETUP rtsp://192.168.199.152:554/live/test/streamid=0 RTSP/1.0
CSeq: 4
User-Agent: LibVLC/3.0.8 (LIVE555 Streaming Media v2016.11.28)
Transport: RTP/AVP;unicast;client_port=60836-60837
​
RTSP/1.0 200 OK
CSeq: 4
Date: Mon, Jul 27 2020 15:32:38 GMT
Server: ZLMediaKit-5.0(build in Jul 12 2020 14:02:13)
Session: hEu0JzMKcfK2
Transport: RTP/AVP/UDP;unicast;client_port=60836-60837;server_port=41070-41071;ssrc=50E36E3B
​
SETUP rtsp://192.168.199.152:554/live/test/streamid=1 RTSP/1.0
CSeq: 5
User-Agent: LibVLC/3.0.8 (LIVE555 Streaming Media v2016.11.28)
Transport: RTP/AVP;unicast;client_port=60838-60839
Session: hEu0JzMKcfK2
​
RTSP/1.0 200 OK
CSeq: 5
Date: Mon, Jul 27 2020 15:32:38 GMT
Server: ZLMediaKit-5.0(build in Jul 12 2020 14:02:13)
Session: hEu0JzMKcfK2
Transport: RTP/AVP/UDP;unicast;client_port=60838-60839;server_port=58452-58453;ssrc=3463B21F
​
PLAY rtsp://192.168.199.152:554/live/test/ RTSP/1.0
CSeq: 6
User-Agent: LibVLC/3.0.8 (LIVE555 Streaming Media v2016.11.28)
Session: hEu0JzMKcfK2
Range: npt=0.000-
​
RTSP/1.0 200 OK
CSeq: 6
Date: Mon, Jul 27 2020 15:32:38 GMT
Range: npt=42535.41
RTP-Info: url=rtsp://192.168.199.152:554/live/test/streamid=0;seq=3889;rtptime=-466780396,url=rtsp://192.168.199.152:554/live/test/streamid=1;seq=1155;rtptime=-179511072
Server: ZLMediaKit-5.0(build in Jul 12 2020 14:02:13)
Session: hEu0JzMKcfK2
​
TEARDOWN rtsp://192.168.199.152:554/live/test/ RTSP/1.0
CSeq: 7
User-Agent: LibVLC/3.0.8 (LIVE555 Streaming Media v2016.11.28)
Session: hEu0JzMKcfK2
​
RTSP/1.0 200 OK
CSeq: 7
Date: Mon, Jul 27 2020 15:32:41 GMT
Server: ZLMediaKit-5.0(build in Jul 12 2020 14:02:13)
Session: hEu0JzMKcfK2

从上述抓包中看出,VLC 在播放 RTSP 网络流时,客户端与服务端经过了 6 次交互:

序号方向方法消息内容
1C->SOPTIONSClient 询问 Server 有哪些方法可用
1S->COPTIONSServer 回应所有可用的方法
2C->SDESCRIBEClient 请求得到 Server 提供的媒体初始化描述信息
2S->CDESCRIBEServer 回应媒体初始化信息,主要是 SDP (会话描述协议)
3C->SSETUP设置视频会话属性以及传输模式,请求建立会话
3S->CSETUPServer 建立会话,返回会话标识以及会话相关信息
4C->SSETUP设置音频会话属性以及传输模式,请求建立会话
4S->CSETUPServer 建立会话,返回会话标识以及会话相关信息
5C->SPLAYClient 请求播放
5S->CPLAYServer 回应播放请求
6C->STEARDOWNClient 请求关闭会话
6S->CTEARDOWNServer 回应关闭会话请求

下面我们一步一步了解 RTSP 会话建立流程:

【学习地址】:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发
【文章福利】:免费领取更多音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击1079654574加群领取哦~

  

OPTIONS

OPTIONS 请求可以在任何时间被发出,而且不会影响到 Server 的状态,例如:

 C->S:  OPTIONS * RTSP/1.0
        CSeq: 1
        Require: implicit-play
        Proxy-Require: gzipped-messages
​
 S->C:  RTSP/1.0 200 OK
        CSeq: 1
        Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE

DESCRIBE

客户端向服务器请求媒体资源描述,服务器端通过 SDP (Session Description Protocol) 格式回应客户端的请求。资源描述中会列出所请求媒体的媒体流及其相关信息,典型情况下,音频和视频分别作为一个媒体流传输。例如:

 C->S: DESCRIBE rtsp://server.example.com/fizzle/foo RTSP/1.0
       CSeq: 312
       Accept: application/sdp, application/rtsl, application/mheg
​
 S->C: RTSP/1.0 200 OK
       CSeq: 312
       Date: 23 Jan 1997 15:35:06 GMT
       Content-Type: application/sdp
       Content-Length: 376
​
       v=0
       o=mhandley 2890844526 2890842807 IN IP4 126.16.64.4
       s=SDP Seminar
       i=A Seminar on the session description protocol
       u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps
       e=mjh@isi.edu (Mark Handley)
       c=IN IP4 224.2.17.12/127
       t=2873397496 2873404696
       a=recvonly
       m=audio 3456 RTP/AVP 0
       m=video 2232 RTP/AVP 31
       m=whiteboard 32416 UDP WB
       a=orient:portrait

媒体流及其相关信息由 SDP (Session Description Protocol) 格式携带,关于 SDP 的详细说明,参见拓展阅读 5

SETUP

SETUP 请求确定了具体的媒体流如何传输,该请求必须在 PLAY 请求之前发送。SETUP 请求包含媒体流的 URL 和客户端用于接收 RTP 数据 (audio or video) 的端口以及接收 RTCP 数据 (meta information) 的端口。服务器端的回复通常包含客户端请求参数的确认,并会补充缺失的部分,比如服务器选择的发送端口。每一个媒体流在发送 PLAY 请求之前,都要首先通过 SETUP 请求来进行相应的配置。

C->S: SETUP rtsp://example.com/foo/bar/baz.rm RTSP/1.0
      CSeq: 302
      Transport: RTP/AVP;unicast;client_port=4588-4589
​
S->C: RTSP/1.0 200 OK
      CSeq: 302
      Date: 23 Jan 1997 15:35:06 GMT
      Session: 47112344
      Transport: RTP/AVP;unicast;client_port=4588-4589;server_port=6256-6257

PLAY

客户端通过 PLAY 请求来播放一个或全部媒体流,PLAY 请求可以发送一次或多次,发送一次时,URL 为包含所有媒体流的地址,发送多次时,每一次请求携带的 URL 只包含一个相应的媒体流。PLAY 请求中可指定播放的 range,若未指定,则从媒体流的开始播放到结束,如果媒体流在播放过程中被暂停,则可在暂停处重新启动流的播放。

C->S: PLAY rtsp://example.com/media.mp4 RTSP/1.0
      CSeq: 4
      Range: npt=5-20
      Session: 12345678
​
S->C: RTSP/1.0 200 OK
      CSeq: 4
      Session: 12345678
      RTP-Info: url=rtsp://example.com/media.mp4/streamid=0;seq=9810092;rtptime=3450012

Server 处理 client 发来的 PLAY 请求后,就会开始向 client 发送媒体数据,一般采用 RTP 协议进行发送,关于 RTP 协议的相关说明,参见拓展阅读 6

TEARDOWN

结束会话请求,该请求会停止所有媒体流,并释放服务器上的相关会话数据。

C->S: TEARDOWN rtsp://example.com/media.mp4 RTSP/1.0
      CSeq: 8
      Session: 12345678
​
S->C: RTSP/1.0 200 OK
      CSeq: 8

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

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

相关文章

JS语句完全攻略

JavaScript 语言定义了 20 套(或个)语句命令,分别执行不同的操作。 以用途划分,JavaScript 语句可以分为:声明、分支控制、循环控制、流程控制异常处理和其他。 以结构划分,JavaScript 语句又可以分为单句…

【Python】基础知识(语句,函数)

目录Python基础语法接上次的知识点补充顺序语句条件/分支语句语法格式空语句 pass循环语句while 循环For循环continue和break函数语法格式调用函数/使用函数函数参数函数返回值变量作用域函数执行过程链式调用嵌套调用函数递归参数默认值关键字参数写在前面🍎&#…

全双工物联网远程控制门禁设计方案

远程控制物联网方案 (此方案成本250元~300元优点是远低于产家报价400~500,使用自家服务器扩展成本低) 组装后连线效果实物图 网关配置 工具见下面产品说明 通讯是TCP/IP协议,一定要配置好服务器地址与网关 通讯是TCP/IP协议,一定要配置好服务器地址与网关 通讯是TCP…

照片人像模糊怎么调?两分钟教会你

有时候我们在拍摄一些照片的时候,可能会因为一些特殊原因而导致照片中的人脸出现模糊的情况,从而使我们无法对照片进行浏览,这时最简单的方法就是借助一些软件来修复模糊的人脸照片,那你们知道如何利用这些软件进行操作吗&#xf…

机器视觉_HALCON_1.了解HALCON

文章目录HALCON概述1. 关于HALCON2. HALCON XL3. 了解HALCON3.1. 通用性说明3.2. 安装HALCON3.3. 继续了解HALCON的第一步4. 更多HALCON资料5. 结语HALCON概述 1. 关于HALCON HALCON是MVTec公司的一款软件产品。 它是一款风靡全球的、用于机器视觉的标准软件,并带…

React - Ant Design3.x版本安装使用,并按需引入和自定义主题

React - Ant Design3.x版本安装使用,并按需引入和自定义主题一. 安装使用 antd二.antd 高级配置安装 react-app-rewired,对 create-react-app 的默认配置进行自定义安装 babel-plugin-import ,按需加载组件代码和样式自定义主题An…

ssh外网访问内网服务器

现在有这样一个情况,实验室有自己的服务器(内网),并且有相关老师进行维护(公网),我们可以在内网用内网ip访问服务器,如果我们在家里只能通过公网进行登录。但是我在实验室有一个小服…

Python学习基础笔记十一——编码

1、Python编码解码: 文件转换为二进制,就是编码。 二进制转换为文本,就是解码。 2、ASCII编码: 字符‘a’在ASCII码表中的对应的数据就是97,二进制为1100001。 # 查看‘a’的ASCII编码 print(ord(a))# 转换为二进制…

04.OpenWrt-连接有线网络

04.OpenWrt-连接有线网络 路由器作为重要的网络设备不光可以连接网络,也可是通过有线或者无线的方式给其他设备连接网络. 4.1 网络的基础知识 4.1.1 常用的网络设备 光调制解调器:俗称 光猫 .现在使用的基本都是光纤入户,光纤中传递的是光信号,进过光猫的转换为电信号.安装…

Golang Channel 实战技巧和说明

文章目录Golang Channel 实战技巧和说明Channel 的一些实战说明关于 close Channelclose Channel 的一些说明v, ok : <-ch 判断是否 close优雅判断是否 close 的封装for-range 读取 Channel 数据select 读写 Channel 数据Channel 的读写超时机制【select timeout】TryEnque…

180H_FPGA时钟结构

PLL 端口信号解释 信号名含义PLL_PWDpower downpll_rst复位PLLclkin_dsel0:clkin1作为参考时钟;1:clkin2作为参考时钟clkfb外部反馈时钟输入dyn_idiv[5:0]动态 input divider&#xff08;输入分频器&#xff09; 分频系数 0&#xff1a;64分频&#xff1b;1:63分频&#xff1b…

HTML+CSS-项目:学成在线

项目&#xff1a;学成在线 Date: September 9, 2022 Summary: 创建根目录、创建网页布局 0. 项目预览&#xff1a; 1. 创建根目录&#xff1a; 目标&#xff1a;创建项目根目录 根目录&#xff1a;网站的第一级文件夹 根目录&#xff1a; 图片文件夹: images样式文件夹: C…

redis 的java客户端 基础(一)

目录 一、redis的客户端语言支持 二、Jedis快速入门 2.1 Jedis连接池 2.1.1 创建Jedis的连接池 三、SpringDataRedis 3.1 快速入门SpringDataRedis 一、redis的客户端语言支持 在Redis官网中提供了各种语言的客户端&#xff0c;地址&#xff1a;https://redis.io/resources/…

[oeasy]python0020换行字符_feed_line_lf_反斜杠n_B语言_安徒生童话

换行字符 回忆上次内容 struct包可以让我们使用封包格式 把数字封包到字节里 pack函数负责封包unpack函数负责解封 我们通过封到不同的字节状态 遍历了一次ascii码还是有那片黑色的区域 好像是一片黑暗森林&#xff01;那里面到底有些什么秘密&#xff1f;&#x1f914; 我们这…

2022大厂面试秘籍Java岗:中间件+算法+HTTP+线程+虚拟机+分布式

前言 很多朋友对面试不够了解&#xff0c;不知道如何准备&#xff0c;对面试环节的设置以及目的不够了解&#xff0c;因此成功率不高。通常情况下校招生面试的成功率低于1%&#xff0c;而社招的面试成功率也低于5%&#xff0c;所以对于候选人一定要知道设立面试的初衷以及每个…

CSS 选择器

目录 1、导语 2、css基本选择器 1&#xff09;、标签选择器 2&#xff09;类选择器 3&#xff09;ID选择器 4&#xff09;通配符选择器 3、css组合选择器 1&#xff09;标记类别选择器&#xff08;交集选择器&#xff09; 2&#xff09;后代选择器 3&#xff09;子选择器 4…

[足式机器人]Part3机构运动微分几何学分析与综合Ch02-2 平面机构离散运动鞍点综合——【读书笔记】

本文仅供学习使用 本文参考&#xff1a; 《机构运动微分几何学分析与综合》-王德伦、汪伟 《微分几何》吴大任 Ch02-2 平面机构离散运动鞍点综合2.3 鞍点圆2.3.1 鞍圆与二副连架杆R-R2.3.2 鞍圆误差2.3.3 四位置鞍圆2.3.4 五位置鞍圆2.3.5 多位置鞍圆2.3 鞍点圆 平面连杆机构中…

浅谈JVM(面试常考题)

文章目录JVM简介JVM 执行流程JVM运行时数据区(内存布局)程序计数器(线程私有)Java虚拟机栈(线程私有)堆(线程共享)方法区(线程共享)小结JVM类加载类加载的具体过程LoadingLinkingVerificationPreparationResolutionInitialization类加载的执行顺序双亲委派模型JVM中的垃圾回收机…

最新手工整理31省市自治区180+指标面板数据-各省份邮电和运输指标汇总(2002-2020)

1、数据来源&#xff1a;国家统计局 2、时间跨度&#xff1a;2002-2020 3、时间频率&#xff1a;年度 4、区域范围&#xff1a;31个省市⾃治区 5、邮电指标&#xff1a; 包裹数(万件)报刊期发数(万份)汇票业务(万笔)集邮业务量(万枚)固定本地电话通话时长(万分钟)固定长途…

流媒体技术基础-流媒体编码与协议

一、流媒体传输协议 1.实时传输协议RTP 针对多媒体数据流的一种传输协议&#xff0c;建立在UDP协议上&#xff0c;属于传输层协议。 定义互联网上传递音频和视频的标准数据包格式。RTP协议常用于流媒体系统&#xff08;配合RTCP协议&#xff09;、视频会议和视频电话系统&…