当前位置: 首页 > news >正文

【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数据,销毁会话上下文

http://www.cnnetsun.cn/news/137745.html

相关文章:

  • Kotaemon在华为云上的部署实践:全流程记录
  • 校园便利平台|基于springboot + vue校园便利平台系统(源码+数据库+文档)
  • 38、Linux 脚本编程:bc 计算器、数组与特殊技巧
  • 揭秘高亮车灯升级2025年值得推荐的TOP8车灯产品
  • WSL2 / Ubuntu 下用 SDKMAN 管理多版本 Java(项目级切换,真香)
  • 从“幻觉”到“诚实”:OpenAI 如何重新定义大模型的不靠谱问题
  • 高精度宽频段VG7050CDN压控晶体振荡器(VCXO),适用于通信与GPS设备等
  • 重塑艺术“原罪”?Nano Banana Pro 引入数字水印与归属协议:谷歌要给 AI 生图打上“DNA”标签?
  • 基于最优指派策略的弹道导弹目标数据关联算法
  • 通达信主图MACD
  • Mistral 3 模型解析与部署实战:从 Large 3 到 Mini-stral
  • 2025网络安全学习路线 非常详细 推荐学习
  • 测试必知:线上出现BUG,该怎么办!
  • 【C++】学生管理系统设计与实现丨SQLite数据库版本
  • 第55集科立分板机:PCB激光分板机的效率如何
  • 28、UNIX 终端操作与测试实用指南
  • 31、UNIX实用技巧:ASCII表与经典编辑器使用指南
  • 三大限流算法:滑动窗口、令牌桶、漏桶
  • # 深入浅出 Flutter:构建跨平台应用的利器
  • 40、深入了解UNIX系统管理:职责与求职指南
  • stm32毕设本科生任务书指导
  • 效率神器!QuickTextPaste 便携版:快速文本粘贴 + 预设管理全攻略
  • 向量在计算机图形学中的核心应用
  • SelectDB索引实战:从入门到精通,避开那些年我踩过的坑
  • 探秘常见机器人控制运动上位机源码:解锁多种运动算法
  • 9 个降AI率工具,继续教育学生必备!
  • 运用工具Postman快速导出python接口测试脚本
  • 研发管理软件:合规・协同・智能・灵活为汽车部件行业研发管理强力赋能——全星研发管理APQP软件系统功能解析
  • EMS-NT企业微电网能碳管理平台:架构、功能与应用研究
  • 读捍卫隐私10读后总结与感想兼导读