一:总体了解
RTSP(Real-Time Stream Protocol )是一种基于文本的应用层协议,直白的讲客户端与服务器建立连接并从服务器上接收流,服务器上的流可以是采集的,文件,等等。
二:服务器模式
   1:以文件为例,输入到服务器的源可以做一个MediaSession, 的list来管理各各文件流,最理想的方式是这个list管理各个客户端要请求的流,这中间就要做复制流的操作。
   2:接收客户端请求,当每一个客户端连接到服务器时,建立一个RtspSession, 的list, 对每一个客户端的请求,命令做出响应。即每一个客户端都是一个RtspSession。
三:RTSP请求消息
   服务器启动后已经创建了TCP,listen,等待客户端的连接,当客户端请求和服务器连接时,要发送一个例如RTSP://*.*.*.*(ip):(端口)/文件path,的请求,这样根据信息,客户端和服务器就可以建立TCP连接。
   然后服务器对客户端的请求开始做出响应。
   DESCRIBE,ANNOUNCE,GET_PARAMETER,OPTIONS,PAUSE,PLAY,RECORD,SETUP,SET_PARAMETER,TEARDOWN,这里只说下常用的几种请求。

    

Android rtsp地址 安卓rtsp服务器_客户端



   1:OPTIONS,C主动发出请求,查询S有哪些方法可以用(这10种当中),然后S回应给C自己有什么处理方法可以用。

   2:DESCRIBE,C主动发出请求,要求S给出C请求媒体的描述信息(即要C要接收的媒体,音频或视频的描述信息SDP),S将从文件或采集时读取的信息填写到固定格式的SDP中发送给请求本媒体的C。

   3:SETUP,C主动发出请求,要求S创建传输数据的连接一般为UDP,S创建UDP,C与之连接。

   4:PLAY,C主动发出请求,要求S开始往C传输数据,这时用到的就是SETUP建立的UDP连接,S开始往C传输数据,C接收,然后显示,存储等等。

   5:TEARDOWN,C主动发出请求,要求S关闭连接的会话,一个传输命令的TCP,一个传输数据的UDP,一般先停止传输数据(UDP),然后关闭连接。

四:会话描述协议(SDP)

   SDP用到的地方就是在DESCRIBE的,服务器将从文件或采集时读取的信息填写到固定格式的SDP中发送给请求本媒体的客户端。

   SDP 信息是文本信息,采用 UTF-8 编 码中的 ISO 10646 字符集。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 个或多个会话属性行)

五:实时传输协议(RTP)

   RTP用到的地方就是 PLAY ,服务器往客户端传输数据用UDP协议,RTP是在传输数据的前面加了个12字节的头(描述信息)。

   RTP载荷封装设计本文的网络传输是基于IP协议,所以最大传输单元(MTU)最大为1500字节,在使用IP/UDP/RTP的协议层次结构的时候,

   这其中包括至少20字节的IP头,8字节的UDP头,以及12字节的RTP头。这样,头信息至少要占用40个字节,那么RTP载荷的最大尺寸为1460字节。

   以H264 为例,如果一帧数据大于1460,则需要分片打包,然后到接收端再拆包,组合成一帧数据,进行解码播放。

Android rtsp地址 安卓rtsp服务器_Android rtsp地址_02

Android rtsp地址 安卓rtsp服务器_服务器_03


六:RTP/RTSP/RTCP的区别

   1:•RTP:实时传输协议(Real-time Transport Protocol) •RTP/RTCP是实际传输数据的协议

     •RTP传输音频/视频数据,如果是PLAY,Server发送到Client端,如果是RECORD,可以由Client发送到Server

     •整个RTP协议由两个密切相关的部分组成:RTP数据协议和RTP控制协议(即RTCP)

   2:•RTSP:实时流协议(Real Time Streaming Protocol,RTSP) •RTSP的请求主要有DESCRIBE,SETUP,PLAY,PAUSE,TEARDOWN,OPTIONS等,

     顾名思义可以知道起对话和控制作用

     •RTSP的对话过程中SETUP可以确定RTP/RTCP使用的端口,PLAY/PAUSE/TEARDOWN可以开始或者停止RTP的发送,等等.

   3:•RTCP: •RTP/RTCP是实际传输数据的协议

     •RTCP包括Sender Report和Receiver Report,用来进行音频/视频的同步以及其他用途,是一种控制协议。(本文暂不做分析)。

Android rtsp地址 安卓rtsp服务器_Android rtsp地址_04


七:可扩展方式

   1:媒体源,可扩展为摄像头,麦克风,经编码后的数据,或mux(复用后的音视频数据),如ts,mp4等等。

   2:添加媒体源流复制功能,对多个客户端请求一个流做处理。

   3:服务器对各个客户端完成不同响应的处理,可以根据不同需求做扩展。

   4:局域网穿透。
   5:增加rtcp,控制。等等。