流媒体协议-RTSP简介

流媒体协议-RTSP简介RTSP 方法详解 OPTION 询问服务器支持的 RTSP 方法

大家好,欢迎来到IT知识分享网。

目录

1. RTSP概述:   

2. RTSP协议交互过程:

3. RTSP拉流详解:

3.1 OPTION请求响应示例:

3.2 DESCRIBE方法获取媒体流信息

3.3 SETUP方法建立传输通道:

3.4 PLAY方法开始播放

3.5 TEARDOWN方法结束播放

4. RTSP推流方式说明:

5. RTSP方法详解:

6. RTSP交互注意事项:


1. RTSP概述:
   

2. RTSP协议交互过程:

– 通常基于TCP进行交互,也可以基于HTTP(RTSP-over-HTTP tunneling)。

基于http交互示意图:

流媒体协议-RTSP简介
   – 交互过程包括流媒体信息描述、码流通道建立、流媒体控制等。
   – 流媒体码流传输通常通过RTP/RTCP协议,可以使用UDP或TCP作为传输层协议。

3. RTSP拉流详解:

其他的:

        – PAUSE方法:录像回放时会用到,用以暂停流媒体传输

        -SET_PARAMETER/GET_PARAMETER,用来作为心跳使用,也 是用option来维持心跳

3.1 OPTION请求响应示例:
OPTIONS rtsp://10.45.12.141:554/h264/ch1/main/av_stream RTSP/1.0 CSeq: 2 User-Agent: LibVLC/3.0.12 (LIVE555 Streaming Media v2016.11.28) RTSP/1.0 200 OK CSeq: 2 Public: OPTIONS, DESCRIBE, PLAY, PAUSE, SETUP, TEARDOWN, SET_PARAMETER, GET_PARAMETER Date: Wed, Jul 27 2022 10:37:06 GMT

这里可以看到查询后得到的响应中,服务器支持的rtsp方法:OPTIONS, DESCRIBE, PLAY, PAUSE, SETUP, TEARDOWN, SET_PARAMETER, GET_PARAMETER

3.2 DESCRIBE方法获取媒体流信息
DESCRIBE rtsp://10.45.12.141:554/h264/ch1/main/av_stream RTSP/1.0 CSeq: 3 User-Agent: LibVLC/3.0.12 (LIVE555 Streaming Media v2016.11.28) Accept: application/sdp RTSP/1.0 401 Unauthorized CSeq: 3 WWW-Authenticate: Digest realm="IP Camera(C7627)", nonce="c4c4e29be44ec28b077e2eb52", stale="FALSE" Date: Wed, Jul 27 2022 10:37:06 GMT DESCRIBE rtsp://10.45.12.141:554/h264/ch1/main/av_stream RTSP/1.0 CSeq: 4 Authorization: Digest username="admin", realm="IP Camera(C7627)", nonce="c4c4e29be44ec28b077e2eb52", uri="rtsp://10.45.12.141:554/h264/ch1/main/av_stream", response="be7cde07af4a08db991dd58a89db7621" User-Agent: LibVLC/3.0.12 (LIVE555 Streaming Media v2016.11.28) Accept: application/sdp RTSP/1.0 200 OK CSeq: 4 Content-Type: application/sdp Content-Base: rtsp://10.45.12.141:554/h264/ch1/main/av_stream/ Content-Length: 574 v=0 o=- 96159 96159 IN IP4 10.45.12.141 s=Media Presentation e=NONE b=AS:5050 t=0 0 a=control:rtsp://10.45.12.141:554/h264/ch1/main/av_stream/ m=video 0 RTP/AVP 96 c=IN IP4 0.0.0.0 b=AS:5000 a=recvonly a=x-dimensions:1920,1080 a=control:rtsp://10.45.12.141:554/h264/ch1/main/av_stream/trackID=1 a=rtpmap:96 H265/90000 a=fmtp:96 sprop-sps=QgEBAWAAAAMAsAAAAwAAAwB7oAPAgBDlja5JMvTcBAQEAg==; sprop-pps=RAHA8vA8kAA= a=Media_header:MEDIAINFO=494D4B0000000000000000000000000000000000000000000000000000; a=appversion:1.0

上面可以看到 客户端发送describe时,服务器要求鉴权,并且返回了401的响应,这时客户端再次根据鉴权信息,生成Authorization后再次发送describe。如果认证成功则返回 sdp信息。

