news 2026/4/23 18:40:40

【myTinyRtspServer】RTSP协议整理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【myTinyRtspServer】RTSP协议整理

1.RTSP协议概述

RTSP标准手册:
https://datatracker.ietf.org/doc/html/rfc2326

RTSP(Real Time Streaming Protocaol),RFC2326,实时流传输协议,属于应用层协议,此协议定义了一对多应用程序如何有效地通过IP网络传送多媒体数据。RTSP在体系结构上位于RTP和RTCP之上,使用TCP和UDP完成数据传输

Real-time Transport Protocol或简写RTP,RTP协议详细说明了在互联网上传递音频和视频的标准数据包格式。它是创建在UDP协议之上

Real-time Transport Control Protocol或RTP Control Protocol或简写RTCP)是实时传输协议(RTP)的一个姐妹协议。RTCP由RFC 3550定义(取代作废的RFC 1889)。RTP 使用一个 偶数 UDP port ;而RTCP 则使用 RTP 的下一个 port,也就是一个奇数 port。RTCP与RTP联合工作,RTP实施实际数据的传输,RTCP则负责将控制包送至电话中的每个人。其主要功能是就RTP正在提供的服务质量做出反馈。

简单的说,以上三个协议就是负责以下图片内容:

1.1 基本特性

  • 工作方式:基于文本的客户端-服务器协议
  • 默认端口: 554 (TCP/UDP)
  • 协议定位: 介于应用层和传输层之间
  • 与HTTP关系:语法和操作类似HTTP,但不兼容

2.RTSP协议特点

1.控制协议:仅负责媒体会话控制,不直接传输媒体数据

2.状态协议:维护会话状态

3.多传输支持:可与RTP/RTCP、TCP、UDP等配合使用

4.时间敏感性:支持NTP时间戳

5.扩展性:支持自定义方法和头部

3.RTSP核心方法

方法功能描述
OPTIONS查询服务器支持的方法
DESCRIBE获取媒体描述信息(SDP格式)
ANNOUNCE客户端或服务器更新会话描述
SETUP建立传输会话,指定传输方式
PLAY开始数据传输
PAUSE暂停数据传输
RECORD启动媒体录制
TEARDOWN终止会话,释放资源
GET_PARAMETER查询参数值
SET_PARAMETER设置参数值

4.RTSP重要头部字段

头部字段说明
CSeq命令序列号,用于匹配请求响应
Session会话标识符
Transport指定传输参数(RTP/AVP;unicast;client_port=8000-8001)
Range指定播放时间范围
Authorization认证信息
Content-Type内容类型(通常为application/sdp)
Content-Length内容长度

5.RTSP传输模式

RTP over UDP

  • 媒体数据通过RTP over UDP传输
  • 控制命令通过RTSP over TCP传输
  • 需要打开额外端口

2.RTP over TCP

  • 媒体数据和控制命令共用TCP连接
  • 媒体数据以$前缀标识
  • 格式: $ + 1字节通道号 + 2字节长度 + 数据

3.Multicast

  • 服务器选择组播地址和端口
  • 客户端加入组播组接收数据

6.RTSP状态码

状态码含义
200OK - 请求成功
400Bad Request - 错误请求
401Unauthorized - 未授权
404Not Found - 未找到
405Method Not Allowed - 方法不允许
456Header Field Not Valid - 头部字段无效
461Unsupported Transport - 不支持的传输
500Internal Server Error - 服务器内部错误
503Service Unavailable - 服务不可用

7.SDP协议(会话描述协议)

RTSP使用SDP描述媒体信息,包含:

  • 会话名称和目的
  • 媒体类型(视频/音频等)
  • 传输协议(RTP/UDP等)
  • 媒体格式(H.264/MPEG-4等)
  • 媒体传输地址和端口

示例SDP片段:

v=0 o=- 123456 1 IN IP4 192.168.1.1 s=Example Stream t=0 0 m=video 0 RTP/AVP 96 a=rtpmap:96 H264/90000 a=control:track1

8.RTSP协议完整交互流程

RTSP 交互 = OPTIONS → DESCRIBE → SETUP × N → PLAY → [PAUSE] → TEARDOWN,配合 RTP/RTCP 完成媒体传输。

以客户端要播放的URL为 tsp://192.168.1.100:554/stream 的视频流

8.1 OPTIONS - 探测服务器

作用:查询服务器支持哪些RTSP方法

