RTSP(Real-Time Stream Protocol)协议是一个基于文本的多媒体播放控制协议,属于应用层。RTSP以客户端方式工作,对流媒体提供播放、暂停、后退、前进等操作。该标准由IETF指定,对应的协议是RFC2326。

RTSP作为一个应用层协议,提供了一个可供扩展的框架,使得流媒体的受控和点播变得可能,它主要用来控制具有实时特性的数据的发送,但其本身并不用于传送流媒体数据,而必须依赖下层传输协议(如RTP/RTCP)所提供的服务来完成流媒体数据的传送。RTSP负责定义具体的控制信息、操作方法、状态码,以及描述与RTP之间的交互操作。RTSP媒体服务协议框架如下:

客户端要播放RTSP媒体流,就需要知道媒体源的URL,RTSP的URL格式一般如下:

  1. rtsp://host[:port]/[abs_path]/content_name
  • host: 有效的域名或IP地址;
  • port: 端口号,缺省为554,若为缺省可不填写,否则必须写明。

例如,一个完整的RTSP URL可写为:

  1. rtsp://192.168.1.67:554/test

又如目前市面上常用的海康网络摄像头的RTSP地址格式为:

  1. rtsp://[username]:[password]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream

示例:

  1. rtsp://admin:12345@192.168.1.67:554/h264/ch1/main/av_stream
  1. rtsp://admin:12345@192.168.1.67/mpeg4/ch1/sub/av_stream

RTSP报文

对RTSP协议的使用有了一个大概的了解之后,我们来看一下RTSP报文结构。

RTSP是一种基于文本的协议,用CRLF(回车换行)作为每一行的结束符,其好处是,在使用过程中可以方便地增加自定义参数,也方便抓包分析。从消息传送方向上来分,RTSP的报文有两类:请求报文和响应报文。请求报文是指从客户端向服务器发送的请求(也有少量从服务器向客户端发送的请求),响应报文是指从服务器到客户端的回应。

RTSP请求报文的常用方法与作用:

一次基本的RTSP交互过程如下,C表示客户端,S表示服务端。

首先客户端连接到流媒体服务器并发送一个RTSP描述请求(DESCRIBE request),服务器通过一个SDP(Session DescriptionProtocol)描述来进行反馈(DESCRIBEresponse),反馈信息包括流数量、媒体类型等信息。客户端分析该SDP描述,并为会话中的每一个流发送一个RTSP连接建立请求(SETUPrequest),该命令会告诉服务器用于接收媒体数据的端口,服务器响应该请求(SETUP response)并建立连接之后,就开始传送媒体流(RTP包)到客户端。在播放过程中客户端还可以向服务器发送请求来控制快进、快退和暂停等。最后,客户端可发送一个终止请求(TEARDOWN request)来结束流媒体会话。

下面我们通过具体的消息实例来进一步了解一下RTSP的工作过程:

  • OPTIONS

OPTIONS请求是客户端向服务器询问可用的方法,请求和回复实例如下:

  1. C->S: OPTIONS rtsp://example.com/media.mp4 RTSP/1.0
  2. CSeq: 1
  3. Require: implicit-play
  4. Proxy-Require: gzipped-messages
  5. S->C: RTSP/1.0 200 OK
  6. CSeq: 1
  7. Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE
  • DESCRIBE

客户端向服务器请求媒体资源描述,服务器端通过SDP(Session Description Protocol)格式回应客户端的请求。资源描述中会列出所请求媒体的媒体流及其相关信息,典型情况下,音频和视频分别作为一个媒体流传输。实例如下:

  1. C->S: DESCRIBE rtsp://example.com/media.mp4 RTSP/1.0
  2. CSeq: 2
  3. S->C: RTSP/1.0 200 OK
  4. CSeq: 2
  5. Content-Base: rtsp://example.com/media.mp4
  6. Content-Type: application/sdp
  7. Content-Length: 460
  8. m=video 0 RTP/AVP 96
  9. a=control:streamid=0
  10. a=range:npt=0-7.741000
  11. a=length:npt=7.741000
  12. a=rtpmap:96 MP4V-ES/5544
  13. a=mimetype:string;"video/MP4V-ES"
  14. a=AvgBitRate:integer;304018
  15. a=StreamName:string;"hinted video track"
  16. m=audio 0 RTP/AVP 97
  17. a=control:streamid=1
  18. a=range:npt=0-7.712000
  19. a=length:npt=7.712000
  20. a=rtpmap:97 mpeg4-generic/32000/2
  21. a=mimetype:string;"audio/mpeg4-generic"
  22. a=AvgBitRate:integer;65790
  23. a=StreamName:string;"hinted audio track"
  • SETUP

