RTSP协议笔记

参考:手撕RTSP协议系列(1)——Rtsp基本流程-腾讯云开发者社区-腾讯云 (tencent.com)系列文章,如有问题可参考原系列文章内容

1 rtsp协议简介

rtsp,英文全称 Real Time Streaming Protocol,RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议!协议主要规定定了一对多应用程序如何有效地通过IP网络传送多媒体数据。RTSP体系结位于RTP和RTCP之上(RTCP用于控制传输,RTP用于数据传输),使用TCP或UDP完成数据传输!

2 rtsp基本交互过程

假设我们现在要向一个RTSP的sever发送请求获取数据,基本流程如下:

OPTIONS:

C--->S

客户端向服务器端发送OPTIONS,请求可用的方法。

OPTIONS rtsp://182.182.4.3:9554 RTSP/1.0

CSeq: 1

User-Agent: mpv 0.29.1

S--->C

服务器端回复客户端,消息中包含当前可用的方法。

RTSP/1.0 200 OK

CSeq: 1

Public: DESCRIBE, SETUP, TEARDOWN, PLAY

DESCRIBE:

C--->S

客户端向服务器请求媒体描述文件,一般通过rtsp开头的url来发起请求,格式为sdp。

DESCRIBE rtsp://182.182.4.3:9554 RTSP/1.0

Accept: application/sdp

CSeq: 2

User-Agent: mpv 0.29.1

S--->C

(不需要认证,则直接返回sdp。)服务端收到带认证信息的DESCRIBE请求之后,如果信息正确,则会回复200 ok的消息,同时返回sdp信息

RTSP/1.0 200 OK

CSeq: 2

Content-Base: rtsp://182.182.4.3:9554

Content-Type: application/sdp

Content-Length: 253

v=0 描述: 表示sdp的版本号,不包含次版本号

o=- 0 0 IN IP4 1.2.3.4描述:o=选项对会话的发起者进行了描述;

o=

   <username>:是用户的登录名, 如果主机不支持<username>,则用"-"代替,<username> 不能包含空格;
    <session id>:是一个数字串,在整个会话中,必须是唯一的,建议使用个NTP 时间戳;
    <version>: 该会话公告的版本,供公告代理服务器检测同一会话的如果干个公告哪个是最新公告,基本要求是会话数据修改后该版本值递增,建议使用NTP时间戳
    <networktype>: 网络类型,一般为"IN",表示internet
    <addresstype>: 地址类型,一般为IP4
    <adress>:地址

s=-    格式:s=会话名称,在整个会话中有且只有1个"s="

t=0 0    格式:t= start time和stop time均为0,表示一个持久的会话。

m=video 0 RTP/AVP 96 media information格式:m=

a=rtpmap:96 H265/90000rtpmap

格式:a=rtpmap: /

描述:

payload type表示动态负载类型,如 98表示h264

encoding name表示编码名称,如H.264

clock rate表示时钟频率,如90000

m=audio 0 RTP/AVP 98

a=rtpmap:98 MPEG4-GENERIC/48000/1

a=fmtp:98 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3; config=118856E500

SETUP:

C--->S

客户端向服务器端发起建立连接请求,请求建立会话连接,准备开始接收音视频数据,请求信息描述了期望音视频数据包基于UDP还是TCP传输,指定了RTP,RTCP端口,以及是单播还是组播等信息!

SETUP rtsp://182.182.4.3:9554 RTSP/1.0

Transport: RTP/AVP/UDP;unicast;client_port=23366-23367

CSeq: 3

User-Agent: mpv 0.29.1

S--->C

服务器端收到客户端请求后,根据客户端请求的端口号确定发送控制数据的端口以及音视频数据的端口!

请求之后,如果没有异常情况,RTSP服务器的回复比较简单,回复200 OK消息,同时在Transport字段中增加sever_port,指明对等的服务端RTP和RTCP传输的端口,增加ssrc字段,增加mode字段,同时返回一个session id,用于标识本次会话连接,之后客户端发起PLAY请求的时候需要使用该字段

RTSP/1.0 200 OK

CSeq: 3

Transport: RTP/AVP;unicast;client_port=23366-23367;server_port=35004-35005;ssrc=2100238178

Session: 1234

SETUP rtsp://182.182.4.3:9554 RTSP/1.0

Transport: RTP/AVP/UDP;unicast;client_port=23368-23369

CSeq: 4

User-Agent: mpv 0.29.1

Session: 1234

RTSP/1.0 200 OK

CSeq: 4

Transport: RTP/AVP;unicast;client_port=23368-23369;server_port=35004-35005;ssrc=1084322566

Session: 1234

PLAY:

C--->S

客户端向服务端请求播放媒体。

PLAY rtsp://182.182.4.3:9554 RTSP/1.0

Range: npt=0.000-

CSeq: 5

User-Agent: mpv 0.29.1

Session: 1234

S--->C

服务器回复客户端200 OK! 之后开始通过SETUP中指定的端口开始发送数据!

RTSP/1.0 200 OK

CSeq: 5

  • 18
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值