基于FFmpeg进行rtsp推流协议分析过程(详细教程)(全息讲解)

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

1.前言

RTSP(Real-Time Streaming Protocol,实时流传输协议)是一个应用层协议,主要用于控制音视频流的传输。RTSP 并不负责实际的数据传输,而是用于流的控制,如播放、暂停、停止等,它通常与其他协议(如 RTP)一起使用,后者负责媒体数据的实际传输。

2.RTSP 的核心功能

媒体流控制:RTSP 允许客户端控制流媒体的播放、暂停、停止等操作。
会话管理:RTSP 支持会话的建立和管理,允许在不同会话之间进行流的切换。
播放与暂停:RTSP 支持客户端发出播放(PLAY)和暂停(PAUSE)命令,控制流媒体的播放状态。
快进与快退:RTSP 可以实现快速跳跃(例如快进、快退),可以让用户从流的某个时间点开始播放。

3.RTSP 工作原理

RTSP 是基于请求/响应模式的协议,类似于 HTTP,但它更专注于媒体流控制。RTSP 服务器和客户端之间通过 TCP(通常使用 554 端口)或 UDP 通信。它支持基于文本的请求和响应格式,类似于 HTTP。

4.关键请求方法

OPTIONS:查询服务器支持的 RTSP 方法。
DESCRIBE:请求获取媒体的描述信息(如媒体格式、编码类型等)。响应通常是一个 SDP(Session Description Protocol)数据。
SETUP:用于设置流的传输路径、流的传输协议(如 RTP/RTCP)。通常客户端会通过该命令指定接收数据的端口。
PLAY:请求服务器开始播放媒体流。客户端通过这个命令向服务器发起播放操作,通常会包含媒体的时间戳或时间段。
PAUSE:暂停正在播放的媒体流。
TEARDOWN:结束会话,关闭媒体流。
SET_PARAMETER:向服务器发送流媒体的参数设置。
GET_PARAMETER:获取流媒体的当前参数设置。
我们采用最直观的方式进行分析,让我们在学习rtsp协议时没那么抽象和烦恼,客户端我们使用ffmpeg进行分析,服务端采用网络调式工具(如NetAssist.exe)进行分析

5.环境搭建和rtsp协议分析与解说

使用NetAssist.exe网络调试助手开启一个tcp服务,端口为8554。
在这里插入图片描述

客户端我们这定义为ffmpeg。将其他格式的视频流转码为rtsp。
这里通过ffmpeg和网络调试工具(如NetAssist.exe)来分析rtsp协议的奥妙。

Ffmpeg在Windows的下载与环境配置据滤过了,我们首先打开cmd控制台,输入:
在这里插入图片描述

ffmpeg -re -i input.mp4 -c copy -rtsp_transport tcp -f rtsp rtsp://127.0.0.1:8554/stream

1. -re
作用:-re 选项告诉 ffmpeg 以实时速度(real-time)读取输入文件。这意味着 ffmpeg 会以视频文件的原始播放速率进行处理,而不是尽可能快地处理数据。这对于直播流媒体非常重要,因为它模拟了实时流媒体的传输速率。
2. -i input.mp4
作用:-i 用来指定输入文件或流,这里是一个本地的 MP4 文件 input.mp4(命令中替换为自己本地的视频)。ffmpeg 将从这个文件读取视频和音频数据。
3. -c copy
作用:-c copy 表示复制输入流中的音频和视频编码,而不对其进行转码。这是非常高效的,因为它只会处理流的封装格式,不会对视频或音频内容进行解码和重新编码,减少了计算资源消耗。
4. -rtsp_transport tcp
作用:-rtsp_transport 指定 RTSP(Real-Time Streaming Protocol)传输的方式,tcp 表示使用 TCP 协议进行传输。默认情况下,RTSP 使用 UDP 协议,但在某些网络环境中,TCP 更加可靠,特别是防火墙或网络不稳定时。
5. -f rtsp
作用:-f 用于指定输出的流格式,这里是 rtsp,即指示输出数据为 RTSP 流格式。RTSP 是一种用于流媒体传输的协议。
6. rtsp://127.0.0.1:8554/stream
作用:这是输出 RTSP 流的 URL。127.0.0.1 是本地地址,表示 RTSP 服务器在本机运行;8554 是 RTSP 服务器监听的端口号;/stream 是流的名称,可以根据需求修改。这是客户端连接 RTSP 流时使用的地址。

收到了客户端发来的第一条rtsp协议(OPTIONS)

