RTSP协议分析
一、RTSP 方法总览RTSP 是一种基于文本的控制协议所有交互由请求Request和响应Response构成。方法定义在 RFC 2326 中核心方法如下方法方向说明OPTIONSC→S查询服务器支持的方法列表也可用于保活DESCRIBEC→S请求媒体流的 SDP 描述信息编码类型、帧率等SETUPC→S配置传输方式TCP/UDP建立会话PLAYC→S启动或恢复媒体传输PAUSEC→S暂停媒体传输可用 PLAY 恢复TEARDOWNC→S终止会话停止数据传输GET_PARAMETERC→S获取会话参数也常用于保活SET_PARAMETERC→S设置会话参数推荐的保活方法此外推流场景使用ANNOUNCEC→S和RECORDC→S替代 DESCRIBE 和 PLAY。二、拉流信令流程客户端拉流2.1 完整信令时序客户端 服务器 │ │ │──── OPTIONS rtsp://... RTSP/1.0 ────────►│ ① 查询方法 │◄─── 200 OK (Public: ...) ───────────────│ │ │ │──── DESCRIBE rtsp://... RTSP/1.0 ───────►│ ② 请求SDP │ Accept: application/sdp │ │◄─── 200 OK (SDP正文) ───────────────────│ │ │ │──── SETUP rtsp://.../track1 RTSP/1.0 ───►│ ③ 建立传输通道 │ Transport: RTP/AVP/TCP;unicast; │ │ interleaved0-1 │ │◄─── 200 OK (Session: 12345678) ─────────│ │ │ │──── PLAY rtsp://... RTSP/1.0 ───────────►│ ④ 开始播放 │ Session: 12345678 │ │◄─── 200 OK ─────────────────────────────│ │ │ │◄═══════ RTP 数据流 ════════════════════│ ⑤ 媒体传输 │ │ │──── TEARDOWN rtsp://... RTSP/1.0 ───────►│ ⑥ 结束会话2.2 OPTIONS 示例客户端询问服务器支持哪些方法C→S: OPTIONS rtsp://192.168.1.100:554/live RTSP/1.0 CSeq: 1 User-Agent: MyClient/1.0S→C: RTSP/1.0 200 OK CSeq: 1 Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, SET_PARAMETERPublic头列出了服务器支持的所有方法。这一步可选但推荐执行用于确认服务器能力。2.3 DESCRIBE 示例请求媒体描述服务器返回 SDPC→S: DESCRIBE rtsp://192.168.1.100:554/live RTSP/1.0 CSeq: 2 Accept: application/sdpS→C: RTSP/1.0 200 OK CSeq: 2 Content-Type: application/sdp Content-Base: rtsp://192.168.1.100:554/live/ Content-Length: 376 v0 o- 123456 123456 IN IP4 192.168.1.100 sLive Stream t0 0 acontrol:* mvideo 0 RTP/AVP 96 artpmap:96 H264/90000 afmtp:96 packetization-mode1;profile-level-id42C01E;sprop-parameter-setsZ0LAHtoCgPaEAAAAwAQAAAMDGxQ,aM4yyA acontrol:streamid0 maudio 0 RTP/AVP 97 artpmap:97 MPEG4-GENERIC/48000/2 afmtp:97 profile-level-id1;modeAAC-hbr;sizelength13;indexlength3;indexdeltalength3;config1190 acontrol:streamid1关键头字段Content-Type: application/sdp响应体是 SDPContent-BaseSDP 中相对 control URL 的基础路径acontrol:streamid0视频流的控制标识后续 SETUP 使用2.4 SETUP 示例为每一路媒体流分别发送 SETUP。TCP 交织模式推荐C→S: SETUP rtsp://192.168.1.100:554/live/streamid0 RTSP/1.0 CSeq: 3 Transport: RTP/AVP/TCP;unicast;interleaved0-1UDP 模式C→S: SETUP rtsp://192.168.1.100:554/live/streamid0 RTSP/1.0 CSeq: 3 Transport: RTP/AVP;unicast;client_port49170-49171服务器响应S→C: RTSP/1.0 200 OK CSeq: 3 Transport: RTP/AVP/TCP;unicast;interleaved0-1 Session: 12345678关键点interleaved0-1RTP 走通道 0RTCP 走通道 1复用 RTSP 的 TCP 连接client_port49170-49171客户端指定接收端口UDP 模式Session: 12345678后续所有请求必须携带此标识音频流也需要单独 SETUP指定streamid1使用interleaved2-3。2.5 PLAY 示例C→S: PLAY rtsp://192.168.1.100:554/live RTSP/1.0 CSeq: 4 Session: 12345678 Range: npt0-Range: npt0-表示从头播放到尾。直播场景可省略 Range。服务器响应后开始通过 RTP 发送媒体数据。2.6 PAUSE 与恢复C→S: PAUSE rtsp://192.168.1.100:554/live RTSP/1.0 CSeq: 5 Session: 12345678恢复时重新发送 PLAY可不带 Range从暂停点继续。2.7 TEARDOWN 示例C→S: TEARDOWN rtsp://192.168.1.100:554/live RTSP/1.0 CSeq: 6 Session: 12345678S→C: RTSP/1.0 200 OK CSeq: 6 Session: 12345678会话终止服务器释放所有资源。三、推流信令流程推流用ANNOUNCE和RECORD替代拉流的 DESCRIBE 和 PLAY3.1 ANNOUNCE 示例客户端主动告知服务器要推什么流SDP 由客户端生成C→S: ANNOUNCE rtsp://server.example.com/live/test RTSP/1.0 CSeq: 1 Content-Type: application/sdp Content-Length: 320 v0 o- 0 0 IN IP4 192.168.1.50 sLive Push t0 0 acontrol:* mvideo 0 RTP/AVP 96 artpmap:96 H264/90000 afmtp:96 packetization-mode1;profile-level-id42C01E;sprop-parameter-setsZ0LAHtoCgPaEAAAAwAQAAAMDGxQ,aM4yyA acontrol:streamid0S→C: RTSP/1.0 200 OK CSeq: 13.2 SETUP 与 RECORDSETUP 与拉流相同TCP 交织模式C→S: SETUP rtsp://server.example.com/live/test/streamid0 RTSP/1.0 CSeq: 2 Transport: RTP/AVP/TCP;unicast;interleaved0-1S→C: RTSP/1.0 200 OK CSeq: 2 Session: 87654321 Transport: RTP/AVP/TCP;unicast;interleaved0-1RECORD 启动推流C→S: RECORD rtsp://server.example.com/live/test RTSP/1.0 CSeq: 3 Session: 87654321S→C: RTSP/1.0 200 OK CSeq: 3 Session: 87654321之后客户端开始通过 RTP 发送媒体数据。推流与拉流的核心区别DESCRIBE服务器→客户端变为 ANNOUNCE客户端→服务器PLAY 变为 RECORD。四、SDP 参数逐项详解SDP 由会话级描述和媒体级描述组成格式为typevalue。4.1 会话级字段字段示例值含义v0SDP 版本固定为 0o- 123456 123456 IN IP4 192.168.1.100会话发起者用户名-会话 ID123456版本123456网络类型IN地址类型IP4地址sLive Stream会话名称t0 0起始时间 0结束时间 0无限制cIN IP4 0.0.0.0连接地址可选媒体级可覆盖acontrol:*聚合控制 URL*表示使用 Content-Base4.2 视频媒体行mvideo 0 RTP/AVP 96格式mmedia port proto fmt参数值含义mediavideo媒体类型port0端口占位符实际端口由 SETUP 协商protoRTP/AVPRTP over UDPRTP/AVP/TCP表示 TCPfmt96动态载荷类型96-1274.3 视频编码行artpmap:96 H264/90000格式artpmap:pt encoding/clock rate参数值含义pt96载荷类型与 m 行对应encodingH264RFC 6184 规定的编码名clock rate90000H.264 的 RTP 时钟固定为 90 kHz4.4 H.264 的afmtp行afmtp:96 packetization-mode1;profile-level-id42C01E;sprop-parameter-setsZ0LAHtoCgPaEAAAAwAQAAAMDGxQ,aM4yyApacketization-mode值含义0单 NAL 模式大帧会被拒绝1非交错分片模式FU-A主流选择2交错模式极少使用profile-level-id是 3 字节十六进制字节示例42C01E含义第 1 字节42 66Baseline Profile第 2 字节C0 11000000Constrained Baseline约束标志第 3 字节1E 30Level 3.0常用 Level1E(3.0)、1F(3.1)、28(4.0)、29(4.1)、2A(4.2)。sprop-parameter-sets是逗号分隔的 Base64 编码 NALZ0LAHtoCgPaEAAAAwAQAAAMDGxQ解码后首字节0x67是SPSNAL type 7aM4yyA解码后首字节0x68是PPSNAL type 8为什么必须带外传输 SPS/PPS解码器在解码任何帧之前需要 SPS/PPS 初始化。带外传输可以避免等待首个 I 帧降低首帧延迟。4.5 音频媒体行maudio 0 RTP/AVP 97结构与视频相同载荷类型97与视频的96区分。4.6 音频编码行artpmap:97 MPEG4-GENERIC/48000/2参数值含义encodingMPEG4-GENERICAAC 在 RTP 中的标准名非AACclock rate48000采样率 48 kHz第 4 参数2声道数2 立体声4.7 AAC 的afmtp行afmtp:97 profile-level-id1;modeAAC-hbr;sizelength13;indexlength3;indexdeltalength3;config1190参数值含义profile-level-id1MPEG-4 Audio Profile Level 1modeAAC-hbrAAC 高比特率模式sizelength13AU-size 字段 13 比特indexlength3AU-Index 字段 3 比特indexdeltalength3AU-Index-delta 字段 3 比特config1190AudioSpecificConfig 十六进制config1190解码0x1190 0001 0001 1001 0000字段比特值含义audioObjectType5000102AAC-LCsamplingFrequencyIndex40011348000 HzchannelConfiguration400102立体声GASpecificConfig3000帧长 1024没有config参数AAC 解码器完全无法初始化。这是音频无声的最常见原因。4.8acontrol属性acontrol:streamid0用于指定媒体流的控制 URL。会话级acontrol:*表示聚合控制媒体级指定单个轨道的控制标识。后续 SETUP 请求的 URL 就是Content-Base 媒体级 control 值。五、Transport 头参数详解SETUP 请求的Transport头决定传输方式。5.1 TCP 交织模式Transport: RTP/AVP/TCP;unicast;interleaved0-1参数值含义协议RTP/AVP/TCPRTP over TCP传输类型unicast单播interleaved0-1RTP 通道 0RTCP 通道 1RTP 包直接嵌入 RTSP 的 TCP 流中用$字符 通道号标识。5.2 UDP 模式Transport: RTP/AVP;unicast;client_port49170-49171参数含义client_port49170-49171客户端接收端口RTP 49170RTCP 49171server_port6256-6257响应中服务器发送端口UDP 延迟更低但容易丢包TCP 更可靠但有队头阻塞。六、完整 SDP 示例与参数速查H.264 AAC 完整 SDPv0 o- 123456 123456 IN IP4 192.168.1.100 sLive Stream t0 0 acontrol:* mvideo 0 RTP/AVP 96 artpmap:96 H264/90000 afmtp:96 packetization-mode1;profile-level-id42C01E;sprop-parameter-setsZ0LAHtoCgPaEAAAAwAQAAAMDGxQ,aM4yyA acontrol:streamid0 maudio 0 RTP/AVP 97 artpmap:97 MPEG4-GENERIC/48000/2 afmtp:97 profile-level-id1;modeAAC-hbr;sizelength13;indexlength3;indexdeltalength3;config1190 acontrol:streamid1参数速查表SDP 字段视频H.264音频AAC载荷类型9697编码名H264MPEG4-GENERIC时钟频率9000048000关键 fmtp 参数packetization-mode,profile-level-id,sprop-parameter-setsconfig,mode,sizelength控制标识acontrol:streamid0acontrol:streamid1七、小结RTSP 的核心是信令与数据分离RTSP 负责控制OPTIONS/DESCRIBE/SETUP/PLAY/TEARDOWNRTP 负责传输媒体数据。拉流流程OPTIONS → DESCRIBE → SETUP → PLAY → TEARDOWN推流流程OPTIONS → ANNOUNCE → SETUP → RECORD → TEARDOWNSDP 核心m行定义媒体artpmap绑定编码afmtp携带 H.264 的 SPS/PPS 和 AAC 的config理解这些信令细节是排查 RTSP 兼容性问题的基础——从“花屏”到“无声”从“连接超时”到“会话断开”根源往往就在这些参数之中。

