一.简介
RTSP(Real Time Streaming Protocol)实时流传输协议,是TCP/IP协议体系中的一个基于文本的应用层协议,由哥伦比亚大学、网景和RealNetworks公司提交的IETF RFC2326标准。该协议定义了一对多应用程序如何有效地通过IP网络传送多媒体数据。RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或UDP完成数据传输。
HTTP与RTSP相比,HTTP请求由客户机发出,服务器作出响应;使用RTSP时,客户机和服务器都可以发出请求,即RTSP可以是双向的。RTSP是用来控制声音或影像的多媒体串流协议,并允许同时多个串流需求控制,传输时所用的网络通讯协定并不在其定义的范围内,服务器端可以自行选择使用TCP或UDP来传送串流内容,它的语法和运作跟HTTP 1.1类似,但并不特别强调时间同步,所以比较能容忍网络延迟。而前面提到的允许同时多个串流需求控制(Multicast),除了可以降低服务器端的网络用量,更进而支持多方视讯会议(Video Conference)。因为与HTTP1.1的运作方式相似,所以代理服务器〈Proxy〉的快取功能〈Cache〉也同样适用于RTSP,并因RTSP具有重新导向功能,可视实际负载情况来转换提供服务的服务器,以避免过大的负载集中于同一服务器而造成延迟。
RTSP与RTP最大的区别在于:RTSP是一种双向实时数据传输协议,它允许客户端向服务器端发送请求,如回放、快进、倒退等操作。当然,RTSP可基于RTP来传送数据,还可以选择TCP、UDP、组播UDP等通道来发送数据,具有很好的扩展性。RTP是用来提供实时传输的,它建立在UDP之上,因而可以看成是传输层的一个子层。
目前碰到的一个应用:服务器端实时采集、编码并发送两路视频,客户端接收并显示两路视频。由于客户端不必对视频数据做任何回放、倒退等操作,可直接采用UDP+RTP+组播实现。

二.RTSP重要术语
5.消息(Message):
RTSP通信的基本单元,由特定语法结构,序列化的八位字节流组成。
三.RTSP消息格式
1.请求消息

其中方法包括OPIONS、DESCRIBE、SETUP、PLAY、TEARDOWN等。URL是接接收方的地址,例如:rtsp://192.168.0.1/video.264。RTSP版本一般都是 RTSP/1.0。每行后面的CRLF表示回车换行,需要接收端有相应的解析,最后一个消息头需要有两个CRLF。消息体是可选的,有的请求消息并不带消息体
2.响应消息

其中RTSP版本一般都是RTSP/1.0。状态码是一个数值,用于表示请求消息的执行结果,比如200表示成功。短语是与状态码对应的文本解释。
四.RTSP重要方法

1.OPTIONS:
用于得到服务器提供的可用方法。
如:
五.RTSP重要首部字段名
1.Accept:
用于指定客户端可以接受的媒体描述信息类型。
六.RTSP消息交互过程
C表示RTSP客户端,S表示RTSP服务端
1.第一步:查询服务器端可用方法
C->S:OPTIONrequest //询问S有哪些方法可用
S->C:OPTIONresponse //S回应信息的public头字段中包括提供的所有可用方法
七.SDP协议
1.SDP协议概述
SDP(Session Description Protocol )会话描述协议,用于描述多媒体会话,它为会话通知、会话初始和其它形式的多媒体会话初始等操作提供服务。它的标准文件是IETF RFC4566。
SDP的设计宗旨是通用性协议,所有它可以应用于很大范围的网络环境和应用程序,但 SDP不支持会话内容协商或媒体编码。它时一个纯粹的会话描述格式,不包含任何传输协议。
会话描述:
☆v= (协议版本)
☆o= (所有者/创建者和会话标识符)
☆s= (会话名称)
☆i=* (会话信息)
☆u=* (URI 描述)
☆e=* (Email 地址)
☆p=* (电话号码)
☆c=* (连接信息 ― 如果包含在所有媒体中,则不需要该字段)
☆b=* (带宽信息)
这里填写一个或多个间描述,具体参考“时间描述”。
☆z=* (时间区域调整)
☆k=* (加密密钥)
☆a=* (0个或多个会话属性线路)
这里填写0个或多个媒体描述,具体参考“媒体描述”。
时间描述:
☆t= (会话活动时间)
☆r=* (0或多次重复次数)
媒体描述
☆m= (媒体名称和传输地址)
☆i=* (媒体标题)
☆c=* (连接信息 — 如果包含在会话层则该字段可选)
☆b=* (带宽信息)
☆k=* (加密密钥)
☆a=* (0个或多个会话属性线路)
s=
:给定了会话名称
i=
:提供了 关于会话的一些信息
u=
:URI(Uniform Resource Identifier)用于网络客户端,它指向了关于会话的额外信息
e=
:Email地址
c=
:包含连接数据
t=
:指定了会话开始和结束的时间
a=
:属性主要用来扩展SDP,通常这种属性是会话的一部分,比如a=recvonly
a=
:
:带值的属性,比如说白板上的内容,a=orient:portrait、a=landscape或者a=seascape。 比较常用的是a=rtpmap:
/
[/
]
m=
:包含许多媒体描述,每个描述都以“m=”开头
参考链接:http://www.ietf.org/rfc/rfc2326.txt
参考链接:RFC 4566 – SDP: Session Description Protocol
参考链接:RTSP协议学习笔记_雷霄骅的博客-CSDN博客_rtsp
参考链接:RTSP协议总结 – 简书
原文链接:https://blog.csdn.net/caoshangpa/article/details/
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/224471.html原文链接:https://javaforall.net