在这里插入图片描述

客户端请求:

OPTIONS rtsp://192.168.3.201:8554/stream RTSP/1.0
CSeq: 1
User-Agent: Lavf59.3.101

//------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.OPTIONS rtsp://192.168.3.201:8554/stream RTSP/1.0
OPTIONS 是 RTSP 的请求方法,用于询问服务器支持的操作。
rtsp://192.168.3.201:8554/stream 是客户端请求的流 URL,表示客户端查询关于 stream 这个流的信息。也可以理解为客户端希望查询服务器是否支持操作该流。
RTSP/1.0 表示使用的是 RTSP 协议版本 1.0。

2.CSeq: 1
CSeq 是请求的序列号,这里为 1,表示这是客户端发送的第一个请求,服务器在响应时会返回相同的 CSeq 值,确保请求和响应能够正确配对。

3.User-Agent: Lavf59.3.101
User-Agent 字段表示发送请求的客户端软件或库。在这个例子中,Lavf59.3.101 是 FFmpeg 的版本号。这个字段通常用于让服务器了解客户端使用的工具或软件信息。

服务端应答:

在这里插入图片描述

RTSP/1.0 200 OK
CSeq: 1
Public: DESCRIBE, SETUP, PLAY, PAUSE, TEARDOWN, OPTIONS, ANNOUNCE, GET_PARAMETER, SET_PARAMETER, REDIRECT

//------------------------------------------------------------------------------------------------------------------------------------------------------------------
1. RTSP/1.0 200 OK
RTSP/1.0:这是使用的 RTSP 协议版本(版本 1.0)。
200 OK:表示服务器成功处理并理解了客户端的 OPTIONS 请求,返回的状态码是 200,表示请求成功。

2. CSeq: 1
CSeq 是 RTSP 请求和响应的序列号,用于确保请求和响应是成对的。服务器在响应中返回与客户端请求中相同的 CSeq 值,以便客户端知道这个响应对应哪个请求。这里的值为 1,说明这是会话中的第一个请求和响应。

3. Public: DESCRIBE, SETUP, PLAY, PAUSE, TEARDOWN, OPTIONS, ANNOUNCE, GET_PARAMETER, SET_PARAMETER, REDIRECT
Public 字段列出了服务器支持的所有 RTSP 方法。每个方法对应不同的操作,客户端可以基于这些方法来与服务器交互。
以下是这些方法的含义:

DESCRIBE:请求服务器提供媒体流的描述信息(通常返回 SDP 或其他元数据),例如流的编解码信息、分辨率等。
SETUP:为流配置传输参数,例如选择协议(RTP、RTSP 等),并且通常用于建立与媒体流的传输通道。
PLAY:开始播放媒体流。客户端发送 PLAY 请求后,服务器开始实际传输流数据。
PAUSE:暂停媒体流的播放。客户端发送 PAUSE 请求后,服务器会停止传输流数据,但保持会话。
TEARDOWN:结束当前会话,关闭流的传输。发送 TEARDOWN 请求后,服务器会断开与客户端的连接。
OPTIONS:客户端查询服务器支持哪些 RTSP 方法。你看到的这个就是客户端发送的 OPTIONS 请求,服务器的响应中会列出支持的方法。
ANNOUNCE:客户端向服务器发送媒体描述信息。这通常用于流的发布,或媒体流的元数据的更新。
GET_PARAMETER:用于获取服务器或流的某些参数或状态。例如,可以用于查询流的控制状态。
SET_PARAMETER:设置或更新服务器或流的某些参数。例如,调整播放质量、缓冲设置等。
REDIRECT:告知客户端请求的资源已被重定向到另一个位置,通常用于流的转移或负载均衡。

在这里插入图片描述

ANNOUNCE rtsp://192.168.3.201:8554/stream RTSP/1.0
Content-Type: application/sdp
CSeq: 2
User-Agent: Lavf59.3.101
Content-Length: 521


v=0
o=- 0 0 IN IP4 127.0.0.1
s=鍓戞潵.绗?8璇?HD1080p.mp4
c=IN IP4 192.168.3.201
t=0 0
a=tool:libavformat 59.3.101
m=video 0 RTP/AVP 96
b=AS:1964
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z2QAKKzZQHgGf58BagICAoAAAAMAgAAAGQeMGMs=,aO+CPLA=; profile-level-id=640028
a=control:streamid=0
m=audio 0 RTP/AVP 97
b=AS:93
a=rtpmap:97 MPEG4-GENERIC/48000/2
a=fmtp:97 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3; config=1190
a=control:streamid=1