SETUP请求确定了具体的媒体流如何传输,该请求必须在PLAY请求之前发送。SETUP请求包含媒体流的URL和客户端用于接收RTP数据(audio or video)的端口以及接收RTCP数据(meta information)的端口。服务器端的回复通常包含客户端请求参数的确认,并会补充缺失的部分,比如服务器选择的发送端口。每一个媒体流在发送PLAY请求之前,都要首先通过SETUP请求来进行相应的配置。


  1. C->S: SETUP rtsp://example.com/media.mp4/streamid=0 RTSP/1.0
  2. CSeq: 3
  3. Transport: RTP/AVP;unicast;client_port=8000-8001
  4. S->C: RTSP/1.0 200 OK
  5. CSeq: 3
  6. Transport: RTP/AVP;unicast;client_port=8000-8001;server_port=9000-9001;ssrc=1234ABCD
  7. Session: 12345678
  • PLAY

客户端通过PLAY请求来播放一个或全部媒体流,PLAY请求可以发送一次或多次,发送一次时,URL为包含所有媒体流的地址,发送多次时,每一次请求携带的URL只包含一个相应的媒体流。PLAY请求中可指定播放的range,若未指定,则从媒体流的开始播放到结束,如果媒体流在播放过程中被暂停,则可在暂停处重新启动流的播放。

  1. C->S: PLAY rtsp://example.com/media.mp4 RTSP/1.0
  2. CSeq: 4
  3. Range: npt=5-20
  4. Session: 12345678
  5. S->C: RTSP/1.0 200 OK
  6. CSeq: 4
  7. Session: 12345678
  8. RTP-Info: url=rtsp://example.com/media.mp4/streamid=0;seq=9810092;rtptime=3450012
  • PAUSE

PAUSE请求会暂停一个或所有媒体流,后续可通过PLAY请求恢复播放。PAUSE请求中携带所请求媒体流的URL,若参数range存在,则指明在何处暂停,若该参数不存在,则暂停立即生效,且暂停时长不确定。


  1. C->S: PAUSE rtsp://example.com/media.mp4 RTSP/1.0
  2. CSeq: 5
  3. Session: 12345678
  4. S->C: RTSP/1.0 200 OK
  5. CSeq: 5
  6. Session: 12345678
  • TEARDOWN

结束会话请求,该请求会停止所有媒体流,并释放服务器上的相关会话数据。

  1. C->S: TEARDOWN rtsp://example.com/media.mp4 RTSP/1.0
  2. CSeq: 8
  3. Session: 12345678
  4. S->C: RTSP/1.0 200 OK
  5. CSeq: 8
  • GET_PARAMETER

检索指定URI数据中的参数值。不携带消息体的GET_PARAMETER可用来测试服务器端或客户端是否可通(类似ping的功能)。

  1. S->C: GET_PARAMETER rtsp://example.com/media.mp4 RTSP/1.0
  2. CSeq: 9
  3. Content-Type: text/parameters
  4. Session: 12345678
  5. Content-Length: 15
  6. packets_received
  7. jitter
  8. C->S: RTSP/1.0 200 OK
  9. CSeq: 9
  10. Content-Length: 46
  11. Content-Type: text/parameters
  12. packets_received: 10
  13. jitter: 0.3838
  • SET_PARAMETER

用于设置指定媒体流的参数。


  1. C->S: SET_PARAMETER rtsp://example.com/media.mp4 RTSP/1.0
  2. CSeq: 10
  3. Content-length: 20
  4. Content-type: text/parameters
  5. barparam: barstuff
  6. S->C: RTSP/1.0 451 Invalid Parameter
  7. CSeq: 10
  8. Content-length: 10
  9. Content-type: text/parameters
  10. barparam
  • REDIRECT

