专栏首页用户1692782的专栏手撕RTSP协议系列(7)——PLAY

手撕RTSP协议系列(7)——PLAY

上一篇我们熟悉了RTSP_SETUP消息,SETUP可以说是PLAY的准备流程,只有SETUP请求被成功回复之后,客户端才可以发起PLAY请求。本篇我们就来看一下PLAY消息。

PLAY的作用

PLAY消息是客户端发送的播放请求,发送播放请求的时候可以指定播放区间!发起播放请求后,如果连接正常,则服务端开始播放,即开始向客户端按照之前在TRASPORT中约定好的方式发送音视频数据包!播放流程便这样开始了!

PLAY的格式

我们先来看一下PLAY消息中常包含的一些字段:

RTSP URI表明请求的RTSP 地址;

RTSP version表明版本号;

CSeq 表示请求的序列号;

User-Agent表示用户代理;

Session 表示会话id,值为SETUP请求之后,服务端返回的session id的值;

Authorizatiuon表示认证信息;

Range是PLAY消息特有的,代表请求播放的时间段,使用ntp时间来表示。

我们来看一个直观的抓包文件:

通过抓包文件,我们可以看到,该请求是第6条交互指令,会话id是之前setup请求的回复消息返回的session id,Range的值为"npt=0.0000-",表示从开始播放,默认一直播放!

同样,客户端发送PLAY请求之后,服务端会回复RTSP消息,常见的回复字段格式如下:

Rtsp Version表示RTSP的版本;

状态码表示当前消息的状态,没有异常的情况下一般为200;

状态描述是针对状态码的描述,如200对应的描述为OK;

CSeq表示RTSP包的序号;

Session表示会话ID,SETUP返回时确定的ID;

RTP-Info表示RT;

Date表示日期;

我们来看一个抓包文件

CSeq,Session, Date就不多介绍了,主要看下RTP-info:

第一个url表示视频播放的地址,第一个seq表示第一个rtp视频数据包开始的序列号,第一个rtptime表示视频开始播放的时间戳,后面的一组表示音频播放相关的信息,同样也包括url,seq,rtptime!

PLAY 案例

好了,最后放上一个实例:

RTSP PLAY (requst)

PLAY rtsp://192.17.1.63:554/ RTSP/1.0\r\n
Range: npt=0.000-\r\n
CSeq: 6\r\n
User-Agent: Lavf58.42.100\r\n
Session: 337474243\r\n
Authorization: Digest username="admin", realm="IP Camera(23306)", nonce="a946c352dd3ad04cf9830d5e72ffb11e", uri="rtsp://192.17.1.63:554/", response="9ea6c2659d3bce8d129ca3549ecc7fbf"\r\n\r\n

RTSP PLAY (response)

RTSP/1.0 200 OK\r\n
CSeq: 6\r\n
Session: 337474243\r\n
RTP-Info: url=rtsp://192.17.1.63:554/trackID=1;seq=3658;rtptime=1710363406,url=rtsp://192.17.1.63:554/trackID=2;seq=6598;rtptime=4065225152\r\n
Date: Fri, Apr 10 2020 19:07:20 GMT\r\n\r\n

好了,关于RTSP play的介绍就到这里,我们下一讲见!

本文分享自微信公众号 - 视界音你而不同(WorldOfVideoAndAudio),作者:马龙飞

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-10-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 手撕RTSP协议系列(6)——SETUP

    SETUP请求的作用是指明媒体流该以什么方式传输;每个流PLAY之前必须执行SETUP操作;发送SETUP请求时,客户端会指定两个端口,一个端口用于接收RTP数...

    视界音你而不同
  • 手撕RTSP协议系列(13)——RTCP协议

    之前的文章,介绍了RTSP和RTP协议,RTSP用于建立连接及发送请求等,RTP用于实际的媒体数据传输。整个RTSP的流程中,还有一种不可或缺的协议, 那就是R...

    视界音你而不同
  • 手撕RTSP协议系列(8)——PAUSE

    上一篇我们讲解了RTSP PLAY消息,PLAY请求成功之后,RTSP server就会一直向客户端发送RTP数据包!开始“播放”之后,我们相应的就会有暂停,停...

    视界音你而不同
  • 手撕RTSP协议系列(9)——TEARDOWN

    上一篇我们讲了RTSP PAUSE消息,本篇我们来看下RTSP TEARDOWN消息!

    视界音你而不同
  • 手撕RTSP协议系列(10)——GET_PARAMETER

    上一篇我们介绍了RTSP的TEARDOWN指令,用于结束一个RTSP的会话!本篇我们来介绍RTSP GET_PARAMETER!

    视界音你而不同
  • 手撕RTSP协议系列(11)——RTSP_SET_PARAMETER

    上一篇介绍了RTSP的GET_PARAMETER消息,看到这个消息类型,我们很容易习惯性的想到应该还要有一个RTSP_SET_PARAMETER消息,如我我们所...

    视界音你而不同
  • 手撕RTSP协议系列(4)——OPTION

    上一篇,我们介绍了sdp相关信息,接下来开始我们介绍RTSP相关的选项,本篇我们首先来看一下OTPION选项。

    视界音你而不同
  • 手撕RTSP协议系列(5)——DESCRIBE

    上一篇我们介绍了RTSP的OPTION指令,客户端发起OPTION请求后,得到了RTSP服务器支持的指令。在此之后,客户端会继续向服务器发送DESCRIBE消息...

    视界音你而不同
  • 手撕RTSP协议系列(1)——Rtsp基本流程

    哈喽,久违的小伙伴们!之前开了一个专辑手撕了rtmp协议!对于流媒体协议,rtsp协议也是很常见的,接下来我们继续手撕,手撕rtsp协议!本篇我们首先来简单了解...

    视界音你而不同

扫码关注云+社区

领取腾讯云代金券