//------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.ANNOUNCE rtsp://192.168.3.201:8554/stream RTSP/1.0
ANNOUNCE:这是 RTSP 协议中的一种方法,用于在服务器上发布一个新的媒体流,通常用于创建或更新流。客户端使用这个方法来告知服务器它将发送媒体流。
rtsp://192.168.3.201:8554/stream:这是 RTSP 流的目标 URL,表示在 IP 地址为 192.168.3.201,端口号为 8554 的服务器上推送流,流的路径是 /stream。

2.Content-Type: application/sdp
表示内容类型是 SDP(会话描述协议),这是描述流信息(如编码格式、传输协议等)的标准方式。

3.CSeq: 2
CSeq(Sequence Number)是 RTSP 中用于标识请求序列的一个编号。每个请求或响应都有一个唯一的 CSeq,用于匹配请求和响应。

4.User-Agent: Lavf59.3.101
User-Agent 指示客户端的版本信息,这里是 Lavf59.3.101,表示该请求来自 libavformat(FFmpeg 库的一部分),版本为 59.3.101。

5.Content-Length: 521
表示 SDP 描述的内容长度为 521 字节。

SDP 内容
SDP 内容定义了流的具体信息,包括媒体类型、编码、传输参数等。
1.v=0
版本号,表示 SDP 协议的版本号,这里是 0。

2.o=- 0 0 IN IP4 127.0.0.1
会话信息,o 表示会话的发起者和标识符。这里的 - 表示没有特别的会话发起者,0 0 是时间戳,IN IP4 127.0.0.1 指定了会话所在的网络类型和主机(这里是 127.0.0.1,即本地回环地址)。

3.s=鍓戞潵.绗?8璇?HD1080p.mp4
会话名称,通常是流的标题或描述。这里显示的是乱码,可能是由于字符编码问题,但它的含义应该是流的名称,类似于 HD1080p.mp4。

4.c=IN IP4 192.168.3.201
指定流的接收地址,这里是 192.168.3.201,即客户端或播放器应从这个 IP 地址接收流。

5.t=0 0
表示流的起始和结束时间,这里为 0 0,意味着流是无限期的。

6.a=tool:libavformat 59.3.101
表示该流是由 libavformat 工具生成的,版本号为 59.3.101。

视频流描述
1.m=video 0 RTP/AVP 96
这行描述了视频流的信息。m=video 表示这是一个视频流。
0 是 RTP 数据包的端口号(通常为 0 表示该流的端口号由客户端或服务器动态指定)。
RTP/AVP 96 指定 RTP 协议用于音视频传输,AVP 是音视频协议,96 是媒体类型的编号(在 RTP 中,96 是指 H.264 编码的视频流)。

2.b=AS:1964
b=AS:1964 指定了该视频流的带宽。AS 是 Application Specific,指的是应用特定的带宽,单位为 Kbps,这里是 1964 Kbps。

3.a=rtpmap:96 H264/90000
a=rtpmap 用来指定 RTP 数据包的媒体类型和时钟频率。96 是媒体类型编号,H264 表示使用 H.264 编码,90000 是 RTP 时钟频率(即每秒钟的时间刻度,通常用于视频流)。

4.a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z2QAKKzZQHgGf58BagICAoAAAAMAgAAAGQeMGMs=,aO+CPLA=; profile-level-id=640028
a=fmtp 提供了媒体流格式参数,96 是流的媒体编号。packetization-mode=1 表示使用分包模式,sprop-parameter-sets 是 H.264 的配置参数集,用于解码器初始化。

5.a=control:streamid=0
a=control 是控制信息,用于标识流的控制参数,streamid=0 表示这是第一个视频流。

音频流描述
1.m=audio 0 RTP/AVP 97
m=audio 表示这是一个音频流。
0 是 RTP 数据包的端口号,通常为 0 表示端口号由服务器动态分配。
RTP/AVP 97 表示这是一个音频流,使用 RTP 协议,97 是媒体类型编号。

2.b=AS:93
b=AS:93 表示音频流的带宽为 93 Kbps。

3.a=rtpmap:97 MPEG4-GENERIC/48000/2
a=rtpmap 指定了音频流的媒体类型及其参数。97 是音频流的媒体编号,MPEG4-GENERIC 是编码格式,48000 是采样率(每秒 48000 次采样),2 表示立体声(2 通道)。

