RTSP协议分析

RTSP协议


目录

  1. FFmpeg源码对应⽬录
  2. RTSP协议概述
  3. RTSP协议与HTTP协议区别
  4. 推流过程
    1. 推流详细过程
      1. 第⼀步:OPTION 查询服务器端可⽤⽅法
      2. 第⼆步:ANNOUNCE 发送媒体描述信息
      3. 第三步:SETUP建⽴RTSP会话
      4. 第四步:RECORD请求传送数据
      5. 第五步: RTP数据推送
      6. 第六步:TEARDOWN关闭会话,退出
  5. 推流过程总结
  6. 拉流过程
    1. 拉流详细过程
      1. 第⼀步:查询服务器端可⽤⽅法
      2. 第⼆步:DESCRIBE得到媒体描述信息
      3. 第三步:SETUP建⽴RTSP会话
      4. 第四步:PLAY请求开始传送数据
      5. 第五步: RTP数据传送播放中
      6. 第六步:TEARDOWN关闭会话,退出
  7. 总结

1. FFmpeg源码对应⽬录

  1. rtsp.c 是总⼊⼝,推流拉流都是该⽂件
  2. rtspenc.c:推流的时候使⽤
  3. rtspdec.c:拉流的时候使⽤

2. RTSP协议概述

  1. RTSP 很详细的英⽂⽂档 https://blog.csdn.net/u012519333/article/details/52746375
  2. RTSP(Real-Time Stream Protocol )是⼀种基于⽂本的应⽤层协议,在语法及⼀些消息参数等⽅⾯,RTSP协议与HTTP协议类似。
  3. RTSP被⽤于建⽴的控制媒体流的传输,它为多媒体服务扮演“⽹络远程控制”的⻆⾊,对流媒体提供了诸如暂停,快进等控制。尽管有时可以把RTSP控制信息和媒体数据流交织在⼀起传送,但⼀般情况RTSP本身并不⽤于转送媒体流数据。媒体数据的传送可通过RTP/RTCP等协议来完成。
  4. ⼀次基本的RTSP操作过程是:
    1. ⾸先,客户端连接到流服务器并发送⼀个RTSP描述命令(DESCRIBE)。
    2. 流服务器通过⼀个SDP描述来进⾏反馈,反馈信息包括流数量、媒体类型等信息。
    3. 客户端再分析该SDP描述,并为会话中的每⼀个流发送⼀个RTSP建⽴命令(SETUP),RTSP建⽴命令告诉服务器客户端⽤于接收媒体数据的端⼝。
    4. 流媒体连接建⽴完成后,客户端发送⼀个播放命令(PLAY),服务器就开始在UDP上传送媒体流(RTP包)到客户端。
    5. 在播放过程中客户端还可以向服务器发送命令来控制快进、快退和暂停等。
    6. 最后,客户端可发送⼀个终⽌命令(TERADOWN)来结束流媒体会话
      在这里插入图片描述

3. RTSP协议与HTTP协议区别

  1. RTSP引⼊了⼏种新的⽅法,⽐如DESCRIBE、PLAY、SETUP 等,并且有不同的协议标识符,RTSP为rtsp 1.0,HTTP为http 1.1;
  2. HTTP是⽆状态的协议,⽽RTSP为每个会话保持状态,有session的概念;
  3. RTSP协议的客户端和服务器端都可以发送Request请求,⽽在HTTPF 协议中,只有客户端能发送Request请求。
  4. 在RTSP协议中,载荷数据⼀般是通过带外⽅式来传送的(除了交织的情况),及通过RTP协议在不同的通道中来传送载荷数据。⽽HTTP协议的载荷数据都是通过带内⽅式传送的,⽐如请求的⽹⻚数据是在回应的消息体中携带的。
  5. RTSP使⽤ISO 10646(UTF-8) ⽽不是ISO 8859-1,以配合当前HTML的国际化;
  6. RTSP协议使用554端口,http使用80端口。
  7. RTSP使⽤URI请求时包含绝对URI。⽽由于历史原因造成的向后兼容性问题,HTTP/1.1只在请求中包含绝对路径,把主机名放⼊单独的标题域中;

4. 推流过程

在这里插入图片描述

1. 推流详细过程
1. 第⼀步:OPTION 查询服务器端可⽤⽅法
  1. C->S:OPTION request,询问S有哪些⽅法可⽤
    在这里插入图片描述
  2. S->C:OPTION response,S回应信息的public头字段中包括提供的所有可⽤⽅法
    在这里插入图片描述
2. 第⼆步:ANNOUNCE 发送媒体描述信息
  1. C->S:ANNOUNCE request,客户端发送媒体描述信息给服务器
    在这里插入图片描述
    在这里插入图片描述

  2. S->C:ANNOUNCE response,S回应媒体描述信息,并返回了Session ID
    在这里插入图片描述

3. 第三步:SETUP建⽴RTSP会话
  1. C->S:SETUP request,通过Transport头字段列出可接受的传输选项,请求S建⽴会话
    在这里插入图片描述
  2. 其中client_port=31590-31591含义为:
    1. RTP客户端发送端口为 31590
    2. RTCP客户端发送端口为 31591
  3. S->C:SETUP response,S建⽴会话,通过Transport头字段返回选择的具体转输选项,并返回建⽴的Session ID;
    在这里插入图片描述
  4. 其中client_port=31590-31591;server_port=59472-59473含义为
    1. 客户端发送到服务器,RTP端口是: 31590(C) -> 59472(S)
    2. 客户端发送到服务器,RTCP端口是: 31591(C) -> 59473 (S)
  5. 例如RTP包信息:
    在这里插入图片描述
  6. C->S:SETUP request,通过Transport头字段列出可接受的传输选项,请求S建⽴会话(重复setup步骤,建立音频会话)
    1. 其中,streamid=0表示建立video会话,streamid=1表示建立audio会话
      在这里插入图片描述
  7. S->C:SETUP response,S建⽴会话,通过Transport头字段返回选择的具体转输选项
    在这里插入图片描述