相关新闻

微信支付、支付宝投诉太多盯不过来?聊聊客诉自动化处理中台的实现思路

微信支付、支付宝投诉太多盯不过来?聊聊客诉自动化处理中台的实现思路

别再人工盯投诉了:一套客诉自动化处理中台的实现思路 一、做支付的都懂这种痛 只要在收钱,投诉就躲不掉。团队之前的处理流程基本靠人肉: 每天登录微信支付商户平台、支付宝商家中心挨个翻投诉;多个商户号来回切换,…

2026/10/10 1:48:02 阅读更多 →
2026年缙云新碧新建周边哪家叉车服务口碑好

2026年缙云新碧新建周边哪家叉车服务口碑好

在缙云新碧新建开工厂、管仓库、跑工地的人,多半有过类似糟心经历:赶外贸订单凌晨要装车,常租的叉车排不上队,临时找的车要么等三四个小时到不了,要么到场后坐地起价,轻则耽误工期,重则赔上违约…

2026/10/10 1:00:00 阅读更多 →
户外充电桩屏幕,夏天暴晒真的容易坏吗?

户外充电桩屏幕,夏天暴晒真的容易坏吗?

做充电桩设备的朋友,大概率都踩过屏幕暴晒的坑。很多客户选型时只关注基础显示功能,忽略户外高温、强光、紫外线的考验,等到夏天一到,屏幕故障扎堆出现,售后忙到头疼。最近就有个做直流充电桩的客户找到我们&#xff0…