重定向请求,用于服务器通知客户端新的服务地址,客户端需要向这个新地址重新发起请求。重定向请求中可能包含Range参数,指明重定向生效的时间。客户端若需向新服务地址发起请求,必须先teardown当前会话,再向指定的新主机setup一个新的会话。

  1. S->C: REDIRECT rtsp://example.com/media.mp4 RTSP/1.0
  2. CSeq: 11
  3. Location: rtsp://bigserver.com:8001
  4. Range: clock=19960213T143205
  • ANNOUNCE

ANNOUNCE请求有两个用途:(1)C->S:客户端向服务器端发布URL指定的媒体信息描述;(2) S->C:实时更新对话描述。若媒体表示中新增了一个媒体流,例如在直播过程中,则整个媒体表示的description都要被重新发送,而不是只发送新增部分。

  1. C->S: ANNOUNCE rtsp://example.com/media.mp4 RTSP/1.0
  2. CSeq: 7
  3. Date: 23 Jan 1997 15:35:06 GMT
  4. Session: 12345678
  5. Content-Type: application/sdp
  6. Content-Length: 332
  7. v=0
  8. o=mhandley 2890844526 2890845468 IN IP4 126.16.64.4
  9. s=SDP Seminar
  10. i=A Seminar on the session description protocol
  11. u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps
  12. e=mjh@isi.edu (Mark Handley)
  13. c=IN IP4 224.2.17.12/127
  14. t=2873397496 2873404696
  15. a=recvonly
  16. m=audio 3456 RTP/AVP 0
  17. m=video 2232 RTP/AVP 31
  18. S->C: RTSP/1.0 200 OK
  19. CSeq: 7
  • RECORD

请求录制指定范围的媒体数据,请求中可指定录制的起止时间戳;若未指定时间范围,则使用presentation description中的开始和结束时间,这种情况下,如果会话已开始,则立即启动录制操作。


  1. C->S: RECORD rtsp://example.com/media.mp4 RTSP/1.0
  2. CSeq: 6
  3. Session: 12345678
  4. S->C: RTSP/1.0 200 OK
  5. CSeq: 6
  6. Session: 12345678