4.a=fmtp:97 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3; config=1190
a=fmtp 指定音频流的格式参数。profile-level-id=1 表示 AAC 的编码级别,mode=AAC-hbr 表示使用高比特率模式,sizelength、indexlength 和 indexdeltalength 表示音频配置的字节长度等细节。

5.a=control:streamid=1
a=control 控制信息,streamid=1 表示这是第二个音频流。

在这里插入图片描述

RTSP/1.0 200 OK
CSeq: 2
Session: 12345678

//------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.RTSP/1.0 200 OK:
这是 RTSP 响应的状态行,200 OK 表示请求成功,流会话已被服务器接受并且处理。

2.CSeq: 2
服务器响应的序列号,必须与客户端请求中的 CSeq 匹配。这里是 2,表示这次响应与客户端的 ANNOUNCE 请求是对应的。

3.Session: 12345678:
这是会话标识符,服务器分配给新建会话的一个唯一标识符。客户端后续的 RTSP 请求(如 SETUP、PLAY)需要使用这个会话标识符,以便服务器知道这些请求是针对哪个会话的。12345678 是一个示例,会话标识符通常是一个随机生成的字符串或数字。

在这里插入图片描述

SETUP rtsp://192.168.3.201:8554/stream/streamid=0 RTSP/1.0
Transport: RTP/AVP/TCP;unicast;interleaved=0-1;mode=record
CSeq: 3
User-Agent: Lavf59.3.101
Session: 12345678

//------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.SETUP rtsp://192.168.3.201:8554/stream/streamid=0 RTSP/1.0
这是 RTSP 请求的起始行,表示客户端想要通过 SETUP 方法初始化一个 RTSP 流,流的 URL 是 rtsp://192.168.3.201:8554/stream/streamid=0,并且使用 RTSP 协议版本 1.0。

2.Transport: RTP/AVP/TCP;unicast;interleaved=0-1;mode=record
这是 Transport 头字段,客户端请求使用 RTP/AVP/TCP 作为流媒体的传输协议,具体含义如下:
RTP/AVP/TCP:使用 RTP (Real-time Transport Protocol) over TCP 进行流的传输。
unicast:表示流是单播(即点对点传输)。
interleaved=0-1:表示客户端要求在 TCP 连接上使用交错的 RTP 和 RTCP 数据通道,0-1 指的是数据通道的索引。这里说明数据将通过同一个 TCP 连接进行传输,交错数据包的编号是 0 和 1。
mode=record:表示客户端请求流的传输模式是录制模式,意味着流是用于录制或保存的,而不是实时播放。

3.CSeq: 3
客户端的 CSeq(Sequence Number,序列号)是 3,表示这是客户端发送的第 3 个请求,服务器将会返回相应的 CSeq 值,确保请求与响应的对应。

4.User-Agent: Lavf59.3.101
这是客户端的用户代理字段,通常表示发起请求的软件或库。在这个例子中,Lavf59.3.101 是 FFmpeg 库的一个版本号。

5.Session: 12345678

在这里插入图片描述

RTSP/1.0 200 OK
CSeq: 3
Session: 12345678
Transport: RTP/AVP/TCP;unicast;interleaved=0-1;mode=record

//------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.RTSP/1.0 200 OK
服务器成功处理了客户端的 SETUP 请求,返回了 200 OK 状态,表示请求成功。

2.CSeq: 3
服务器返回的 CSeq 应与客户端请求中的 CSeq 保持一致,表示这是对应客户端请求的响应。

3.Session: 12345678
服务器返回会话标识符 12345678,这与客户端的请求中的 Session 值相同。这个字段确认了服务器已经接受了这个会话。

4.Transport: RTP/AVP/TCP;unicast;interleaved=0-1;mode=record
服务器回显了客户端请求的传输参数,表示服务器支持客户端指定的 RTP/AVP/TCP 传输方式,并确认使用交错的 RTP 和 RTCP 数据通道。

在这里插入图片描述

SETUP rtsp://192.168.3.201:8554/stream/streamid=1 RTSP/1.0
Transport: RTP/AVP/TCP;unicast;interleaved=2-3;mode=record
CSeq: 4
User-Agent: Lavf59.3.101
Session: 12345678

//------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.SETUP rtsp://192.168.3.201:8554/stream/streamid=0 RTSP/1.0
这是 RTSP 请求的起始行,表示客户端想要通过 SETUP 方法初始化一个 RTSP 流,流的 URL 是 rtsp://192.168.3.201:8554/stream/streamid=0,并且使用 RTSP 协议版本 1.0。

