RTSP和RTP、RTCP协议介绍

一、RTSP

1、简介

RTSP(Real-Time Stream Protocol)协议是一个基于文本的多媒体播放控制协议,属于应用层。RTSP以客户端方式工作,对流媒体提供播放、暂停、后退、前进等操作。

它主要用来控制具有实时特性的数据的发送,但其本身并不用于传送流媒体数据,而必须依赖下层传输协议(如RTP/RTCP)所提供的服务来完成流媒体数据的传送。RTSP负责定义具体的控制信息、操作方法、状态码,以及描述与RTP之间的交互操作。

RTSP可以在TCP上传输也可以在UDP上传输,而RTP和RTCP是基于UDP协议的(TCP协议的重传机制可能会引起较大时延)。

2、RTSP的URL

客户端要播放RTSP媒体流,就需要知道媒体源的URL,RTSP的URL格式一般如下:

rtsp://host[:port]/[abs_path]/content_name

host: 有效的域名或IP地址;

port: 端口号,缺省为554,若为缺省可不填写,否则必须写明。

目前市面上常用的海康网络摄像头的RTSP地址格式为:

rtsp://[username]:[password]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream

示例: rtsp://admin:12345@192.168.1.67:554/h264/ch1/main/av_stream

3、RTSP报文

RTSP是一种基于文本的协议,用CRLF(回车换行)作为每一行的结束符。

rtsp中定义的方法有:OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, SCALE, GET_PARAMETER ,SET_PARAMETER 

1.OPTION 目的是得到服务器提供的可用方法

2.DESCRIBE C向S发起DESCRIBE请求,为了得到会话描述信息(SDP)

3.SETUP 客户端提醒服务器建立会话,并确定传输模式

uri中带有trackID=0,表示对该通道进行设置。Transport参数设置了传输模式,包的结构。接下来的数据包头部第二个字节位置就是interleaved,它的值是每个通道都不同的,trackID=0的interleaved值有两个0或1,0表示rtp包,1表示rtcp包,接受端根据interleaved的值来区别是哪种数据包。

4.PLAY  客户端发送播放请求

5.TEARDOWN 客户端发起关闭请求

ps:

sdp的格式

v=<version>

o=<username> <session id> <version> <network type> <address type> <address>

s=<session name>

i=<session description>

u=<URI>

e=<email address>

p=<phone number>

c=<network type> <address type> <connection address>

b=<modifier>:<bandwidth-value>

t=<start time> <stop time>

r=<repeat interval> <active duration> <list of offsets from start-time>

z=<adjustment time> <offset> <adjustment time> <offset> ....

k=<method>

k=<method>:<encryption key>

a=<attribute>

a=<attribute>:<value>

m=<media> <port> <transport> <fmt list>

v = (协议版本)

o = (所有者/创建者和会话标识符)

s = (会话名称)

i = * (会话信息)

u = * (URI 描述)

e = * (Email 地址)

p = * (电话号码)

c = * (连接信息)

b = * (带宽信息)

z = * (时间区域调整)

k = * (加密密钥)

a = * (0 个或多个会话属性行)

时间描述:

t = (会话活动时间)

r = * (0或多次重复次数)

媒体描述:

m = (媒体名称和传输地址)

i = * (媒体标题)

c = * (连接信息 — 如果包含在会话层则该字段可选)

b = * (带宽信息)

k = * (加密密钥)

a = * (0 个或多个媒体属性行)

4、RTSP认证

rtsp认证分为2种:基本认证(basic authentication)、摘要认证(digest authentication)。基本认证是http1.0的认证方案,摘要认证是1.1针对1.0的改进版本,基本认证由于存在未加密直接传送有安全隐患,摘要认证经过MD5转换,具备更高的安全性。

认证过程:

客户端发送不带认证信息的DESCRIBE请求到服务端,RTSP服务端认为没有通过认证,返回401 Unauthorized携带WWW-Authenticate认证响应。

此时客户端程序应该弹出密码认证窗口 ,提示输入认证信息:用户名和密码