4. 第四步:RECORD请求传送数据
  1. C->S:RECORD request,C向S请求发送数据
    在这里插入图片描述
  2. S->C:RECORD response,S回应该允许的信息
    在这里插入图片描述
5. 第五步: RTP数据推送
  1. C->S:发送流媒体数据,通过RTP协议传送数据
  2. 视频数据
    在这里插入图片描述
  3. 音频数据
    4.
6. 第六步:TEARDOWN关闭会话,退出
  1. C->S:TEARDOWN request,C请求关闭会话
    在这里插入图片描述
  2. S->C:TEARDOWN response,S回应该请求
    在这里插入图片描述

5. 推流过程总结

在这里插入图片描述


6. 拉流过程

在这里插入图片描述

1. 拉流详细过程
1. 第⼀步:查询服务器端可⽤⽅法
  1. C->S:OPTION request,询问S有哪些⽅法可⽤
    在这里插入图片描述
  2. S->C:OPTION response,S回应信息的public头字段中包括提供的所有可⽤⽅法
    在这里插入图片描述
2. 第⼆步:DESCRIBE得到媒体描述信息
  1. C->S:DESCRIBE request,要求得到S提供的媒体描述信息
    在这里插入图片描述

  2. S->C:DESCRIBE response,S回应媒体描述信息,⼀般是sdp信息
    在这里插入图片描述

3. 第三步:SETUP建⽴RTSP会话
  1. C->S:SETUP request,通过Transport头字段列出可接受的传输选项,请求S建⽴会话(视频)
    在这里插入图片描述

  2. S->C:SETUP response,S建⽴会话,通过Transport头字段返回选择的具体转输选项

    1. 和推流不同点在于拉流ssrc是具体值, 推流是000000
      在这里插入图片描述
  3. C->S:SETUP request,通过Transport头字段列出可接受的传输选项,请求S建⽴会话(音频)
    在这里插入图片描述

  4. S->C:SETUP response,S建⽴会话,通过Transport头字段返回选择的具体转输选项
    在这里插入图片描述

4. 第四步:PLAY请求开始传送数据
  1. C->S:PLAY request,C请求S开始发送数据
    在这里插入图片描述
  2. S->C:PLAY response,S回应该请求的信息
    在这里插入图片描述
5. 第五步: RTP数据传送播放中
  1. S->C:发送流媒体数据,通过RTP协议传送数据
  2. ssrc就是在setup返回的ssrc
  3. video的ssrc来⾃服务器,audio的ssrc也是来自服务器
    在这里插入图片描述
  4. audio
    在这里插入图片描述
6. 第六步:TEARDOWN关闭会话,退出
  1. C->S:TEARDOWN request,C请求关闭会话
    在这里插入图片描述
  2. S->C:TEARDOWN response,S回应该请求
    在这里插入图片描述

7. 总结

  1. 推拉流过程区别
    第⼀步 option是⼀样的
    第⼆步 有区别,推流:ANNOUNCE; 拉流:DESCRIBE
    第三步: SETUP
    第四步:推流:RECORD;拉流:PLAY
    第五步:RTP传输,只是⽅向刚好相反
    第六步:TEARDOWN

  2. SSRC由谁来定义,是client还是server?
    推流是客户端⾃⼰定义的
    拉流的时候是服务器发送过来的

  3. session id由谁⽽来
    推流来⾃server,当C->S ANNOUNCE后,server reply时附带session id

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
RTSP是一种实时流协议,用于在IP网络上控制实时流媒体的传输。它是一种客户端/服务器协议,客户端通过发送请求与服务器进行通信,控制流媒体的传输和播放。下面是RTSP协议的详细分析: 1. RTSP协议的结构 RTSP协议由命令和响应组成,命令包括请求和指令,响应包括状态码和描述。RTSP协议使用文本格式进行通信,每个消息都以一个请求或响应头开始,后跟一个可选的消息体。 2. RTSP协议的功能 RTSP协议的主要功能是控制实时流媒体的传输和播放。它提供了以下功能: - 管理流媒体的连接和断开连接。 - 控制流媒体的传输速率和数据量。 - 控制流媒体的播放状态,包括播放、暂停、停止等操作。 - 管理流媒体的格式和编码方式。 - 实现流媒体的会话控制,包括会话的开始、结束和重定向等操作。 3. RTSP协议的工作流程 RTSP协议的工作流程大致如下: - 客户端发送一个RTSP请求给服务器。 - 服务器根据请求返回一个RTSP响应。 - 客户端根据响应进行下一步操作,例如请求数据、控制播放状态等。 - 服务器根据客户端的请求发送流媒体数据。 4. RTSP协议的应用场景 RTSP协议广泛应用于实时流媒体传输,如视频直播、视频监控、视频会议等领域。它可以实现多个客户端同时访问同一流媒体资源,并且可以通过实时控制传输速率和数据量来保证流媒体的质量和稳定性。 5. RTSP协议的优点和缺点 RTSP协议的优点是可以实现实时流媒体的传输和播放,并且可以控制流媒体的质量和稳定性。它还支持多种流媒体格式和编码方式,具有良好的兼容性和扩展性。 RTSP协议的缺点是传输效率较低,需要较大的带宽和网络资源。同时,由于RTSP协议是基于文本格式进行通信,对于大流量的实时流媒体传输,可能会出现延迟和卡顿等问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值