2.Transport: RTP/AVP/TCP;unicast;interleaved=0-1;mode=record
这是 Transport 头字段,客户端请求使用 RTP/AVP/TCP 作为流媒体的传输协议,具体含义如下:
RTP/AVP/TCP:使用 RTP (Real-time Transport Protocol) over TCP 进行流的传输。
unicast:表示流是单播(即点对点传输)。
interleaved=0-1:表示客户端要求在 TCP 连接上使用交错的 RTP 和 RTCP 数据通道,0-1 指的是数据通道的索引。这里说明数据将通过同一个 TCP 连接进行传输,交错数据包的编号是 0 和 1。
mode=record:表示客户端请求流的传输模式是录制模式,意味着流是用于录制或保存的,而不是实时播放。

3.CSeq: 3
客户端的 CSeq(Sequence Number,序列号)是 3,表示这是客户端发送的第 3 个请求,服务器将会返回相应的 CSeq 值,确保请求与响应的对应。

4.User-Agent: Lavf59.3.101
这是客户端的用户代理字段,通常表示发起请求的软件或库。在这个例子中,Lavf59.3.101 是 FFmpeg 库的一个版本号。

5.Session: 12345678

在这里插入图片描述

RTSP/1.0 200 OK
CSeq: 4
Session: 12345678
Transport: RTP/AVP/TCP;unicast;interleaved=2-3;mode=record

//------------------------------------------------------------------------------------------------------------------------------------------------------------------
1. RTSP/1.0 200 OK
RTSP/1.0:表示使用的是 RTSP 协议版本 1.0。
200 OK:是 RTSP 响应的状态码,表示请求成功且处理无误。类似于 HTTP 中的 200 OK,它表明服务器已经成功接收并处理了客户端的请求。

2. CSeq: 4
CSeq:是 RTSP 中的 “Sequence Number”(序列号)。每个 RTSP 请求和响应都会携带一个 CSeq 字段,用于标识请求的顺序。客户端发送请求时,服务器会在响应中返回相同的 CSeq 值。
4:这个值表示这是客户端发送的第 4 个请求。服务器响应时会将这个值返回给客户端,以便客户端能够匹配响应与请求。

3. Session: 12345678
Session:表示当前 RTSP 会话的标识符。会话标识符是由 RTSP 服务器在初始会话建立时生成的,用于跟踪和管理客户端的会话。
12345678:这是一个示例的会话 ID。它是一个唯一的字符串(通常是数字或字母组合),用来标识当前的 RTSP 会话。每个会话的请求都需要携带这个会话 ID,以便服务器能识别属于哪个会话。

4. Transport: RTP/AVP/TCP; unicast; interleaved=2-3; mode=record
这是关于传输协议和相关设置的描述。它指定了用于传输音视频流的协议和模式。该字段由多个参数组成。
Transport: RTP/AVP/TCP
RTP/AVP:表示 RTP (Real-time Transport Protocol) 协议和 AVP (Audio Video Profile)。RTP 是用来传输音视频数据的协议,AVP 是 RTP 的一个配置,用于音视频数据的传输。
RTP:实时传输协议,用于传输音频和视频。
AVP:是 RTP 的一种常见传输模式,用于音视频传输,适用于多数音视频流。
TCP:指定了使用 TCP(传输控制协议)作为传输层协议。与 UDP 不同,TCP 提供可靠的、有序的连接性。选择 TCP 作为传输协议通常用于那些要求可靠传输的应用场景。
unicast
unicast:表示流传输的方式是单播。单播是指一个发送者向一个接收者发送数据。与多播 (multicast) 和广播 (broadcast) 不同,单播是点对点的通信模式,通常用于一对一的流传输。
interleaved=2-3
interleaved=2-3:表示 RTP 数据包将通过 RTSP 连接的通道 2 和 3 进行交错传输。RTSP 支持多通道传输数据(通常是通过 interleaved 参数),其中 2-3 指明音视频数据将交替使用这两个通道传输。这通常发生在使用 TCP 传输时,因为 TCP 是一个面向流的协议,而在 RTSP 中,音频和视频数据通常交替发送,故使用交错模式进行传输。
通道 2 和 3 分别指示 RTP 视频流和音频流的传输通道。每个通道负责一个流的数据传输。
mode=record
mode=record:这个参数指定了会话的工作模式为 “record”(记录模式)。这意味着服务器将开始接收并记录客户端传送的数据流。这个参数通常用于推送流的情况下,例如直播流或者录制流。
如果是 playback 模式(回放模式),则表示服务器应该从现有的流中读取数据并将其发送给客户端;而在 record 模式下,表示服务器可能会记录客户端传输的音视频数据