详细解释如下:

  1. DESCRIBE rtsp://10.45.12.141:554/h264/ch1/main/av_stream RTSP/1.0:描述请求的RTSP URL以及协议版本。
  2. CSeq: 3:指定请求的序列号。
  3. User-Agent: LibVLC/3.0.12 (LIVE555 Streaming Media v2016.11.28):发送请求的用户代理信息。
  4. Accept: application/sdp:指定请求的媒体类型,即希望接收SDP(Session Description Protocol)格式的描述信息。

接收到的响应信息如下:

  1. RTSP/1.0 401 Unauthorized:未授权的响应,需要进行身份验证。
  2. CSeq: 3:对应的请求序列号。
  3. WWW-Authenticate: Digest realm=”IP Camera(C7627)”, nonce=”c4c4e29be44ec28b077e2eb52″, stale=”FALSE”:包含身份验证所需的参数,包括realm(领域)、nonce(一次性数字)、stale(指示客户端是否可以重新使用上一次未完成的请求)等。

接着,发送了第二个DESCRIBE请求,包含了授权信息:

  1. DESCRIBE rtsp://10.45.12.141:554/h264/ch1/main/av_stream RTSP/1.0:描述请求的RTSP URL以及协议版本。
  2. CSeq: 4:指定请求的序列号。
  3. Authorization: Digest username=”admin”, realm=”IP Camera(C7627)”, nonce=”c4c4e29be44ec28b077e2eb52″, uri=”rtsp://10.45.12.141:554/h264/ch1/main/av_stream”, response=”be7cde07af4a08db991dd58a89db7621″:包含了进行身份验证所需的授权信息,包括用户名、领域、一次性数字、请求的URI以及响应。
  4. User-Agent: LibVLC/3.0.12 (LIVE555 Streaming Media v2016.11.28):发送请求的用户代理信息。
  5. Accept: application/sdp:指定请求的媒体类型,即希望接收SDP格式的描述信息。

响应信息包含了SDP格式的描述信息:

  1. RTSP/1.0 200 OK:请求成功的响应。
  2. CSeq: 4:对应的请求序列号。
  3. Content-Type: application/sdp:响应中包含的媒体类型,即SDP格式的描述信息。
  4. Content-Base: rtsp://10.45.12.141:554/h264/ch1/main/av_stream/:描述信息中的基本URL。
  5. Content-Length: 574:描述信息的长度。

接着是SDP格式的描述信息,其中包含了媒体的相关信息,如音视频的编码格式、传输协议、媒体参数等。

3.3 SETUP方法建立传输通道:

有两种传输方式,一种是基于tcp的一种是基于udp的。

基于udp方式示例:

SETUP rtsp://10.45.12.141:554/h264/ch1/main/av_stream/trackID=1 RTSP/1.0 CSeq: 5 Authorization: Digest username="admin", realm="IP Camera(C7627)", nonce="c4c4e29be44ec28b077e2eb52", uri="rtsp://10.45.12.141:554/h264/ch1/main/av_stream/", response="ac52cf287fe4aa6be5bb168bc9d01446" User-Agent: LibVLC/3.0.12 (LIVE555 Streaming Media v2016.11.28) Transport: RTP/AVP;unicast;client_port=63538-63539 RTSP/1.0 200 OK CSeq: 5 Session: ;timeout=60 Transport: RTP/AVP;unicast;client_port=63538-63539;server_port=8312-8313;ssrc=3cc5faf7;mode="play" Date: Wed, Jul 27 2022 10:37:07 GMT

这段RTSP SETUP阶段的请求和响应的字段解释如下:

请求(SETUP):

SETUP rtsp://10.45.12.141:554/h264/ch1/main/av_stream/trackID=1 RTSP/1.0:指定了要建立的媒体流的URL以及协议版本。

CSeq: 5:请求序列号,用于唯一标识请求和对应的响应。

Authorization: Digest username=”admin”, realm=”IP Camera(C7627)”, nonce=”c4c4e29be44ec28b077e2eb52″, uri=”rtsp://10.45.12.141:554/h264/ch1/main/av_stream/”, response=”ac52cf287fe4aa6be5bb168bc9d01446″:授权信息,包括用户名、领域、一次性数字、请求的URI以及响应。

User-Agent: LibVLC/3.0.12 (LIVE555 Streaming Media v2016.11.28):发送请求的用户代理信息。

Transport: RTP/AVP;unicast;client_port=63538-63539:指定传输参数,包括传输协议(RTP/AVP)、传输方式(unicast)、客户端端口范围。

响应:

RTSP/1.0 200 OK:请求成功的响应。

CSeq: 5:对应的请求序列号。

Session: ;timeout=60:指定了会话标识符(Session)以及超时时间。该会话标识符用于关联此后的请求和会话,超时时间指示了会话的有效期限。