以上就是RTSP中常用的命令及其实例介绍。最后,来看一段实际使用的RTSP命令交互过程,该过程是通过PC对海康摄像头视频流的拉取和播放,并通过Wireshark抓取客户端的数据得到的:

  1. OPTIONS rtsp://10.3.8.202:554 RTSP/1.0
  2. CSeq: 2
  3. User-Agent: LibVLC/2.2.8 (LIVE555 Streaming Media v2016.02.22)
  4. RTSP/1.0 200 OK
  5. CSeq: 2
  6. Public: OPTIONS, DESCRIBE, PLAY, PAUSE, SETUP, TEARDOWN, SET_PARAMETER, GET_PARAMETER
  7. Date: Mon, Jan 29 2018 16:56:47 GMT
  8. DESCRIBE rtsp://10.3.8.202:554 RTSP/1.0
  9. CSeq: 3
  10. User-Agent: LibVLC/2.2.8 (LIVE555 Streaming Media v2016.02.22)
  11. Accept: application/sdp
  12. RTSP/1.0 401 Unauthorized
  13. CSeq: 3
  14. WWW-Authenticate: Digest realm="IP Camera(10789)", nonce="6b9a455aec675b8db81a9ceb802e4eb8", stale="FALSE"
  15. Date: Mon, Jan 29 2018 16:56:47 GMT
  16. DESCRIBE rtsp://10.3.8.202:554 RTSP/1.0
  17. CSeq: 4
  18. Authorization: Digest username="admin", realm="IP Camera(10789)", nonce="6b9a455aec675b8db81a9ceb802e4eb8", uri="rtsp://10.3.8.202:554", response="3fc4b15d7a923fc36f32897e3cee69aa"
  19. User-Agent: LibVLC/2.2.8 (LIVE555 Streaming Media v2016.02.22)
  20. Accept: application/sdp
  21. RTSP/1.0 200 OK
  22. CSeq: 4
  23. Content-Type: application/sdp
  24. Content-Base: rtsp://10.3.8.202:554/
  25. Content-Length: 551
  26. v=0
  27. o=- 1517245007527432 1517245007527432 IN IP4 10.3.8.202
  28. s=Media Presentation
  29. e=NONE
  30. b=AS:5050
  31. t=0 0
  32. a=control:rtsp://10.3.8.202:554/
  33. m=video 0 RTP/AVP 96
  34. c=IN IP4 0.0.0.0
  35. b=AS:5000
  36. a=recvonly
  37. a=x-dimensions:2048,1536
  38. a=control:rtsp://10.3.8.202:554/trackID=1
  39. a=rtpmap:96 H264/90000
  40. a=fmtp:96 profile-level-id=420029; packetization-mode=1; sprop-parameter-sets=Z00AMp2oCAAwabgICAoAAAMAAgAAAwBlCA==,aO48gA==
  41. a=Media_header:MEDIAINFO=494D4B48010200000400000100000000000000000000000000000000000000000000000000000000;
  42. a=appversion:1.0
  43. SETUP rtsp://10.3.8.202:554/trackID=1 RTSP/1.0
  44. CSeq: 5
  45. Authorization: Digest username="admin", realm="IP Camera(10789)", nonce="6b9a455aec675b8db81a9ceb802e4eb8", uri="rtsp://10.3.8.202:554/", response="ddfbf3e268ae954979407369a104a620"
  46. User-Agent: LibVLC/2.2.8 (LIVE555 Streaming Media v2016.02.22)
  47. Transport: RTP/AVP;unicast;client_port=57844-57845
  48. RTSP/1.0 200 OK
  49. CSeq: 5
  50. Session: 1273222592;timeout=60
  51. Transport: RTP/AVP;unicast;client_port=57844-57845;server_port=8218-8219;ssrc=5181c73a;mode="play"
  52. Date: Mon, Jan 29 2018 16:56:47 GMT
  53. PLAY rtsp://10.3.8.202:554/ RTSP/1.0
  54. CSeq: 6
  55. Authorization: Digest username="admin", realm="IP Camera(10789)", nonce="6b9a455aec675b8db81a9ceb802e4eb8", uri="rtsp://10.3.8.202:554/", response="b5abf0b230de4b49d6c6d42569f88e91"
  56. User-Agent: LibVLC/2.2.8 (LIVE555 Streaming Media v2016.02.22)
  57. Session: 1273222592
  58. Range: npt=0.000-
  59. RTSP/1.0 200 OK
  60. CSeq: 6
  61. Session: 1273222592
  62. RTP-Info: url=rtsp://10.3.8.202:554/trackID=1;seq=65373;rtptime=3566398668
  63. Date: Mon, Jan 29 2018 16:56:47 GMT
  64. GET_PARAMETER rtsp://10.3.8.202:554/ RTSP/1.0
  65. CSeq: 7
  66. Authorization: Digest username="admin", realm="IP Camera(10789)", nonce="6b9a455aec675b8db81a9ceb802e4eb8", uri="rtsp://10.3.8.202:554/", response="bb2309dcd083b25991c13e165673687b"
  67. User-Agent: LibVLC/2.2.8 (LIVE555 Streaming Media v2016.02.22)
  68. Session: 1273222592
  69. RTSP/1.0 200 OK
  70. CSeq: 7
  71. Date: Mon, Jan 29 2018 16:56:47 GMT
  72. TEARDOWN rtsp://10.3.8.202:554/ RTSP/1.0
  73. CSeq: 8
  74. Authorization: Digest username="admin", realm="IP Camera(10789)", nonce="6b9a455aec675b8db81a9ceb802e4eb8", uri="rtsp://10.3.8.202:554/", response="e08a15c27d3daac14fd4b4bcab424a5e"
  75. User-Agent: LibVLC/2.2.8 (LIVE555 Streaming Media v2016.02.22)
  76. Session: 1273222592
  77. RTSP/1.0 200 OK
  78. CSeq: 8
  79. Session: 1273222592
  80. Date: Mon, Jan 29 2018 16:57:03 GMT