在这里插入图片描述

RECORD rtsp://192.168.3.201:8554/stream RTSP/1.0
Range: npt=0.000-
CSeq: 5
User-Agent: Lavf59.3.101
Session: 12345678

//------------------------------------------------------------------------------------------------------------------------------------------------------------------
1. RECORD rtsp://192.168.3.201:8554/stream RTSP/1.0
RECORD:表示客户端向 RTSP 服务器发起 RECORD 请求。这个方法用于告诉服务器开始录制某个指定的媒体流,通常在流媒体传输的场景下使用。RECORD 请求的目的是让服务器开始接收来自客户端的音视频数据流,并进行录制或处理。
rtsp://192.168.3.201:8554/stream:这是请求的 URL,指定了要进行录制的媒体流的地址。包括:
rtsp://:表明这是一个 RTSP 协议的请求。
192.168.3.201:8554:这是 RTSP 服务器的 IP 地址和端口号,客户端将连接到此地址。
/stream:这是要录制的媒体流的路径或名称。它标识了服务器上某个特定的流或资源。
RTSP/1.0:表示使用的是 RTSP 协议的版本 1.0。

2. Range: npt=0.000-
Range:这个头部指示请求的数据范围。在 RECORD 请求中,Range 头部指定了录制的起始时间点和结束时间点。
npt=0.000-:这是 Range 的具体内容,表示从时间点 0.000 开始录制(通常以秒为单位)。“-” 代表没有指定结束时间点,意味着录制将持续进行,直到会话结束或其他条件发生。npt 是 Normal Play Time(标准播放时间)的缩写,常用于表示媒体播放的时间范围。此处指定了一个从零开始的无限期录制。

3. CSeq: 5
CSeq:是 Sequence Number(序列号),用于标识 RTSP 请求的顺序。每次客户端发送请求时,都会包含一个 CSeq 字段,并且服务器会在响应中返回相同的值。这个序列号帮助客户端与服务器匹配请求和响应。
5:这是客户端发送的第 5 个请求。服务器在响应时会返回相同的 CSeq 值,以便客户端识别对应的响应。

4. User-Agent: Lavf59.3.101
User-Agent:这个字段标识发送请求的客户端软件或库。它包含客户端应用程序的名称和版本号。
Lavf59.3.101:这是 FFmpeg 库的版本号,FFmpeg 是一个广泛使用的开源多媒体框架。这里的 Lavf59.3.101 指的是 FFmpeg 的 Libavformat 组件的版本号。Libavformat 是 FFmpeg 的一个部分,用于处理流媒体协议和格式。
5. Session: 12345678
Session:表示当前 RTSP 会话的标识符。RTSP 会话标识符在建立连接时由服务器生成,并用于标识特定的客户端与服务器之间的会话。每个 RTSP 会话都有一个唯一的 Session ID。
12345678:这是服务器分配给当前会话的会话 ID。客户端在发送后续请求时,必须提供相同的会话 ID,以便服务器识别该请求属于哪个会话。

在这里插入图片描述

RTSP/1.0 200 OK
CSeq: 5
Session: 12345678
Date: Thu, 06 Dec 2024 08:05:00 GMT

//------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.RTSP/1.0 200 OK:
RTSP/1.0:表示服务器使用的是 RTSP 协议的版本 1.0。
200 OK:这是 RTSP 的标准响应码,表示请求已经成功被处理。200 OK 表示服务器已经成功处理了客户端的 RECORD 请求并已开始录制。

2.CSeq: 5:
与请求中的 CSeq 值相匹配,表示这是对客户端发送的第 5 个请求的响应。CSeq 用来保证请求和响应的一致性,确保客户端可以正确匹配请求和响应。
Session: 12345678:
服务器返回的 Session 值与客户端请求中的 Session 值一致,表示该响应属于会话 ID 为 12345678 的会话。

3.Date: Thu, 06 Dec 2024 08:05:00 GMT:
Date 字段表示服务器响应的日期和时间,通常会返回服务器当前的时间,格式遵循 RFC 1123。

服务端回复

RTSP/1.0 200 OK
CSeq: 4
Session: 12345678

此条一旦发送,源源不断的视频数据就推过来了

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值