从响应消息中进行判断,如果发现是basic认证,通过对 username:password 进行base64编码得到Authorization,携带Authorization再次发起DESCRIBE请求。

如果是digest认证,还会返回一个nonce字段,客户端以用户名,密码,nonce,HTTP方法,请求的URI等信息为基础产生response信息进行反馈,其中response计算方法如下:

(1)当password为MD5编码,则

   response = md5( password:nonce:md5(public_method:url)  );

(2)当password为ANSI字符串,则

    response= md5( md5(username:realm:password):nonce:md5(public_method:url) );
客户端在每次发起不同的请求方法时都需要计算response字段,同样在服务器端校验时也默认采取同样的计算方法。

例如:

Authorization: Digest username="admin",realm="Hipcam RealServer", nonce="3b27a446bfa49b0c48c3edb83139543d",uri="rtsp://192.168.123.158:554/11", response="258af9d739589e615f711838a0ff8c58"
 

通过对海康摄像头取流播放抓包得到的rtsp报文内容:

 二、RTP和RTCP

数据传输协议RTP,用于实时传输数据。该协议提供的信息包括:时间戳(用于同步)、序列号(用于丢包和重排序检测)、以及负载格式(用于说明数据的编码格式)。

控制协议RTCP,用于QoS反馈和同步媒体流。相对于RTP来说,RTCP所占的带宽非常小,通常只有5%。

RTP的工作机制为:
当应用程序建立一个RTP会话时,应用程序将确定一对目的传输地址。目的传输地址由一个网络地址和一对端口组成,有两个端口:一个给RTP包,一个给RTCP包,使得RTP/RTCP数据能够正确发送。RTP数据发向偶数的UDP端口,而对应的控制信号RTCP数据发向相邻的奇数UDP端口(偶数的UDP端口+1),这样就构成一个UDP端口对。

è¿éåå¾çæè¿°

版本号(V):2比特,用来标志使用的RTP版本。

填充位(P):1比特,如果该位置位,则该RTP包的尾部就包含附加的填充字节。

扩展位(X): 1比特,如果该位置位的话,RTP固定头部后面就跟有一个扩展头部。

CSRC计数器(CC):4比特,含有固定头部后面跟着的CSRC的数目。

标记位(M): 1比特,??
载荷类型(PayloadType): 7比特,标识了RTP载荷的类型。

序列号(SN):16比特,每发送一个 RTP 数据包,序列号增加1。接收端可以据此检测丢包和重建包序列。

时间戳(Timestamp): 2比特,记录了该包中数据的第一个字节的采样时刻。在一次会话开始时,时间戳初始化成一个初始值。即使在没有信号发送时,时间戳的数值也要随时间而不断地增加(时间在流逝嘛)。时钟频率依赖于负载数据格式,并在描述文件(profile)中进行描述。

同步源标识符(SSRC):32比特,同步源就是指RTP包流的来源。在同一个RTP会话中不能有两个相同的SSRC值。该标识符是随机选取的 RFC1889推荐了MD5随机算法。

贡献源列表(CSRC List):0~15项,每项32比特,用来标志对一个RTP混合器产生的新包有贡献的所有RTP包的源。由混合器将这些有贡献的SSRC标识符插入表中。SSRC标识符都被列出来,以便接收端能正确指出交谈双方的身份。
 

RTCP???

参考:

https://www.cnblogs.com/yuweifeng/p/7567846.html   流媒体协议之RTSP详解20170922

https://blog.csdn.net/deliapu/article/details/79199023  网络流媒体协议之——RTSP协议

https://blog.csdn.net/lanfengywf/article/details/80924275 流媒体协议之RTSP客户端的实现20171014

https://www.cnblogs.com/yuweifeng/p/7550737.html  流媒体协议之JRTPLIB的使用20170919

https://github.com/babosa/Course  GitHub课程

https://blog.csdn.net/machh/article/details/51868569  RTP/RTCP协议解析

https://blog.csdn.net/machh/article/details/52121648  流媒体传输协议详解之---RTSP认证

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值