2026/10/9 21:16:15 阅读更多 →

最新新闻

可视化运维监控实战:让故障可见、可控、可定位

可视化运维监控实战:让故障可见、可控、可定位

做运维的最怕什么?不是半夜被叫醒,而是被叫醒之后面对一墙壁的监控数据,却不知道线上到底哪里出了问题。过去几年我搭建过几套运维监控体系,从最早用开源的监控组件拼拼凑凑,到后来逐步落地可视化运维监控平台&#xf…

2026/10/10 21:48:37 阅读更多 →
分支结构避坑指南:从if-else到switch的编程思维

分支结构避坑指南:从if-else到switch的编程思维

很多人刚学编程的时候,变量和输入输出都还能跟上,一到分支结构就开始犯迷糊:明明语法都认识,代码也能看懂,轮到自己写就总感觉逻辑拧巴。我刚开始带新人的时候,发现十个人里有六七个会栽在这一块。但其实分…

2026/10/10 21:48:37 阅读更多 →
课堂行为检测数据集:VOC与YOLO格式转换及YOLO训练实践

课堂行为检测数据集:VOC与YOLO格式转换及YOLO训练实践

简介:面向学生课堂行为检测场景,这份VOCYOLO双格式数据集包含5622张课堂实景图片,已按7个类别完成目标标注,可直接用于训练课堂行为识别模型、算法评测或教学实验,尤其适合需要现成标注数据的深度学习研究者。压缩包采…

