news 2026/4/18 10:05:21

【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/18 8:19:00

基于.Net 8创建 CAD勘测定界图(四)——填充及拉线标注

好的,之前的两篇文章大概介绍了一下关于做这个功能的背景和关于Aspose.CAD For .Net填充无效,转用ACadSharp创建红线、界址点符号、界址点标注以及边长标注的方法,具体看: 基于.Net 8创建 CAD勘测定界图(一&#xff09…

作者头像 李华
网站建设 2026/4/18 8:00:40

02. 缓存行

1.缓存行1.缓存行 CPU读取内存时, 并不是直接一个字节一个字节地读, 而是按照内存总线的位宽(比如64位, 即8字节)来传输数据; 但是CPU的缓存系统(Cache)在从内存中加载数据时, 是以缓存行(Cache Line)为单位的a.内存总线的传输单位: "每次内存读写操作通过总线传输的数据量…

作者头像 李华
网站建设 2026/4/18 8:06:13

32、深入探索vi编辑器:参数配置与命令缩写技巧

深入探索vi编辑器:参数配置与命令缩写技巧 在UNIX系统中,vi编辑器是一款功能强大且广泛使用的工具。它提供了丰富的配置选项和灵活的命令缩写功能,能够极大地提高编辑效率。本文将详细介绍vi编辑器的参数配置和命令缩写的相关知识和操作方法。 1. 配置vi参数 vi编辑器拥有…

作者头像 李华
网站建设 2026/4/18 6:58:34

46、UNIX相关知识与组织介绍

UNIX相关知识与组织介绍 1. 推荐组织 在UNIX相关领域,有许多专业组织发挥着重要作用,以下是一些推荐的组织: | 组织名称 | 简介 | 官网 | | ---- | ---- | ---- | | ACM | 世界上历史最悠久、规模最大的教育和科学计算协会。自1947年以来,ACM为信息、思想和发现的交流…

作者头像 李华