Transport: RTP/AVP;unicast;client_port=63538-63539;server_port=8312-8313;ssrc=3cc5faf7;mode=”play”:描述了媒体流的传输参数,包括传输协议(RTP/AVP)、传输方式(unicast)、客户端和服务端的端口范围、SSRC标识符(同步源标识符)以及模式(play表示播放模式)。

Date: Wed, Jul 27 2022 10:37:07 GMT:响应产生的日期和时间。

基于tcp方式示例:

……没有….可以查阅其他资料

3.4 PLAY方法开始播放

PLAY消息用于通知服务器开始传送数据,包括媒体的播放时间范围。具体来说,对于实时流,一般会使用Range字段来指定播放的时间范围。在这个场景下,Range字段的值通常是npt=0.000

注意:客户端在发送PLAY请求之前应该确保所有的SETUP请求都已经被服务器成功解析和处理。换句话说,客户端在发送PLAY请求之前,必须要确保所有与媒体流相关的资源都已经被成功设置和准备好了,包括传输参数、端口设置、会话标识等。这样做可以确保在播放媒体流之前所有的必要条件都已经具备,避免出现播放过程中的错误或异常

PLAY示例:

PLAY rtsp://10.45.12.141:554/h264/ch1/main/av_stream/ RTSP/1.0 CSeq: 6 Authorization: Digest username="admin", realm="IP Camera(C7627)", nonce="59db6d7ba1acbc8bb8e61ce8", uri="rtsp://10.45.12.141:554/h264/ch1/main/av_stream/", response="0eefc12e902ca9185c70f969cc" User-Agent: LibVLC/3.0.12 (LIVE555 Streaming Media v2016.11.28) Session:  Range: npt=0.000- RTSP/1.0 200 OK CSeq: 6 Session:  RTP-Info: url=rtsp://10.45.12.141:554/h264/ch1/main/av_stream/trackID=1;seq=29458;rtptime= Date: Fri, Aug 26 2022 14:35:46 GMT

在RTSP协议中,客户端发送PLAY方法时,需要包含Session字段来指定对应的会话标识符,以便服务器知道哪个会话需要开始播放流媒体数据。这个Session字段通常是在SETUP阶段由服务器返回的,客户端在发送PLAY请求时需要将其携带上去,确保与正确的会话建立关联。

一旦服务器接收到PLAY请求并识别了对应的会话,它就可以打开与客户端的通信通道,并开始发送流媒体数据。然而,为了更好地协调和控制流媒体的传输,服务器在发送PLAY方法的响应时,通常会携带RTP-Info字段。

RTP-Info字段包含了将要发送的流媒体数据的一些关键信息,比如第一包RTP数据包的序列号(seq)和RTP时间戳(rtptime)。客户端收到服务器的响应后,可以根据这些信息来确定接收和解码流媒体数据的方式,确保正确地解复用流媒体数据。例如,客户端可以根据RTP时间戳来进行播放速度的调整或者确保音视频同步。

PLAY请求消息:

   PLAY rtsp://10.45.12.141:554/h264/ch1/main/av_stream/ RTSP/1.0:指示播放指定的RTSP   流。

   CSeq: 6:序列号,用于标识请求消息的顺序。

   Authorization: Digest:使用摘要认证方式进行身份验证。

   Session: :RTSP会话标识,用于标识当前会话。

   Range: npt=0.000-:指定播放的时间范围,这里表示从媒体的起始点开始播放。

服务器响应消息:

   RTSP/1.0 200 OK:服务器成功处理了请求。

   CSeq: 6:对应请求消息的序列号。

   Session: :与请求消息中的Session字段对应,表示当前会话标识。

   RTP-Info:       url=rtsp://10.45.12.141:554/h264/ch1/main/av_stream/trackID=1;seq=29458;rtptime=:指示RTP流的相关信息,包括URL、序列号和RTP时间戳。

   Date: Fri, Aug 26 2022 14:35:46 GMT:响应消息的发送时间。

3.5 TEARDOWN方法结束播放

这条消息是RTSP协议中的TEARDOWN方法,用于结束流媒体会话。当客户端不再需要与服务器通信时,或者希望停止播放流媒体时,可以发送TEARDOWN请求。并释放相关资源,其实例如下:

TEARDOWN rtsp://10.45.12.141:554/h264/ch1/main/av_stream/ RTSP/1.0 CSeq: 7 Authorization: Digest username="admin", realm="IP Camera(C7627)", nonce="e3dfa4549e00a1d53c0e9f28c3348e2c", uri="rtsp://10.45.12.141:554/h264/ch1/main/av_stream/", response="0c530cba910c33ea3ef7a554dda8d0b2" User-Agent: LibVLC/3.0.12 (LIVE555 Streaming Media v2016.11.28) Session: 