// Client -> Server OPTIONS rtsp://192.168.1.100:554/stream RTSP/1.0 CSeq: 1 User-Agent: LibVLC/3.0 // Server → Client RTSP/1.0 200 OK CSeq: 1 Public: OPTIONS, DESCRIBE, SETUP, PLAY, PAUSE, TEARDOWN, GET_PARAMETER

User-Agent:当前网路请求是以LibVLC 3.0版本库的程序发起
CSeq : 请求序列号
Public:列出服务器支持的方法

8.2 DESCRIBE - 获取媒体描述(SDP)

作用:获取流的元数据,比如:编码格式,分辨率,通道数等,以SDP的格式返回

// Clinet → Server DESCRIBE rtsp://192.168.1.100:554/stream RTSP/1.0 CSeq: 2 // 命令序列号 Accept: application/sdp // 期望Server以SDP格式返回描述 User-Agent: LibVLC/3.0 // 客户端是基于VLC构建的应用 // Server → Client RTSP/1.0 200 OK CSeq: 2 Content-Base: rtsp://192.168.1.100:554/stream/ // 基准URL,后续SETUP中请求的轨道将基于此拼接 Content-Type: application/sdp // 响应体是SDP格式,符合客户端Accept要求 Content-Length: 376 // SDP 内容长度为 376 字节,用于接收端判断数据是否完整。 // 以下为sdp主体内容 v=0 o=- 123456 1 IN IP4 192.168.1.100 s=Streaming Session c=IN IP4 0.0.0.0 t=0 0 m=video 0 RTP/AVP 96 a=rtpmap:96 H264/90000 a=fmtp:96 packetization-mode=1;profile-level-id=42001F;sprop-parameter-sets=Z0IAH5WoFAFuQA==,aM48gA== a=control:trackID=1 m=audio 0 RTP/AVP 97 a=rtpmap:97 MPEG4-GENERIC/44100/2 a=control:trackID=2

sdp主体逐行解析:

  • 会话级描述(session-level)
含义
v=0SDP协议版本号(目前只有0)
o=- 123456 1 IN IP4 192.168.1.100会话所有者/创建者信息:
- : 用户名(匿名)
123456 : 会话ID
1 : 版本号
IN IP4 192.168.1.100:网络类型+创建者IP
s=Streaming Session会话名称
c=IN IP4 0.0.0.0连接信息,表示媒体流地址不会在会话级指定,而在每个媒体行(m=)中单独定义
t=0 0时间描述:start = 0,stop = 0,表示永久会话(无结束时间),使用于直播流
  • 媒体级描述(Media-level) - 视频轨道
含义
m=video 0 RTP/AVP 96媒体行:
video : 媒体类型
0 : 端口号(RTSP 中通常为 0,实际端口由 SETUP 协商)
RTP/AVP : 传输协议(RTP Audio/Video Profile)
96 : RTP payload type(动态类型)
a=rtpmap:96 H264/90000属性行:
96对应H.264编码,时钟频率90000Hz(视频标准)
a=fmtp:96 …格式参数
packetization-mode = 1: 支持交错打包
profile-level-id:H.264 BaseLine Profile Level 3.1
sprop-parameter-sets:SPS/PPS基础编码,解码器初始化必需
a=control:trackID=1关键字段:
用于构造SETUP请求的URL:
rtsp://…/stream/trackID=1
  • 媒体级描述 - 音频轨道
含义
m=audio 0 RTP/AVP 97音频媒体,payload type 97。
a=rtpmap:97 MPEG4-GENERIC/44100/2AAC-LC 音频(MPEG4-GENERIC),采样率 44.1kHz,双声道
a=control:trackID=2音频轨道控制 URL 后缀为trackID=2

8.3 SETUP - 建立媒体通道

作用:为每个媒体轨道(如 video、audio)协商传输参数(UDP/TCP、端口、单播/组播)。

比如:设置视频轨道(trackID=1)

// Client → Server SETUP rtsp://192.168.1.100:554/stream/trackID=1 RTSP/1.0 CSeq: 3 Transport: RTP/AVP;unicast;client_port=5000-5001 User-Agent: LibVLC/3.0 // Server → Client RTSP/1.0 200 OK CSeq: 3 Session: 12345678;timeout=60 Transport: RTP/AVP;unicast;source=192.168.1.100;server_port=6000-6001;client_port=5000-5001

Transport :

RTP/AVP:使用RTP over UDP(RTP/AVP/TCP表示TCP interleaved 模式)

client_port = 5000-5001:客户端RTP端口5000,RTCP端口5001