网络流媒体协议之——RTSP协议的更多相关文章

  1. 网络流媒体协议的联系与区别(RTP RTCP RTSP RTMP HLS)

    目录 网络流媒体协议的联系与区别(RTP RTCP RTSP RTMP HLS) 简结 RTP RTCP RTSP 区别与联系 RTSP.RTMP.HLS 区别与联系 关于直播 流媒体各协议层次图 基 ...

  2. 【FFMPEG】网络流媒体协议

    目录(?)[-] RTP RTCP SRTP SRTCP RTSP RTSP 和RTP的关系 SDP RTMPRTMPS mms HLS RTP           参考文档 RFC3550/RFC3 ...

  3. RTSP协议介绍 (转)

    1. 实 时流协议RTSP RTSP[3]协 议以客户服务器方式工作,它是一个多媒体播放控制协议,用来使用户在播放从因特网下载的实时数据时能够进行控制,如:暂停/继 续.后退.前进等.因此 RTSP ...

  4. RTSP 协议分析

    RTSP 协议分析1.概述: RTSP(Real Time Streaming Protocol),实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学.网景和RealNetwor ...

  5. RTSP协议分析

    RTSP 协议分析 1.概述:  RTSP(Real Time Streaming Protocol),实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学.网景和RealNetw ...

  6. RTSP 协议分析 (一)

    RTSP 协议分析1.概述: RTSP(Real Time Streaming Protocol),实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学.网景和RealNetwor ...

  7. 流媒体协议之RTSP详解20170922

    一.RTSP协议介绍 1.什么是rtsp? RTSP协议以客户服务器方式工作,,如:暂停/继续.后退.前进等.它是一个多媒体播放控制协议,用来使用户在播放从因特网下载的实时数据时能够进行控制, 因此 ...

  8. 流媒体协议RTMP,RTSP与HLS有什么不同

    转载自:http://www.cuplayer.com/player/PlayerCode/Wowza/2015/0204/1774.html HLS (HTTP Live Streaming) Ap ...

  9. 网络协议学习笔记(七)流媒体协议和P2P协议

    概述 上一篇讲解了http和https的协议的相关的知识,现在我们谈一下流媒体协议和P2P协议. 流媒体协议:如何在直播里看到美女帅哥 最近直播比较火,很多人都喜欢看直播,那一个直播系统里面都有哪些组 ...

随机推荐

  1. JavaScript---动态加载script和style样式

    一个网页里面的内容理解为一个XML或者说网页本身也就是一个XML文档,XML文档都有很特殊的象征:"标签"也叫"节点". 一个基本的网页格式 <!DOCT ...

  2. QT--HTTP图片下载器

    QT--HTTP图片下载器 1.http使用前提 QT       += core gui network    //必须加上network 2.必须头文件 #include <QNetwork ...

  3. SQL Server 通过游标重新定义单据数据的单据编号

    DECLARE @Index INTSET @Index=100DECLARE UpdateCursor  CURSOR  FOR (SELECT DISTINCT AA.Id FROM dbo.表 ...

  4. 转载:wepy框架入门

    转载:https://www.jianshu.com/p/93d5a4b99777 安装 wepy 命令行工具. npm install wepy-cli -g 在开发目录生成开发DEMO. wepy ...

  5. 微信小程序开发者工具构建npm提示没找到node_modules目录

    一.官网给的文档写的不够充分,需要你充分理解npm的使用方法,才能明白的: 二.第一步:先在你电脑上安装npm 参考下面文章 https://www.cnblogs.com/zmdComeOn/p/1 ...

  6. hidraw设备简要分析

    关键词:hid.hidraw.usbhid.hidp等等. 下面首先介绍hidraw设备主要用途,然后简要分析hidraw设备驱动(但是不涉及到相关USB/Bluwtooth驱动),最后分析用户空间接 ...

  7. Linux第三章-Linux搭建Java环境

    本文安装系统是基于 CentOS 7 版本及以上 一.安装JDK 1.先去 Oracle官网 下载Linux1.8的版本以 .tar.gz 为后缀的文件,我这里用的是 jdk-8u181-linux- ...

  8. 『003』Shell命令

    『001』索引-Linux Shell Command shell命令 <01>[线上查询及帮助][001]-[001] [001]- 点我快速打开文章[man][help][已改版] & ...

  9. ORA-12505

    tomcat 连不上 oracle,报: java.sql.SQLException: Listener refused the connection with the following error ...

  10. LeetCode 5275. 找出井字棋的获胜者 Find Winner on a Tic Tac Toe Game

    地址 https://www.acwing.com/solution/LeetCode/content/6670/ 题目描述A 和 B 在一个 3 x 3 的网格上玩井字棋. 井字棋游戏的规则如下: ...