TEARDOWN rtsp://10.45.12.141:554/h264/ch1/main/av_stream/ RTSP/1.0: 这是TEARDOWN方法的请求行,指定了要关闭的流媒体的RTSP URL以及协议版本。

CSeq: 7: 表示这是第7个RTSP请求,用于序列化请求和响应的顺序。

Authorization: Digest username=”admin”, realm=”IP Camera(C7627)”, nonce=”e3dfa4549e00a1d53c0e9f28c3348e2c”, uri=”rtsp://10.45.12.141:554/h264/ch1/main/av_stream/”, response=”0c530cba910c33ea3ef7a554dda8d0b2″: 表示客户端对此请求进行了身份验证,使用的是Digest方式。其中,username是用户名,realm是领域,nonce是随机数,uri是请求的URI,response是摘要认证的响应值。

User-Agent: LibVLC/3.0.12 (LIVE555 Streaming Media v2016.11.28): 指定了客户端的User-Agent信息,表示使用的是LibVLC工具。

Session: : 表示要结束的流媒体会话的标识符,用来指定要关闭的会话。

4. RTSP推流方式说明:

示例:

OPTIONS rtsp://10.45.12.141:554/live/0001 RTSP/1.0 CSeq: 1 User-Agent: znv RTSP/1.0 200 OK Server: EasyDarwin/7.3 Cseq: 1 Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, OPTIONS, ANNOUNCE, RECORD ANNOUNCE rtsp://10.45.12.141:554/live/0001 RTSP/1.0 Content-Type: application/sdp CSeq: 2 User-Agent: znv Content-Length: 325 v=0 o=- 0 0 IN IP4 127.0.0.1 s=Media Server c=IN IP4 192.168.1.108 t=0 0 a=tool:libavformat 57.71.100 m=video 0 RTP/AVP 96 a=rtpmap:96 H264/90000 a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z2QAHqw0ygsBJ/wFuCgoKgAAB9AAAYah0MALFAALE9d5caGAFigAFieu8uFA,aO48MA==; profile-level-id=64001E a=control:streamid=0 RTSP/1.0 200 OK Server: EasyDarwin/7.3 (Build/17.0325; Platform/Win32; Release/EasyDarwin; State/Development; ) Cseq: 2 SETUP rtsp://10.45.12.141:554/live/0001/trackid=0 RTSP/1.0 Transport: RTP/AVP/TCP;unicast;interleaved=0-1;mode=record CSeq: 3 User-Agent: znv RTSP/1.0 200 OK Server: EasyDarwin/7.3 Cseq: 3 Cache-Control: no-cache Session: 2239 Date: Tue, 13 Nov 2018 02:49:48 GMT Expires: Tue, 13 Nov 2018 02:49:48 GMT Transport: RTP/AVP/TCP;unicast;mode=record;interleaved=0-1 RECORD rtsp://10.45.12.141:554/live/0001 RTSP/1.0 Range: npt=0.000- CSeq: 4 User-Agent:znv Session: 2239 RTSP/1.0 200 OK Server: EasyDarwin/7.3 Cseq: 4 Session: 2239 RTP-Info: url=rtsp://192.168.1.108:554/live.sdp/live.sdp

OPTIONS rtsp://10.45.12.141:554/live/0001 RTSP/1.0

  • 客户端向服务器发送OPTIONS请求,询问服务器支持的命令。
  • 服务器返回200 OK,表示支持的命令列表,其中包括DESCRIBE、SETUP、TEARDOWN、PLAY、PAUSE、OPTIONS、ANNOUNCE、RECORD等命令。

ANNOUNCE rtsp://10.45.12.141:554/live/0001 RTSP/1.0

  • 客户端发送ANNOUNCE请求,用于向服务器通告媒体信息,包括媒体类型、IP地址、端口等。
  • 服务器返回200 OK,表示接收到媒体信息。

SETUP rtsp://10.45.12.141:554/live/0001/trackid=0 RTSP/1.0

  • 客户端发送SETUP请求,用于设置媒体流传输参数,指定传输方式为RTP/AVP/TCP。
  • 服务器返回200 OK,表示设置成功,同时返回Session标识符和传输参数。

RECORD rtsp://10.45.12.141:554/live/0001 RTSP/1.0

  • 客户端发送RECORD请求,用于开始录制媒体流。
  • 服务器返回200 OK,表示录制开始,并返回Session标识符和RTP信息。
5. RTSP方法详解:
6. RTSP交互注意事项:

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/125486.html

(0)
上一篇 2025-09-26 19:45
下一篇 2025-09-26 20:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信