server_port=6000-6001: 服务器分配的发送端口

Session : 12345678:会话ID,后续所有请求必须携带此字段

若有音频轨道,需对trackID = 2再发一次SETUP

Note:

TCP intgerleaved模式(RTP over TCP),当防火墙阻断UDP时,可使用TCP传输RTP:

// SETUP 请求 Transport: RTP/AVP/TCP;unicast;interleaved=0-1 // 响应 Transport: RTP/AVP/TCP;unicast;interleaved=0-1

interleaved=0-1 : RTP 包用$0前缀,RTCP 用$1,嵌入在 RTSP TCP 连接中

8.4 PLAY - 开始播放媒体流

作用:命令服务器开始通过RTP发送媒体数据

// Client → Server PLAY rtsp://192.168.1.100:554/stream RTSP/1.0 CSeq: 4 Session: 12345678 Range: npt=0.000- // Server → Client RTSP/1.0 200 OK CSeq: 4 Session: 12345678 RTP-Info: url=trackID=1;seq=12345;rtptime=789012345

Range: npt=0.000- : 从时间0开始播放(npt = Normal Play time)

RTP-Info: url=trackID=1;seq=12345;rtptime=789012345 : 返回初始RTP序列号和时间戳,用于同步

此时服务器开始向客户端5000/5001端口发送RTP/RTCP包

8.5 PAUSE/RESUME - 暂停/恢复

// 暂停 PAUSE rtsp://... RTSP/1.0 CSeq: 5 Session: 12345678 // 恢复(再次发送 PLAY) PLAY rtsp://... RTSP/1.0 CSeq: 6 Session: 12345678 Range: npt=10.000- // 从 10 秒处继续

8.6 TEARDOWN - 终止会话

作用:释放服务器资源,关闭RTP流

// Client → Server TEARDOWN rtsp://192.168.1.100:554/stream RTSP/1.0 CSeq: 7 Session: 12345678 // Server → Client RTSP/1.0 200 OK CSeq: 7 Session: 12345678 Connection: Close

服务器停止发送RTP数据,销毁会话上下文

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 13:44:31

AI编程教学:手把手搭建AI编程环境(IDE/插件/CLI方案)

2025年是新的AI元年,随着AI大模型和智能体技术的迅速发展,AI编程工具已形成多样化的生态系统。 如今,学编程不懂AI工具几乎等于吃饭没有筷子(确信)。 之前我们分享了AI编程工具cursor和国产的trae cn,更有…

作者头像 李华
网站建设 2026/4/23 8:36:53

养老院管理|基于springboot + vue养老院管理系统(源码+数据库+文档)

养老院管理 目录 基于springboot vue养老院管理系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于springboot vue养老院管理系统 一、前言 博主介绍&#xff1a…

作者头像 李华
网站建设 2026/4/23 2:23:15

计算机组成原理要点

计算机组成原理复习要点 课程摘要 本次复习主要围绕计算机组成原理的各个章节展开,包括存储系统、指令系统、中央处理器、输入输出系统等。其中,存储系统部分重点讲解了主存储器、外部存储器以及存储系统的性能指标;指令系统部分强调了指令格…

作者头像 李华
网站建设 2026/4/23 10:10:16

操作系统与数据结构核心知识点解析

操作系统与数据结构核心知识点解析 课程摘要 本文详细解析了操作系统和数据结构的核心知识点,包括操作系统的基本概念、内核与用户模式、中断异常、系统调用、引导过程,以及操作系统的目标和功能。同时,也深入讲解了进程与线程的引入、状态与…

作者头像 李华
网站建设 2026/4/23 10:11:13

Redis篇6——Redis深度剖析:从单机到集群,Redis高可用进化史

在前面的文章中,我们聊了 Redis 的持久化、锁机制以及热 Key 问题。今天,我们跳出具体的命令细节,从宏观架构的角度来看看 Redis 是如何一步步“做大做强”的。在生产环境中,我们几乎不会只部署一台 Redis。为什么?因为…

作者头像 李华
网站建设 2026/4/23 10:11:01

AI 时代,程序员的核心竞争力是什么?

从确定性到概率迷雾 Martin Fowler——《重构》的作者、敏捷宣言的起草人之一,对当前 AI 浪潮发出了警告:这不是工具升级,这是物种突变。我们正在从确定性的工业时代,跌进非确定性的概率迷雾。以前程序员是计算机世界的上帝&#…

作者头像 李华