2026/10/10 21:48:37 阅读更多 →
玩过 Stable Diffusion 就会用:从 SD 工作流平移 LTX-2.5 的 10 处关键差异

玩过 Stable Diffusion 就会用:从 SD 工作流平移 LTX-2.5 的 10 处关键差异

玩过 Stable Diffusion 就会用:从 SD 工作流平移 LTX-2.5 的 10 处关键差异 【免费下载链接】LTX-2.5 项目地址: https://ai.gitcode.com/hf_mirrors/Lightricks/LTX-2.5 如果你是 Stable Diffusion 的老玩家,第一次打开 LTX-2.5 的模型目录时大…

2026/10/10 21:48:37 阅读更多 →
别把 Supabase 当神:开源 BaaS 的隐藏成本与免费陷阱

别把 Supabase 当神:开源 BaaS 的隐藏成本与免费陷阱

别把 Supabase 当神:开源 BaaS 的隐藏成本与免费陷阱 【免费下载链接】supabase The Postgres development platform. Supabase gives you a dedicated Postgres database to build your web, mobile, and AI applications. 项目地址: https://gitcode.com/GitHub…

2026/10/10 21:48:37 阅读更多 →
impeccable:一款面向OpenAPI契约的Python自动化校验工具

impeccable:一款面向OpenAPI契约的Python自动化校验工具

我无法基于当前输入生成符合要求的博文。原因如下:输入中仅提供了项目标题"impeccable",以及空置的“相关热搜词”“最新网络热词”和完全空白的搜索内容块(),未提供任何实质性的项目正文、关键词列表或摘要…

2026/10/10 21:47:36 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →