rtsp协议_流媒体RTSP初识

edc303651be8ede5b32234370806b4f8.gif

摘要:rtsp属于应用层流媒体协议,常见的形式是rtsp以rtp和rtcp为封包形式,在传输层协议udp上进行流媒体传输的

1.RTSP概述

rtsp属于应用层流媒体协议,常见的形式是rtsp以rtp和rtcp为封包形式,在传输层协议udp上进行流媒体传输的。有个之前理解过的rtp与rtcp的基础之后,rtsp就很好理解了。总结一点,rtsp里面的数据包是以rtp和rtcp的形式进行封装的,rtsp的作用在于建立会话连接,控制数据等提供给用户的一些操作和方法。就好比在一个工厂里面,员工只需要负责如何制作产品,如何控制产品的质量(rtp,rtcp),而厂长负责命令什么时候生产,什么时候重做,卖给谁(播放,点播,建立会话等操作)。

0cb3a1090e8f3f02cf1d719712b42e99.png

2.RTSP请求

在学习其他流媒体协议的时候,往往这一步我们学习的都是封包,但是对于rtsp的封包,我们只要清楚rtp和rtcp包就行了,因为rtsp里面的数据包就是rtp(当然,rtsp也可以其他形式,我们只是理解常用形式)。

封包这些都和rtp一样了,那我们学啥?

虽然rtsp数据包是rtp包,但是rtsp作为“厂长”是如何进行决断的,才是我们需要理解的。这是rtsp建立会话的整个过程,

54130c3f73dfeccf397d9959bc60b02b.png

从wireshark抓包的结果来看,rtsp建立完整会话过程,客户端向服务器的请求主要分为这几种:OPTIONS,DESCRIBE,STEP,PLAY,其实还有一种请求,就是关闭会话的时候请求TEARDOWN。

请求作用
OPTIONS获取服务器提供的可用方法
DESCRIBE获取媒体流的相关信息(服务器以sdp格式回应)
STEP客户请求建立会话,并确认传输模式
PLAY客户发起播放请求
TEARDOWN客户发起结束请求

 几种方法的请求类似下面的描述:

d283e7a8208c64e1dd39dfb25b8a190c.png

 在一个完整的rtsp交互过程中,客户端会首先发起一个OPTIONS请求,向服务器获取当前可用的方法,例如播放,暂停等;然后客户端会发起一个DESCRIBE描述请求,服务端会将流媒体信息(流数量,媒体类型等)以SDP的描述形式反馈给客户端;接下来客户端发送SETUP请求来为,每一条流建立会话连接,该请求会将客户端的url,rtp端口号等告诉给服务端,服务端收到请求后就开始传输RTP包数据;在播放的过程中,用户可以发起快进,快退,暂停等操作来实现对流的控制。

下面通过wireshark抓包来看看具体的信息格式,

OPTIONS:这里可以看到在请求和返回中都带有CSeq字段,这个和TCP请求一样,是response用来匹配对应的request。

客户端->服务器
Real Time Streaming Protocol
    Request: OPTIONS rtsp://10.29.1.101:554/Streaming/Channels/1 RTSP/1.0\r\n
        Method: OPTIONS
        URL: rtsp://10.29.1.101:554/Streaming/Channels/1
    CSeq: 1\r\n
    User-Agent: Lavf58.27.103\r\n
    \r\n

服务器->客户端
Real Time Streaming Protocol
    Response: RTSP/1.0 200 OK\r\n
        Status: 200
    CSeq: 1\r\n
    Public: OPTIONS, DESCRIBE, PLAY, PAUSE, SETUP, TEARDOWN, SET_PARAMETER,                                  
    Date:  Mon, Oct 14 2019 10:36:42 GMT\r\n
    \r\n

 DESCRIBE:注意的是有个SDP的结构,就是上面说的媒体信息格式

//DESCRIBE
客户端->服务器
Real Time Streaming Protocol
    Request: DESCRIBE rtsp://10.29.1.101:554/Streaming/Channels/1 RTSP/1.0\r\n
        Method: DESCRIBE
        URL: rtsp://10.29.1.101:554/Streaming/Channels/1
    Accept: application/sdp\r\n
    CSeq: 3\r\n
    User-Agent: Lavf58.27.103\r\n
    \r\n

服务器->客户端
Real Time Streaming Protocol
    Response: RTSP/1.0 200 OK\r\n
        Status: 200
    CSeq: 3\r\n
    Content-type: application/sdp
    Content-Base: rtsp://10.29.1.101:554/Streaming/Channels/1/\r\n
    Content-length: 584
    Date:  Mon, Oct 14 2019 10:36:42 GMT\r\n
    \r\n
    Session Description Protocol
Session Description Protocol

其他的方法类似,就不直接贴了。

3.下篇预告

    RTP与RTCP协议本来不属于我们常见的流媒体协议,类似rtmp,rtsp,hls,webrtc等,但是很多的流媒体协议又是在这两个协议之上的额,比如rtsp和webtrc这两个下层就是rtp与rtcp协议的。这两个协议在四层模型中我们仍把他们归属到应用层协议中,因为这两个协议的实现代码均是由我们用户自己完成,一个包含RTP完整的流媒体协议封装应是类似user data+rtsp+rtp/rtcp+udp+ip来完成的。

end

fd27a90ada54150d778a14e5b06dee68.png

往期推荐

  • 改bug一时爽,一直改一直爽

  • Python从入门到放弃-壹

  • Python从入门到放弃-序列和列表

  • 趣味python-玩转图像第二弹

9f556cd1514ca3ee325ec4ef8ac6a410.gif 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值