summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc7826.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc7826.txt')
-rw-r--r--doc/rfc/rfc7826.txt17811
1 files changed, 17811 insertions, 0 deletions
diff --git a/doc/rfc/rfc7826.txt b/doc/rfc/rfc7826.txt
new file mode 100644
index 0000000..f4258a5
--- /dev/null
+++ b/doc/rfc/rfc7826.txt
@@ -0,0 +1,17811 @@
+
+
+
+
+
+
+Internet Engineering Task Force (IETF) H. Schulzrinne
+Request for Comments: 7826 Columbia University
+Obsoletes: 2326 A. Rao
+Category: Standards Track Cisco
+ISSN: 2070-1721 R. Lanphier
+
+ M. Westerlund
+ Ericsson
+ M. Stiemerling, Ed.
+ University of Applied Sciences Darmstadt
+ December 2016
+
+
+ Real-Time Streaming Protocol Version 2.0
+
+Abstract
+
+ This memorandum defines the Real-Time Streaming Protocol (RTSP)
+ version 2.0, which obsoletes RTSP version 1.0 defined in RFC 2326.
+
+ RTSP is an application-layer protocol for the setup and control of
+ the delivery of data with real-time properties. RTSP provides an
+ extensible framework to enable controlled, on-demand delivery of
+ real-time data, such as audio and video. Sources of data can include
+ both live data feeds and stored clips. This protocol is intended to
+ control multiple data delivery sessions; provide a means for choosing
+ delivery channels such as UDP, multicast UDP, and TCP; and provide a
+ means for choosing delivery mechanisms based upon RTP (RFC 3550).
+
+Status of This Memo
+
+ This is an Internet Standards Track document.
+
+ This document is a product of the Internet Engineering Task Force
+ (IETF). It represents the consensus of the IETF community. It has
+ received public review and has been approved for publication by the
+ Internet Engineering Steering Group (IESG). Further information on
+ Internet Standards is available in Section 2 of RFC 7841.
+
+ Information about the current status of this document, any errata,
+ and how to provide feedback on it may be obtained at
+ http://www.rfc-editor.org/info/rfc7826.
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 1]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+Copyright Notice
+
+ Copyright (c) 2016 IETF Trust and the persons identified as the
+ document authors. All rights reserved.
+
+ This document is subject to BCP 78 and the IETF Trust's Legal
+ Provisions Relating to IETF Documents
+ (http://trustee.ietf.org/license-info) in effect on the date of
+ publication of this document. Please review these documents
+ carefully, as they describe your rights and restrictions with respect
+ to this document. Code Components extracted from this document must
+ include Simplified BSD License text as described in Section 4.e of
+ the Trust Legal Provisions and are provided without warranty as
+ described in the Simplified BSD License.
+
+ This document may contain material from IETF Documents or IETF
+ Contributions published or made publicly available before November
+ 10, 2008. The person(s) controlling the copyright in some of this
+ material may not have granted the IETF Trust the right to allow
+ modifications of such material outside the IETF Standards Process.
+ Without obtaining an adequate license from the person(s) controlling
+ the copyright in such materials, this document may not be modified
+ outside the IETF Standards Process, and derivative works of it may
+ not be created outside the IETF Standards Process, except to format
+ it for publication as an RFC or to translate it into languages other
+ than English.
+
+Table of Contents
+
+ 1. Introduction ...................................................10
+ 2. Protocol Overview ..............................................11
+ 2.1. Presentation Description ..................................12
+ 2.2. Session Establishment .....................................12
+ 2.3. Media Delivery Control ....................................14
+ 2.4. Session Parameter Manipulations ...........................15
+ 2.5. Media Delivery ............................................16
+ 2.5.1. Media Delivery Manipulations .......................16
+ 2.6. Session Maintenance and Termination .......................19
+ 2.7. Extending RTSP ............................................20
+ 3. Document Conventions ...........................................21
+ 3.1. Notational Conventions ....................................21
+ 3.2. Terminology ...............................................21
+ 4. Protocol Parameters ............................................25
+ 4.1. RTSP Version ..............................................25
+ 4.2. RTSP IRI and URI ..........................................25
+ 4.3. Session Identifiers .......................................28
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 2]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ 4.4. Media-Time Formats ........................................28
+ 4.4.1. SMPTE-Relative Timestamps ..........................28
+ 4.4.2. Normal Play Time ...................................29
+ 4.4.3. Absolute Time ......................................30
+ 4.5. Feature Tags ..............................................31
+ 4.6. Message Body Tags .........................................32
+ 4.7. Media Properties ..........................................32
+ 4.7.1. Random Access and Seeking ..........................33
+ 4.7.2. Retention ..........................................34
+ 4.7.3. Content Modifications ..............................34
+ 4.7.4. Supported Scale Factors ............................34
+ 4.7.5. Mapping to the Attributes ..........................35
+ 5. RTSP Message ...................................................35
+ 5.1. Message Types .............................................36
+ 5.2. Message Headers ...........................................36
+ 5.3. Message Body ..............................................37
+ 5.4. Message Length ............................................37
+ 6. General-Header Fields ..........................................37
+ 7. Request ........................................................39
+ 7.1. Request Line ..............................................40
+ 7.2. Request-Header Fields .....................................42
+ 8. Response .......................................................43
+ 8.1. Status-Line ...............................................43
+ 8.1.1. Status Code and Reason Phrase ......................43
+ 8.2. Response Headers ..........................................47
+ 9. Message Body ...................................................47
+ 9.1. Message Body Header Fields ................................48
+ 9.2. Message Body ..............................................49
+ 9.3. Message Body Format Negotiation ...........................49
+ 10. Connections ...................................................50
+ 10.1. Reliability and Acknowledgements .........................50
+ 10.2. Using Connections ........................................51
+ 10.3. Closing Connections ......................................54
+ 10.4. Timing Out Connections and RTSP Messages .................56
+ 10.5. Showing Liveness .........................................57
+ 10.6. Use of IPv6 ..............................................58
+ 10.7. Overload Control .........................................58
+ 11. Capability Handling ...........................................60
+ 11.1. Feature Tag: play.basic ..................................62
+ 12. Pipelining Support ............................................62
+ 13. Method Definitions ............................................63
+ 13.1. OPTIONS ..................................................65
+ 13.2. DESCRIBE .................................................66
+ 13.3. SETUP ....................................................68
+ 13.3.1. Changing Transport Parameters .....................71
+ 13.4. PLAY .....................................................72
+ 13.4.1. General Usage .....................................72
+ 13.4.2. Aggregated Sessions ...............................77
+
+
+
+Schulzrinne, et al. Standards Track [Page 3]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ 13.4.3. Updating Current PLAY Requests ....................78
+ 13.4.4. Playing On-Demand Media ...........................81
+ 13.4.5. Playing Dynamic On-Demand Media ...................81
+ 13.4.6. Playing Live Media ................................81
+ 13.4.7. Playing Live with Recording .......................82
+ 13.4.8. Playing Live with Time-Shift ......................83
+ 13.5. PLAY_NOTIFY ..............................................83
+ 13.5.1. End-of-Stream .....................................84
+ 13.5.2. Media-Properties-Update ...........................86
+ 13.5.3. Scale-Change ......................................87
+ 13.6. PAUSE ....................................................89
+ 13.7. TEARDOWN .................................................92
+ 13.7.1. Client to Server ..................................92
+ 13.7.2. Server to Client ..................................93
+ 13.8. GET_PARAMETER ............................................94
+ 13.9. SET_PARAMETER ............................................96
+ 13.10. REDIRECT ................................................98
+ 14. Embedded (Interleaved) Binary Data ...........................101
+ 15. Proxies ......................................................103
+ 15.1. Proxies and Protocol Extensions .........................104
+ 15.2. Multiplexing and Demultiplexing of Messages .............105
+ 16. Caching ......................................................106
+ 16.1. Validation Model ........................................107
+ 16.1.1. Last-Modified Dates ..............................108
+ 16.1.2. Message Body Tag Cache Validators ................108
+ 16.1.3. Weak and Strong Validators .......................108
+ 16.1.4. Rules for When to Use Message Body Tags
+ and Last-Modified Dates ..........................110
+ 16.1.5. Non-validating Conditionals ......................112
+ 16.2. Invalidation after Updates or Deletions .................112
+ 17. Status Code Definitions ......................................113
+ 17.1. Informational 1xx .......................................113
+ 17.1.1. 100 Continue .....................................113
+ 17.2. Success 2xx .............................................113
+ 17.2.1. 200 OK ...........................................113
+ 17.3. Redirection 3xx .........................................113
+ 17.3.1. 300 ..............................................114
+ 17.3.2. 301 Moved Permanently ............................114
+ 17.3.3. 302 Found ........................................114
+ 17.3.4. 303 See Other ....................................115
+ 17.3.5. 304 Not Modified .................................115
+ 17.3.6. 305 Use Proxy ....................................115
+ 17.4. Client Error 4xx ........................................116
+ 17.4.1. 400 Bad Request ..................................116
+ 17.4.2. 401 Unauthorized .................................116
+ 17.4.3. 402 Payment Required .............................116
+ 17.4.4. 403 Forbidden ....................................116
+ 17.4.5. 404 Not Found ....................................116
+
+
+
+Schulzrinne, et al. Standards Track [Page 4]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ 17.4.6. 405 Method Not Allowed ...........................117
+ 17.4.7. 406 Not Acceptable ...............................117
+ 17.4.8. 407 Proxy Authentication Required ................117
+ 17.4.9. 408 Request Timeout ..............................117
+ 17.4.10. 410 Gone ........................................118
+ 17.4.11. 412 Precondition Failed .........................118
+ 17.4.12. 413 Request Message Body Too Large ..............118
+ 17.4.13. 414 Request-URI Too Long ........................118
+ 17.4.14. 415 Unsupported Media Type ......................119
+ 17.4.15. 451 Parameter Not Understood ....................119
+ 17.4.16. 452 Illegal Conference Identifier ...............119
+ 17.4.17. 453 Not Enough Bandwidth ........................119
+ 17.4.18. 454 Session Not Found ...........................119
+ 17.4.19. 455 Method Not Valid in This State ..............119
+ 17.4.20. 456 Header Field Not Valid for Resource .........119
+ 17.4.21. 457 Invalid Range ...............................120
+ 17.4.22. 458 Parameter Is Read-Only ......................120
+ 17.4.23. 459 Aggregate Operation Not Allowed .............120
+ 17.4.24. 460 Only Aggregate Operation Allowed ............120
+ 17.4.25. 461 Unsupported Transport .......................120
+ 17.4.26. 462 Destination Unreachable .....................120
+ 17.4.27. 463 Destination Prohibited ......................120
+ 17.4.28. 464 Data Transport Not Ready Yet ................121
+ 17.4.29. 465 Notification Reason Unknown .................121
+ 17.4.30. 466 Key Management Error ........................121
+ 17.4.31. 470 Connection Authorization Required ...........121
+ 17.4.32. 471 Connection Credentials Not Accepted .........121
+ 17.4.33. 472 Failure to Establish Secure Connection ......121
+ 17.5. Server Error 5xx ........................................122
+ 17.5.1. 500 Internal Server Error ........................122
+ 17.5.2. 501 Not Implemented ..............................122
+ 17.5.3. 502 Bad Gateway ..................................122
+ 17.5.4. 503 Service Unavailable ..........................122
+ 17.5.5. 504 Gateway Timeout ..............................123
+ 17.5.6. 505 RTSP Version Not Supported ...................123
+ 17.5.7. 551 Option Not Supported .........................123
+ 17.5.8. 553 Proxy Unavailable ............................123
+ 18. Header Field Definitions .....................................124
+ 18.1. Accept ..................................................134
+ 18.2. Accept-Credentials ......................................135
+ 18.3. Accept-Encoding .........................................135
+ 18.4. Accept-Language .........................................136
+ 18.5. Accept-Ranges ...........................................137
+ 18.6. Allow ...................................................138
+ 18.7. Authentication-Info .....................................138
+ 18.8. Authorization ...........................................138
+ 18.9. Bandwidth ...............................................139
+ 18.10. Blocksize ..............................................140
+
+
+
+Schulzrinne, et al. Standards Track [Page 5]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ 18.11. Cache-Control ..........................................140
+ 18.12. Connection .............................................143
+ 18.13. Connection-Credentials .................................143
+ 18.14. Content-Base ...........................................144
+ 18.15. Content-Encoding .......................................145
+ 18.16. Content-Language .......................................145
+ 18.17. Content-Length .........................................146
+ 18.18. Content-Location .......................................146
+ 18.19. Content-Type ...........................................148
+ 18.20. CSeq ...................................................148
+ 18.21. Date ...................................................150
+ 18.22. Expires ................................................151
+ 18.23. From ...................................................151
+ 18.24. If-Match ...............................................152
+ 18.25. If-Modified-Since ......................................152
+ 18.26. If-None-Match ..........................................153
+ 18.27. Last-Modified ..........................................154
+ 18.28. Location ...............................................154
+ 18.29. Media-Properties .......................................154
+ 18.30. Media-Range ............................................156
+ 18.31. MTag ...................................................157
+ 18.32. Notify-Reason ..........................................158
+ 18.33. Pipelined-Requests .....................................158
+ 18.34. Proxy-Authenticate .....................................159
+ 18.35. Proxy-Authentication-Info ..............................159
+ 18.36. Proxy-Authorization ....................................159
+ 18.37. Proxy-Require ..........................................160
+ 18.38. Proxy-Supported ........................................160
+ 18.39. Public .................................................161
+ 18.40. Range ..................................................162
+ 18.41. Referrer ...............................................164
+ 18.42. Request-Status .........................................164
+ 18.43. Require ................................................165
+ 18.44. Retry-After ............................................166
+ 18.45. RTP-Info ...............................................167
+ 18.46. Scale ..................................................169
+ 18.47. Seek-Style .............................................170
+ 18.48. Server .................................................171
+ 18.49. Session ................................................172
+ 18.50. Speed ..................................................173
+ 18.51. Supported ..............................................174
+ 18.52. Terminate-Reason .......................................175
+ 18.53. Timestamp ..............................................175
+ 18.54. Transport ..............................................176
+ 18.55. Unsupported ............................................183
+ 18.56. User-Agent .............................................184
+ 18.57. Via ....................................................184
+ 18.58. WWW-Authenticate .......................................185
+
+
+
+Schulzrinne, et al. Standards Track [Page 6]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ 19. Security Framework ...........................................185
+ 19.1. RTSP and HTTP Authentication ............................185
+ 19.1.1. Digest Authentication ............................186
+ 19.2. RTSP over TLS ...........................................187
+ 19.3. Security and Proxies ....................................188
+ 19.3.1. Accept-Credentials ...............................189
+ 19.3.2. User-Approved TLS Procedure ......................190
+ 20. Syntax .......................................................192
+ 20.1. Base Syntax .............................................193
+ 20.2. RTSP Protocol Definition ................................195
+ 20.2.1. Generic Protocol Elements ........................195
+ 20.2.2. Message Syntax ...................................198
+ 20.2.3. Header Syntax ....................................201
+ 20.3. SDP Extension Syntax ....................................209
+ 21. Security Considerations ......................................209
+ 21.1. Signaling Protocol Threats ..............................210
+ 21.2. Media Stream Delivery Threats ...........................213
+ 21.2.1. Remote DoS Attack ................................215
+ 21.2.2. RTP Security Analysis ............................216
+ 22. IANA Considerations ..........................................217
+ 22.1. Feature Tags ............................................218
+ 22.1.1. Description ......................................218
+ 22.1.2. Registering New Feature Tags with IANA ...........218
+ 22.1.3. Registered Entries ...............................219
+ 22.2. RTSP Methods ............................................219
+ 22.2.1. Description ......................................219
+ 22.2.2. Registering New Methods with IANA ................219
+ 22.2.3. Registered Entries ...............................220
+ 22.3. RTSP Status Codes .......................................220
+ 22.3.1. Description ......................................220
+ 22.3.2. Registering New Status Codes with IANA ...........220
+ 22.3.3. Registered Entries ...............................221
+ 22.4. RTSP Headers ............................................221
+ 22.4.1. Description ......................................221
+ 22.4.2. Registering New Headers with IANA ................221
+ 22.4.3. Registered Entries ...............................222
+ 22.5. Accept-Credentials ......................................223
+ 22.5.1. Accept-Credentials Policies ......................223
+ 22.5.2. Accept-Credentials Hash Algorithms ...............224
+ 22.6. Cache-Control Cache Directive Extensions ................224
+ 22.7. Media Properties ........................................225
+ 22.7.1. Description ......................................225
+ 22.7.2. Registration Rules ...............................226
+ 22.7.3. Registered Values ................................226
+ 22.8. Notify-Reason Values ....................................226
+ 22.8.1. Description ......................................226
+ 22.8.2. Registration Rules ...............................226
+ 22.8.3. Registered Values ................................227
+
+
+
+Schulzrinne, et al. Standards Track [Page 7]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ 22.9. Range Header Formats ....................................227
+ 22.9.1. Description ......................................227
+ 22.9.2. Registration Rules ...............................227
+ 22.9.3. Registered Values ................................228
+ 22.10. Terminate-Reason Header ................................228
+ 22.10.1. Redirect Reasons ................................228
+ 22.10.2. Terminate-Reason Header Parameters ..............229
+ 22.11. RTP-Info Header Parameters .............................229
+ 22.11.1. Description .....................................229
+ 22.11.2. Registration Rules ..............................229
+ 22.11.3. Registered Values ...............................230
+ 22.12. Seek-Style Policies ....................................230
+ 22.12.1. Description .....................................230
+ 22.12.2. Registration Rules ..............................230
+ 22.12.3. Registered Values ...............................230
+ 22.13. Transport Header Registries ............................231
+ 22.13.1. Transport Protocol Identifier ...................231
+ 22.13.2. Transport Modes .................................233
+ 22.13.3. Transport Parameters ............................233
+ 22.14. URI Schemes ............................................234
+ 22.14.1. The "rtsp" URI Scheme ...........................234
+ 22.14.2. The "rtsps" URI Scheme ..........................235
+ 22.14.3. The "rtspu" URI Scheme ..........................237
+ 22.15. SDP Attributes .........................................238
+ 22.16. Media Type Registration for text/parameters ............238
+ 23. References ...................................................240
+ 23.1. Normative References ....................................240
+ 23.2. Informative References ..................................245
+ Appendix A. Examples .............................................248
+ A.1. Media on Demand (Unicast) ................................248
+ A.2. Media on Demand Using Pipelining .........................251
+ A.3. Secured Media Session for On-Demand Content ..............254
+ A.4. Media on Demand (Unicast) ................................257
+ A.5. Single-Stream Container Files ............................260
+ A.6. Live Media Presentation Using Multicast ..................263
+ A.7. Capability Negotiation ...................................264
+ Appendix B. RTSP Protocol State Machine ..........................265
+ B.1. States ...................................................266
+ B.2. State Variables ..........................................266
+ B.3. Abbreviations ............................................266
+ B.4. State Tables .............................................267
+ Appendix C. Media-Transport Alternatives .........................272
+ C.1. RTP ......................................................272
+ C.1.1. AVP ..................................................272
+ C.1.2. AVP/UDP ..............................................273
+ C.1.3. AVPF/UDP .............................................274
+ C.1.4. SAVP/UDP .............................................275
+ C.1.5. SAVPF/UDP ............................................277
+
+
+
+Schulzrinne, et al. Standards Track [Page 8]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ C.1.6. RTCP Usage with RTSP .................................278
+ C.2. RTP over TCP .............................................279
+ C.2.1. Interleaved RTP over TCP .............................280
+ C.2.2. RTP over Independent TCP .............................280
+ C.3. Handling Media-Clock Time Jumps in the RTP Media Layer ...284
+ C.4. Handling RTP Timestamps after PAUSE ......................287
+ C.5. RTSP/RTP Integration ....................................290
+ C.6. Scaling with RTP .........................................290
+ C.7. Maintaining NPT Synchronization with RTP Timestamps ......290
+ C.8. Continuous Audio .........................................290
+ C.9. Multiple Sources in an RTP Session .......................290
+ C.10. Usage of SSRCs and the RTCP BYE Message during an RTSP
+ Session .................................................290
+ C.11. Future Additions ........................................291
+ Appendix D. Use of SDP for RTSP Session Descriptions .............292
+ D.1. Definitions .............................................292
+ D.1.1. Control URI ..........................................292
+ D.1.2. Media Streams ........................................294
+ D.1.3. Payload Type(s) ......................................294
+ D.1.4. Format-Specific Parameters ...........................294
+ D.1.5. Directionality of Media Stream .......................295
+ D.1.6. Range of Presentation ................................295
+ D.1.7. Time of Availability .................................296
+ D.1.8. Connection Information ...............................297
+ D.1.9. Message Body Tag .....................................297
+ D.2. Aggregate Control Not Available ..........................298
+ D.3. Aggregate Control Available ..............................298
+ D.4. Grouping of Media Lines in SDP ...........................299
+ D.5. RTSP External SDP Delivery ...............................300
+ Appendix E. RTSP Use Cases .......................................300
+ E.1. On-Demand Playback of Stored Content .....................300
+ E.2. Unicast Distribution of Live Content .....................302
+ E.3. On-Demand Playback Using Multicast .......................303
+ E.4. Inviting an RTSP Server into a Conference ................303
+ E.5. Live Content Using Multicast .............................304
+ Appendix F. Text Format for Parameters ...........................305
+ Appendix G. Requirements for Unreliable Transport of RTSP ........305
+ Appendix H. Backwards-Compatibility Considerations ...............306
+ H.1. Play Request in Play State ...............................307
+ H.2. Using Persistent Connections .............................307
+ Appendix I. Changes ..............................................307
+ I.1. Brief Overview ...........................................308
+ I.2. Detailed List of Changes .................................309
+ Acknowledgements .................................................316
+ Contributors ....................................................317
+ Authors' Addresses ...............................................318
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 9]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+1. Introduction
+
+ This memo defines version 2.0 of the Real-Time Streaming Protocol
+ (RTSP 2.0). RTSP 2.0 is an application-layer protocol for the setup
+ and control over the delivery of data with real-time properties,
+ typically streaming media. Streaming media is, for instance, video
+ on demand or audio live streaming. Put simply, RTSP acts as a
+ "network remote control" for multimedia servers.
+
+ The protocol operates between RTSP 2.0 clients and servers, but it
+ also supports the use of proxies placed between clients and servers.
+ Clients can request information about streaming media from servers by
+ asking for a description of the media or use media description
+ provided externally. The media delivery protocol is used to
+ establish the media streams described by the media description.
+ Clients can then request to play out the media, pause it, or stop it
+ completely. The requested media can consist of multiple audio and
+ video streams that are delivered as time-synchronized streams from
+ servers to clients.
+
+ RTSP 2.0 is a replacement of RTSP 1.0 [RFC2326] and this document
+ obsoletes that specification. This protocol is based on RTSP 1.0 but
+ is not backwards compatible other than in the basic version
+ negotiation mechanism. The changes between the two documents are
+ listed in Appendix I. There are many reasons why RTSP 2.0 can't be
+ backwards compatible with RTSP 1.0; some of the main ones are as
+ follows:
+
+ o Most headers that needed to be extensible did not define the
+ allowed syntax, preventing safe deployment of extensions;
+
+ o the changed behavior of the PLAY method when received in Play
+ state;
+
+ o the changed behavior of the extensibility model and its mechanism;
+ and
+
+ o the change of syntax for some headers.
+
+ There are so many small updates that changing versions became
+ necessary to enable clarification and consistent behavior. Anyone
+ implementing RTSP for a new use case in which they have not installed
+ RTSP 1.0 should only implement RTSP 2.0 to avoid having to deal with
+ RTSP 1.0 inconsistencies.
+
+ This document is structured as follows. It begins with an overview
+ of the protocol operations and its functions in an informal way.
+ Then, a set of definitions of terms used and document conventions is
+
+
+
+Schulzrinne, et al. Standards Track [Page 10]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ introduced. These are followed by the actual RTSP 2.0 core protocol
+ specification. The appendices describe and define some
+ functionalities that are not part of the core RTSP specification, but
+ which are still important to enable some usages. Among them, the RTP
+ usage is defined in Appendix C, the Session Description Protocol
+ (SDP) usage with RTSP is defined in Appendix D, and the "text/
+ parameters" file format Appendix F, are three normative specification
+ appendices. Other appendices include a number of informational parts
+ discussing the changes, use cases, different considerations or
+ motivations.
+
+2. Protocol Overview
+
+ This section provides an informative overview of the different
+ mechanisms in the RTSP 2.0 protocol to give the reader a high-level
+ understanding before getting into all the specific details. In case
+ of conflict with this description and the later sections, the later
+ sections take precedence. For more information about use cases
+ considered for RTSP, see Appendix E.
+
+ RTSP 2.0 is a bidirectional request and response protocol that first
+ establishes a context including content resources (the media) and
+ then controls the delivery of these content resources from the
+ provider to the consumer. RTSP has three fundamental parts: Session
+ Establishment, Media Delivery Control, and an extensibility model
+ described below. The protocol is based on some assumptions about
+ existing functionality to provide a complete solution for client-
+ controlled real-time media delivery.
+
+ RTSP uses text-based messages, requests and responses, that may
+ contain a binary message body. An RTSP request starts with a method
+ line that identifies the method, the protocol, and version and the
+ resource on which to act. The resource is identified by a URI and
+ the hostname part of the URI is used by RTSP client to resolve the
+ IPv4 or IPv6 address of the RTSP server. Following the method line
+ are a number of RTSP headers. These lines are ended by two
+ consecutive carriage return line feed (CRLF) character pairs. The
+ message body, if present, follows the two CRLF character pairs, and
+ the body's length is described by a message header. RTSP responses
+ are similar, but they start with a response line with the protocol
+ and version followed by a status code and a reason phrase. RTSP
+ messages are sent over a reliable transport protocol between the
+ client and server. RTSP 2.0 requires clients and servers to
+ implement TCP and TLS over TCP as mandatory transports for RTSP
+ messages.
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 11]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+2.1. Presentation Description
+
+ RTSP exists to provide access to multimedia presentations and content
+ but tries to be agnostic about the media type or the actual media
+ delivery protocol that is used. To enable a client to implement a
+ complete system, an RTSP-external mechanism for describing the
+ presentation and the delivery protocol(s) is used. RTSP assumes that
+ this description is either delivered completely out of band or as a
+ data object in the response to a client's request using the DESCRIBE
+ method (Section 13.2).
+
+ Parameters that commonly have to be included in the presentation
+ description are the following:
+
+ o The number of media streams;
+
+ o the resource identifier for each media stream/resource that is to
+ be controlled by RTSP;
+
+ o the protocol that will be used to deliver each media stream;
+
+ o the transport protocol parameters that are not negotiated or vary
+ with each client;
+
+ o the media-encoding information enabling a client to correctly
+ decode the media upon reception; and
+
+ o an aggregate control resource identifier.
+
+ RTSP uses its own URI schemes ("rtsp" and "rtsps") to reference media
+ resources and aggregates under common control (see Section 4.2).
+
+ This specification describes in Appendix D how one uses SDP [RFC4566]
+ for describing the presentation.
+
+2.2. Session Establishment
+
+ The RTSP client can request the establishment of an RTSP session
+ after having used the presentation description to determine which
+ media streams are available, which media delivery protocol is used,
+ and the resource identifiers of the media streams. The RTSP session
+ is a common context between the client and the server that consists
+ of one or more media resources that are to be under common media
+ delivery control.
+
+ The client creates an RTSP session by sending a request using the
+ SETUP method (Section 13.3) to the server. In the Transport header
+ (Section 18.54) of the SETUP request, the client also includes all
+
+
+
+Schulzrinne, et al. Standards Track [Page 12]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ the transport parameters necessary to enable the media delivery
+ protocol to function. This includes parameters that are
+ preestablished by the presentation description but necessary for any
+ middlebox to correctly handle the media delivery protocols. The
+ Transport header in a request may contain multiple alternatives for
+ media delivery in a prioritized list, which the server can select
+ from. These alternatives are typically based on information in the
+ presentation description.
+
+ When receiving a SETUP request, the server determines if the media
+ resource is available and if one or more of the of the transport
+ parameter specifications are acceptable. If that is successful, an
+ RTSP session context is created and the relevant parameters and state
+ is stored. An identifier is created for the RTSP session and
+ included in the response in the Session header (Section 18.49). The
+ SETUP response includes a Transport header that specifies which of
+ the alternatives has been selected and relevant parameters.
+
+ A SETUP request that references an existing RTSP session but
+ identifies a new media resource is a request to add that media
+ resource under common control with the already-present media
+ resources in an aggregated session. A client can expect this to work
+ for all media resources under RTSP control within a multimedia
+ content container. However, a server will likely refuse to aggregate
+ resources from different content containers. Even if an RTSP session
+ contains only a single media stream, the RTSP session can be
+ referenced by the aggregate control URI.
+
+ To avoid an extra round trip in the session establishment of
+ aggregated RTSP sessions, RTSP 2.0 supports pipelined requests; i.e.,
+ the client can send multiple requests back-to-back without waiting
+ first for the completion of any of them. The client uses a client-
+ selected identifier in the Pipelined-Requests header (Section 18.33)
+ to instruct the server to bind multiple requests together as if they
+ included the session identifier.
+
+ The SETUP response also provides additional information about the
+ established sessions in a couple of different headers. The Media-
+ Properties header (Section 18.29) includes a number of properties
+ that apply for the aggregate that is valuable when doing media
+ delivery control and configuring user interface. The Accept-Ranges
+ header (Section 18.5) informs the client about range formats that the
+ server supports for these media resources. The Media-Range header
+ (Section 18.30) informs the client about the time range of the media
+ currently available.
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 13]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+2.3. Media Delivery Control
+
+ After having established an RTSP session, the client can start
+ controlling the media delivery. The basic operations are "begin
+ playback", using the PLAY method (Section 13.4) and "suspend (pause)
+ playback" by using the PAUSE method (Section 13.6). PLAY also allows
+ for choosing the starting media position from which the server should
+ deliver the media. The positioning is done by using the Range header
+ (Section 18.40) that supports several different time formats: Normal
+ Play Time (NPT) (Section 4.4.2), Society of Motion Picture and
+ Television Engineers (SMPTE) Timestamps (Section 4.4.1), and absolute
+ time (Section 4.4.3). The Range header also allows the client to
+ specify a position where delivery should end, thus allowing a
+ specific interval to be delivered.
+
+ The support for positioning/searching within media content depends on
+ the content's media properties. Content exists in a number of
+ different types, such as on-demand, live, and live with simultaneous
+ recording. Even within these categories, there are differences in
+ how the content is generated and distributed, which affect how it can
+ be accessed for playback. The properties applicable for the RTSP
+ session are provided by the server in the SETUP response using the
+ Media-Properties header (Section 18.29). These are expressed using
+ one or several independent attributes. A first attribute is Random-
+ Access, which indicates whether positioning is possible, and with
+ what granularity. Another aspect is whether the content will change
+ during the lifetime of the session. While on-demand content will be
+ provided in full from the beginning, a live stream being recorded
+ results in the length of the accessible content growing as the
+ session goes on. There also exists content that is dynamically built
+ by a protocol other than RTSP and, thus, also changes in steps during
+ the session, but maybe not continuously. Furthermore, when content
+ is recorded, there are cases where the complete content is not
+ maintained, but, for example, only the last hour. All of these
+ properties result in the need for mechanisms that will be discussed
+ below.
+
+ When the client accesses on-demand content that allows random access,
+ the client can issue the PLAY request for any point in the content
+ between the start and the end. The server will deliver media from
+ the closest random access point prior to the requested point and
+ indicate that in its PLAY response. If the client issues a PAUSE,
+ the delivery will be halted and the point at which the server stopped
+ will be reported back in the response. The client can later resume
+ by sending a PLAY request without a Range header. When the server is
+ about to complete the PLAY request by delivering the end of the
+ content or the requested range, the server will send a PLAY_NOTIFY
+ request (Section 13.5) indicating this.
+
+
+
+Schulzrinne, et al. Standards Track [Page 14]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ When playing live content with no extra functions, such as recording,
+ the client will receive the live media from the server after having
+ sent a PLAY request. Seeking in such content is not possible as the
+ server does not store it, but only forwards it from the source of the
+ session. Thus, delivery continues until the client sends a PAUSE
+ request, tears down the session, or the content ends.
+
+ For live sessions that are being recorded, the client will need to
+ keep track of how the recording progresses. Upon session
+ establishment, the client will learn the current duration of the
+ recording from the Media-Range header. Because the recording is
+ ongoing, the content grows in direct relation to the time passed.
+ Therefore, each server's response to a PLAY request will contain the
+ current Media-Range header. The server should also regularly send
+ (approximately every 5 minutes) the current media range in a
+ PLAY_NOTIFY request (Section 13.5.2). If the live transmission ends,
+ the server must send a PLAY_NOTIFY request with the updated Media-
+ Properties indicating that the content stopped being a recorded live
+ session and instead became on-demand content; the request also
+ contains the final media range. While the live delivery continues,
+ the client can request to play the current live point by using the
+ NPT timescale symbol "now", or it can request a specific point in the
+ available content by an explicit range request for that point. If
+ the requested point is outside of the available interval, the server
+ will adjust the position to the closest available point, i.e., either
+ at the beginning or the end.
+
+ A special case of recording is that where the recording is not
+ retained longer than a specific time period; thus, as the live
+ delivery continues, the client can access any media within a moving
+ window that covers, for example, "now" to "now" minus 1 hour. A
+ client that pauses on a specific point within the content may not be
+ able to retrieve the content anymore. If the client waits too long
+ before resuming the pause point, the content may no longer be
+ available. In this case, the pause point will be adjusted to the
+ closest point in the available media.
+
+2.4. Session Parameter Manipulations
+
+ A session may have additional state or functionality that affects how
+ the server or client treats the session or content, how it functions,
+ or feedback on how well the session works. Such extensions are not
+ defined in this specification, but they may be covered in various
+ extensions. RTSP has two methods for retrieving and setting
+ parameter values on either the client or the server: GET_PARAMETER
+ (Section 13.8) and SET_PARAMETER (Section 13.9). These methods carry
+ the parameters in a message body of the appropriate format. One can
+ also use headers to query state with the GET_PARAMETER method. As an
+
+
+
+Schulzrinne, et al. Standards Track [Page 15]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ example, clients needing to know the current media range for a time-
+ progressing session can use the GET_PARAMETER method and include the
+ media range. Furthermore, synchronization information can be
+ requested by using a combination of RTP-Info (Section 18.45) and
+ Range (Section 18.40).
+
+ RTSP 2.0 does not have a strong mechanism for negotiating the headers
+ or parameters and their formats. However, responses will indicate
+ request-headers or parameters that are not supported. A priori
+ determination of what features are available needs to be done through
+ out-of-band mechanisms, like the session description, or through the
+ usage of feature tags (Section 4.5).
+
+2.5. Media Delivery
+
+ This document specifies how media is delivered with RTP [RFC3550]
+ over UDP [RFC768], TCP [RFC793], or the RTSP connection. Additional
+ protocols may be specified in the future as needed.
+
+ The usage of RTP as a media delivery protocol requires some
+ additional information to function well. The PLAY response contains
+ information to enable reliable and timely delivery of how a client
+ should synchronize different sources in the different RTP sessions.
+ It also provides a mapping between RTP timestamps and the content-
+ time scale. When the server wants to notify the client about the
+ completion of the media delivery, it sends a PLAY_NOTIFY request to
+ the client. The PLAY_NOTIFY request includes information about the
+ stream end, including the last RTP sequence number for each stream,
+ thus enabling the client to empty the buffer smoothly.
+
+2.5.1. Media Delivery Manipulations
+
+ The basic playback functionality of RTSP enables delivery of a range
+ of requested content to the client at the pace intended by the
+ content's creator. However, RTSP can also manipulate the delivery to
+ the client in two ways.
+
+ Scale: The ratio of media-content time delivered per unit of
+ playback time.
+
+ Speed: The ratio of playback time delivered per unit of wallclock
+ time.
+
+ Both affect the media delivery per time unit. However, they
+ manipulate two independent timescales and the effects are possible to
+ combine.
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 16]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Scale (Section 18.46) is used for fast-forward or slow-motion control
+ as it changes the amount of content timescale that should be played
+ back per time unit. Scale > 1.0, means fast forward, e.g., scale =
+ 2.0 results in that 2 seconds of content being played back every
+ second of playback. Scale = 1.0 is the default value that is used if
+ no scale is specified, i.e., playback at the content's original rate.
+ Scale values between 0 and 1.0 provide for slow motion. Scale can be
+ negative to allow for reverse playback in either regular pace
+ (scale = -1.0), fast backwards (scale < -1.0), or slow-motion
+ backwards (-1.0 < scale < 0). Scale = 0 would be equal to pause and
+ is not allowed.
+
+ In most cases, the realization of scale means server-side
+ manipulation of the media to ensure that the client can actually play
+ it back. The nature of these media manipulations and when they are
+ needed is highly media-type dependent. Let's consider two common
+ media types, audio and video.
+
+ It is very difficult to modify the playback rate of audio.
+ Typically, no more than a factor of two is possible while maintaining
+ intelligibility by changing the pitch and rate of speech. Music goes
+ out of tune if one tries to manipulate the playback rate by
+ resampling it. This is a well-known problem, and audio is commonly
+ muted or played back in short segments with skips to keep up with the
+ current playback point.
+
+ For video, it is possible to manipulate the frame rate, although the
+ rendering capabilities are often limited to certain frame rates.
+ Also, the allowed bitrates in decoding, the structure used in the
+ encoding, and the dependency between frames and other capabilities of
+ the rendering device limits the possible manipulations. Therefore,
+ the basic fast-forward capabilities often are implemented by
+ selecting certain subsets of frames.
+
+ Due to the media restrictions, the possible scale values are commonly
+ restricted to the set of realizable scale ratios. To enable the
+ clients to select from the possible scale values, RTSP can signal the
+ supported scale ratios for the content. To support aggregated or
+ dynamic content, where this may change during the ongoing session and
+ dependent on the location within the content, a mechanism for
+ updating the media properties and the scale factor currently in use,
+ exists.
+
+ Speed (Section 18.50) affects how much of the playback timeline is
+ delivered in a given wallclock period. The default is Speed = 1
+ which means to deliver at the same rate the media is consumed.
+ Speed > 1 means that the receiver will get content faster than it
+ regularly would consume it. Speed < 1 means that delivery is slower
+
+
+
+Schulzrinne, et al. Standards Track [Page 17]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ than the regular media rate. Speed values of 0 or lower have no
+ meaning and are not allowed. This mechanism enables two general
+ functionalities. One is client-side scale operations, i.e., the
+ client receives all the frames and makes the adjustment to the
+ playback locally. The second is delivery control for the buffering
+ of media. By specifying a speed over 1.0, the client can build up
+ the amount of playback time it has present in its buffers to a level
+ that is sufficient for its needs.
+
+ A naive implementation of Speed would only affect the transmission
+ schedule of the media and has a clear impact on the needed bandwidth.
+ This would result in the data rate being proportional to the speed
+ factor. Speed = 1.5, i.e., 50% faster than normal delivery, would
+ result in a 50% increase in the data-transport rate. Whether or not
+ that can be supported depends solely on the underlying network path.
+ Scale may also have some impact on the required bandwidth due to the
+ manipulation of the content in the new playback schedule. An example
+ is fast forward where only the independently decodable intra-frames
+ are included in the media stream. This usage of solely intra-frames
+ increases the data rate significantly compared to a normal sequence
+ with the same number of frames, where most frames are encoded using
+ prediction.
+
+ This potential increase of the data rate needs to be handled by the
+ media sender. The client has requested that the media be delivered
+ in a specific way, which should be honored. However, the media
+ sender cannot ignore if the network path between the sender and the
+ receiver can't handle the resulting media stream. In that case, the
+ media stream needs to be adapted to fit the available resources of
+ the path. This can result in a reduced media quality.
+
+ The need for bitrate adaptation becomes especially problematic in
+ connection with the Speed semantics. If the goal is to fill up the
+ buffer, the client may not want to do that at the cost of reduced
+ quality. If the client wants to make local playout changes, then it
+ may actually require that the requested speed be honored. To resolve
+ this issue, Speed uses a range so that both cases can be supported.
+ The server is requested to use the highest possible speed value
+ within the range, which is compatible with the available bandwidth.
+ As long as the server can maintain a speed value within the range, it
+ shall not change the media quality, but instead modify the actual
+ delivery rate in response to available bandwidth and reflect this in
+ the Speed value in the response. However, if this is not possible,
+ the server should instead modify the media quality to respect the
+ lowest speed value and the available bandwidth.
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 18]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ This functionality enables the local scaling implementation to use a
+ tight range, or even a range where the lower bound equals the upper
+ bound, to identify that it requires the server to deliver the
+ requested amount of media time per delivery time, independent of how
+ much it needs to adapt the media quality to fit within the available
+ path bandwidth. For buffer filling, it is suitable to use a range
+ with a reasonable span and with a lower bound at the nominal media
+ rate 1.0, such as 1.0 - 2.5. If the client wants to reduce the
+ buffer, it can specify an upper bound that is below 1.0 to force the
+ server to deliver slower than the nominal media rate.
+
+2.6. Session Maintenance and Termination
+
+ The session context that has been established is kept alive by having
+ the client show liveness. This is done in two main ways:
+
+ o Media-transport protocol keep-alive. RTP Control Protocol (RTCP)
+ may be used when using RTP.
+
+ o Any RTSP request referencing the session context.
+
+ Section 10.5 discusses the methods for showing liveness in more
+ depth. If the client fails to show liveness for more than the
+ established session timeout value (normally 60 seconds), the server
+ may terminate the context. Other values may be selected by the
+ server through the inclusion of the timeout parameter in the session
+ header.
+
+ The session context is normally terminated by the client sending a
+ TEARDOWN request (Section 13.7) to the server referencing the
+ aggregated control URI. An individual media resource can be removed
+ from a session context by a TEARDOWN request referencing that
+ particular media resource. If all media resources are removed from a
+ session context, the session context is terminated.
+
+ A client may keep the session alive indefinitely if allowed by the
+ server; however, a client is advised to release the session context
+ when an extended period of time without media delivery activity has
+ passed. The client can re-establish the session context if required
+ later. What constitutes an extended period of time is dependent on
+ the client, server, and their usage. It is recommended that the
+ client terminate the session before ten times the session timeout
+ value has passed. A server may terminate the session after one
+ session timeout period without any client activity beyond keep-alive.
+ When a server terminates the session context, it does so by sending a
+ TEARDOWN request indicating the reason.
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 19]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ A server can also request that the client tear down the session and
+ re-establish it at an alternative server, as may be needed for
+ maintenance. This is done by using the REDIRECT method
+ (Section 13.10). The Terminate-Reason header (Section 18.52) is used
+ to indicate when and why. The Location header indicates where it
+ should connect if there is an alternative server available. When the
+ deadline expires, the server simply stops providing the service. To
+ achieve a clean closure, the client needs to initiate session
+ termination prior to the deadline. In case the server has no other
+ server to redirect to, and it wants to close the session for
+ maintenance, it shall use the TEARDOWN method with a Terminate-Reason
+ header.
+
+2.7. Extending RTSP
+
+ RTSP is quite a versatile protocol that supports extensions in many
+ different directions. Even this core specification contains several
+ blocks of functionality that are optional to implement. The use case
+ and need for the protocol deployment should determine what parts are
+ implemented. Allowing for extensions makes it possible for RTSP to
+ address additional use cases. However, extensions will affect the
+ interoperability of the protocol; therefore, it is important that
+ they can be added in a structured way.
+
+ The client can learn the capability of a server by using the OPTIONS
+ method (Section 13.1) and the Supported header (Section 18.51). It
+ can also try and possibly fail using new methods or require that
+ particular features be supported using the Require (Section 18.43) or
+ Proxy-Require (Section 18.37) header.
+
+ The RTSP, in itself, can be extended in three ways, listed here in
+ increasing order of the magnitude of changes supported:
+
+ o Existing methods can be extended with new parameters, for example,
+ headers, as long as these parameters can be safely ignored by the
+ recipient. If the client needs negative acknowledgment when a
+ method extension is not supported, a tag corresponding to the
+ extension may be added in the field of the Require or Proxy-
+ Require headers.
+
+ o New methods can be added. If the recipient of the message does
+ not understand the request, it must respond with error code 501
+ (Not Implemented) so that the sender can avoid using this method
+ again. A client may also use the OPTIONS method to inquire about
+ methods supported by the server. The server must list the methods
+ it supports using the Public response-header.
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 20]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ o A new version of the protocol can be defined, allowing almost all
+ aspects (except the position of the protocol version number) to
+ change. A new version of the protocol must be registered through
+ a Standards Track document.
+
+ The basic capability discovery mechanism can be used to both discover
+ support for a certain feature and to ensure that a feature is
+ available when performing a request. For a detailed explanation of
+ this, see Section 11.
+
+ New media delivery protocols may be added and negotiated at session
+ establishment, in addition to extensions to the core protocol.
+ Certain types of protocol manipulations can be done through parameter
+ formats using SET_PARAMETER and GET_PARAMETER.
+
+3. Document Conventions
+
+3.1. Notational Conventions
+
+ All the mechanisms specified in this document are described in both
+ prose and the Augmented Backus-Naur form (ABNF) described in detail
+ in [RFC5234].
+
+ Indented paragraphs are used to provide informative background and
+ motivation. This is intended to give readers who were not involved
+ with the formulation of the specification an understanding of why
+ things are the way they are in RTSP.
+
+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+ "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
+ "OPTIONAL" in this document are to be interpreted as described in
+ [RFC2119].
+
+ The word, "unspecified" is used to indicate functionality or features
+ that are not defined in this specification. Such functionality
+ cannot be used in a standardized manner without further definition in
+ an extension specification to RTSP.
+
+3.2. Terminology
+
+ Aggregate control: The concept of controlling multiple streams using
+ a single timeline, generally one maintained by the server. A
+ client, for example, uses aggregate control when it issues a
+ single play or pause message to simultaneously control both the
+ audio and video in a movie. A session that is under aggregate
+ control is referred to as an "aggregated session".
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 21]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Aggregate control URI: The URI used in an RTSP request to refer to
+ and control an aggregated session. It normally, but not always,
+ corresponds to the presentation URI specified in the session
+ description. See Section 13.3 for more information.
+
+ Client: The client is the requester of media service from the media
+ server.
+
+ Connection: A transport-layer virtual circuit established between
+ two programs for the purpose of communication.
+
+ Container file: A file that may contain multiple media streams that
+ often constitute a presentation when played together. The concept
+ of a container file is not embedded in the protocol. However,
+ RTSP servers may offer aggregate control on the media streams
+ within these files.
+
+ Continuous media: Data where there is a timing relationship between
+ source and sink; that is, the sink needs to reproduce the timing
+ relationship that existed at the source. The most common examples
+ of continuous media are audio and motion video. Continuous media
+ can be real time (interactive or conversational), where there is a
+ "tight" timing relationship between source and sink or it can be
+ streaming where the relationship is less strict.
+
+ Feature tag: A tag representing a certain set of functionality,
+ i.e., a feature.
+
+ IRI: An Internationalized Resource Identifier is similar to a URI
+ but allows characters from the whole Universal Character Set
+ (Unicode/ISO 10646), rather than the US-ASCII only. See [RFC3987]
+ for more information.
+
+ Live: A live presentation or session originates media from an event
+ taking place at the same time as the media delivery. Live
+ sessions often have an unbound or only loosely defined duration
+ and seek operations may not be possible.
+
+ Media initialization: The datatype- or codec-specific
+ initialization. This includes such things as clock rates, color
+ tables, etc. Any transport-independent information that is
+ required by a client for playback of a media stream occurs in the
+ media initialization phase of stream setup.
+
+ Media parameter: A parameter specific to a media type that may be
+ changed before or during stream delivery.
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 22]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Media server: The server providing media-delivery services for one
+ or more media streams. Different media streams within a
+ presentation may originate from different media servers. A media
+ server may reside on the same host or on a different host from
+ which the presentation is invoked.
+
+ (Media) Stream: A single media instance, e.g., an audio stream or a
+ video stream as well as a single whiteboard or shared application
+ group. When using RTP, a stream consists of all RTP and RTCP
+ packets created by a media source within an RTP session.
+
+ Message: The basic unit of RTSP communication, consisting of a
+ structured sequence of octets matching the syntax defined in
+ Section 20 and transmitted over a transport between RTSP agents.
+ A message is either a request or a response.
+
+ Message body: The information transferred as the payload of a
+ message (request or response). A message body consists of meta-
+ information in the form of message body headers and content in the
+ form of an arbitrary number of data octets, as described in
+ Section 9.
+
+ Non-aggregated control: Control of a single media stream.
+
+ Presentation: A set of one or more streams presented to the client
+ as a complete media feed and described by a presentation
+ description as defined below. Presentations with more than one
+ media stream are often handled in RTSP under aggregate control.
+
+ Presentation description: A presentation description contains
+ information about one or more media streams within a presentation,
+ such as the set of encodings, network addresses, and information
+ about the content. Other IETF protocols, such as SDP ([RFC4566]),
+ use the term "session" for a presentation. The presentation
+ description may take several different formats, including but not
+ limited to SDP format.
+
+ Response: An RTSP response to a request. One type of RTSP message.
+ If an HTTP response is meant, it is indicated explicitly.
+
+ Request: An RTSP request. One type of RTSP message. If an HTTP
+ request is meant, it is indicated explicitly.
+
+ Request-URI: The URI used in a request to indicate the resource on
+ which the request is to be performed.
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 23]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ RTSP agent: Either an RTSP client, an RTSP server, or an RTSP proxy.
+ In this specification, there are many capabilities that are common
+ to these three entities such as the capability to send requests or
+ receive responses. This term will be used when describing
+ functionality that is applicable to all three of these entities.
+
+ RTSP session: A stateful abstraction upon which the main control
+ methods of RTSP operate. An RTSP session is a common context; it
+ is created and maintained on a client's request and can be
+ destroyed by either the client or server. It is established by an
+ RTSP server upon the completion of a successful SETUP request
+ (when a 200 OK response is sent) and is labeled with a session
+ identifier at that time. The session exists until timed out by
+ the server or explicitly removed by a TEARDOWN request. An RTSP
+ session is a stateful entity; an RTSP server maintains an explicit
+ session state machine (see Appendix B) where most state
+ transitions are triggered by client requests. The existence of a
+ session implies the existence of state about the session's media
+ streams and their respective transport mechanisms. A given
+ session can have one or more media streams associated with it. An
+ RTSP server uses the session to aggregate control over multiple
+ media streams.
+
+ Origin server: The server on which a given resource resides.
+
+ Seeking: Requesting playback from a particular point in the content
+ time line.
+
+ Transport initialization: The negotiation of transport information
+ (e.g., port numbers, transport protocols) between the client and
+ the server.
+
+ URI: A Universal Resource Identifier; see [RFC3986]. The URIs used
+ in RTSP are generally URLs as they give a location for the
+ resource. As URLs are a subset of URIs, they will be referred to
+ as URIs to cover also the cases when an RTSP URI would not be a
+ URL.
+
+ URL: A Universal Resource Locator is a URI that identifies the
+ resource through its primary access mechanism rather than
+ identifying the resource by name or by some other attribute(s) of
+ that resource.
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 24]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+4. Protocol Parameters
+
+4.1. RTSP Version
+
+ This specification defines version 2.0 of RTSP.
+
+ RTSP uses a "<major>.<minor>" numbering scheme to indicate versions
+ of the protocol. The protocol versioning policy is intended to allow
+ the sender to indicate the format of a message and its capacity for
+ understanding further RTSP communication rather than the features
+ obtained via that communication. No change is made to the version
+ number for the addition of message components that do not affect
+ communication behavior or that only add to extensible field values.
+
+ The <minor> number is incremented when the changes made to the
+ protocol add features that do not change the general message parsing
+ algorithm but that may add to the message semantics and imply
+ additional capabilities of the sender. The <major> number is
+ incremented when the format of a message within the protocol is
+ changed. The version of an RTSP message is indicated by an RTSP-
+ Version field in the first line of the message. Note that the major
+ and minor numbers MUST be treated as separate integers and that each
+ MAY be incremented higher than a single digit. Thus, RTSP/2.4 is a
+ lower version than RTSP/2.13, which, in turn, is lower than
+ RTSP/12.3. Leading zeros SHALL NOT be sent and MUST be ignored by
+ recipients.
+
+4.2. RTSP IRI and URI
+
+ RTSP 2.0 defines and registers or updates three URI schemes "rtsp",
+ "rtsps", and "rtspu". The usage of the last, "rtspu", is unspecified
+ in RTSP 2.0 and is defined here to register the URI scheme that was
+ defined in RTSP 1.0. The "rtspu" scheme indicates unspecified
+ transport of the RTSP messages over unreliable transport means (UDP
+ in RTSP 1.0). An RTSP server MUST respond with an error code
+ indicating the "rtspu" scheme is not implemented (501) to a request
+ that carries a "rtspu" URI scheme.
+
+ The details of the syntax of "rtsp" and "rtsps" URIs have been
+ changed from RTSP 1.0. These changes include the addition of:
+
+ o Support for an IPv6 literal in the host part and future IP
+ literals through a mechanism defined in [RFC3986].
+
+ o A new relative format to use in the RTSP elements that is not
+ required to start with "/".
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 25]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Neither should have any significant impact on interoperability. If
+ IPv6 literals are needed in the RTSP URI, then that RTSP server must
+ be IPv6 capable, and RTSP 1.0 is not a fully IPv6 capable protocol.
+ If an RTSP 1.0 client attempts to process the URI, the URI will not
+ match the allowed syntax, it will be considered invalid, and
+ processing will be stopped. This is clearly a failure to reach the
+ resource; however, it is not a signification issue as RTSP 2.0
+ support was needed anyway in both server and client. Thus, failure
+ will only occur in a later step when there is an RTSP version
+ mismatch between client and server. The second change will only
+ occur inside RTSP message headers, as the Request-URI must be an
+ absolute URI. Thus, such usages will only occur after an agent has
+ accepted and started processing RTSP 2.0 messages, and an agent using
+ RTSP 1.0 only will not be required to parse such types of relative
+ URIs.
+
+ This specification also defines the format of RTSP IRIs [RFC3987]
+ that can be used as RTSP resource identifiers and locators on web
+ pages, user interfaces, on paper, etc. However, the RTSP request
+ message format only allows usage of the absolute URI format. The
+ RTSP IRI format MUST use the rules and transformation for IRIs to
+ URIs, as defined in [RFC3987]. This allows a URI that matches the
+ RTSP 2.0 specification, and so is suitable for use in a request, to
+ be created from an RTSP IRI.
+
+ The RTSP IRI and URI are both syntax restricted compared to the
+ generic syntax defined in [RFC3986] and [RFC3987]:
+
+ o An absolute URI requires the authority part; i.e., a host identity
+ MUST be provided.
+
+ o Parameters in the path element are prefixed with the reserved
+ separator ";".
+
+ The "scheme" and "host" parts of all URIs [RFC3986] and IRIs
+ [RFC3987] are case insensitive. All other parts of RTSP URIs and
+ IRIs are case sensitive, and they MUST NOT be case mapped.
+
+ The fragment identifier is used as defined in Sections 3.5 and 4.3 of
+ [RFC3986], i.e., the fragment is to be stripped from the IRI by the
+ requester and not included in the Request-URI. The user agent needs
+ to interpret the value of the fragment based on the media type the
+ request relates to; i.e., the media type indicated in Content-Type
+ header in the response to a DESCRIBE request.
+
+ The syntax of any URI query string is unspecified and responder
+ (usually the server) specific. The query is, from the requester's
+ perspective, an opaque string and needs to be handled as such.
+
+
+
+Schulzrinne, et al. Standards Track [Page 26]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Please note that relative URIs with queries are difficult to handle
+ due to the relative URI handling rules of RFC 3986. Any change of
+ the path element using a relative URI results in the stripping of the
+ query, which means the relative part needs to contain the query.
+
+ The URI scheme "rtsp" requires that commands be issued via a reliable
+ protocol (within the Internet, TCP), while the scheme "rtsps"
+ identifies a reliable transport using secure transport (TLS
+ [RFC5246]); see Section 19.
+
+ For the scheme "rtsp", if no port number is provided in the authority
+ part of the URI, the port number 554 MUST be used. For the scheme
+ "rtsps", if no port number is provided in the authority part of the
+ URI port number, the TCP port 322 MUST be used.
+
+ A presentation or a stream is identified by a textual media
+ identifier, using the character set and escape conventions of URIs
+ [RFC3986]. URIs may refer to a stream or an aggregate of streams;
+ i.e., a presentation. Accordingly, requests described in Section 13
+ can apply to either the whole presentation or an individual stream
+ within the presentation. Note that some request methods can only be
+ applied to streams, not presentations, and vice versa.
+
+ For example, the RTSP URI:
+
+ rtsp://media.example.com:554/twister/audiotrack
+
+ may identify the audio stream within the presentation "twister",
+ which can be controlled via RTSP requests issued over a TCP
+ connection to port 554 of host media.example.com.
+
+ Also, the RTSP URI:
+
+ rtsp://media.example.com:554/twister
+
+ identifies the presentation "twister", which may be composed of audio
+ and video streams, but could also be something else, such as a random
+ media redirector.
+
+ This does not imply a standard way to reference streams in URIs.
+ The presentation description defines the hierarchical
+ relationships in the presentation and the URIs for the individual
+ streams. A presentation description may name a stream "a.mov" and
+ the whole presentation "b.mov".
+
+ The path components of the RTSP URI are opaque to the client and do
+ not imply any particular file system structure for the server.
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 27]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ This decoupling also allows presentation descriptions to be used
+ with non-RTSP media control protocols simply by replacing the
+ scheme in the URI.
+
+4.3. Session Identifiers
+
+ Session identifiers are strings of a length between 8-128 characters.
+ A session identifier MUST be generated using methods that make it
+ cryptographically random (see [RFC4086]). It is RECOMMENDED that a
+ session identifier contain 128 bits of entropy, i.e., approximately
+ 22 characters from a high-quality generator (see Section 21).
+ However, note that the session identifier does not provide any
+ security against session hijacking unless it is kept confidential by
+ the client, server, and trusted proxies.
+
+4.4. Media-Time Formats
+
+ RTSP currently supports three different media-time formats defined
+ below. Additional time formats may be specified in the future.
+ These time formats can be used with the Range header (Section 18.40)
+ to request playback and specify at which media position protocol
+ requests actually will or have taken place. They are also used in
+ description of the media's properties using the Media-Range header
+ (Section 18.30). The unqualified format identifier is used on its
+ own in Accept-Ranges header (Section 18.5) to declare supported time
+ formats and also in the Range header (Section 18.40) to request the
+ time format used in the response.
+
+4.4.1. SMPTE-Relative Timestamps
+
+ A timestamp may use a format derived from a Society of Motion Picture
+ and Television Engineers (SMPTE) specification and expresses time
+ offsets anchored at the start of the media clip. Relative timestamps
+ are expressed as SMPTE time codes [SMPTE-TC] for frame-level access
+ accuracy. The time code has the format:
+
+ hours:minutes:seconds:frames.subframes
+
+ with the origin at the start of the clip. The default SMPTE format
+ is "SMPTE 30 drop" format, with a frame rate of 29.97 frames per
+ second. Other SMPTE codes MAY be supported (such as "SMPTE 25")
+ through the use of "smpte-type". For SMPTE 30, the "frames" field in
+ the time value can assume the values 0 through 29. The difference
+ between 30 and 29.97 frames per second is handled by dropping the
+ first two frame indices (values 00 and 01) of every minute, except
+ every tenth minute. If the frame and the subframe values are zero,
+ they may be omitted. Subframes are measured in hundredths of a
+ frame.
+
+
+
+Schulzrinne, et al. Standards Track [Page 28]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Examples:
+
+ smpte=10:12:33:20-
+ smpte=10:07:33-
+ smpte=10:07:00-10:07:33:05.01
+ smpte-25=10:07:00-10:07:33:05.01
+
+4.4.2. Normal Play Time
+
+ Normal Play Time (NPT) indicates the stream-absolute position
+ relative to the beginning of the presentation. The timestamp
+ consists of two parts: The mandatory first part may be expressed in
+ either seconds only or in hours, minutes, and seconds. The optional
+ second part consists of a decimal point and decimal figures and
+ indicates fractions of a second.
+
+ The beginning of a presentation corresponds to 0.0 seconds. Negative
+ values are not defined.
+
+ The special constant "now" is defined as the current instant of a
+ live event. It MAY only be used for live events and MUST NOT be used
+ for on-demand (i.e., non-live) content.
+
+ NPT is defined as in Digital Storage Media Command and Control
+ (DSMb;CC) [ISO.13818-6.1995]:
+
+ Intuitively, NPT is the clock the viewer associates with a
+ program. It is often digitally displayed on a DVD player. NPT
+ advances normally when in normal play mode (scale = 1), advances
+ at a faster rate when in fast-scan forward (high positive scale
+ ratio), decrements when in scan reverse (negative scale ratio) and
+ is fixed in pause mode. NPT is (logically) equivalent to SMPTE
+ time codes.
+
+ Examples:
+
+ npt=123.45-125
+ npt=12:05:35.3-
+ npt=now-
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 29]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ The syntax is based on ISO 8601 [ISO.8601.2000] and expresses the
+ time elapsed since presentation start, with two different notations
+ allowed:
+
+ o The npt-hhmmss notation uses an ISO 8601 extended complete
+ representation of the time of the day format (Section 5.3.1.1 of
+ [ISO.8601.2000] ) using colons (":") as separators between hours,
+ minutes, and seconds (hh:mm:ss). The hour counter is not limited
+ to 0-24 hours; up to nineteen (19) hour digits are allowed.
+
+ * In accordance with the requirements of the ISO 8601 time
+ format, the hours, minutes, and seconds MUST all be present,
+ with two digits used for minutes and for seconds and with at
+ least two digits for hours. An NPT of 7 minutes and 0 seconds
+ is represented as "00:07:00", and an NPT of 392 hours, 0
+ minutes, and 6 seconds is represented as "392:00:06".
+
+ * RTSP 1.0 allowed NPT in the npt-hhmmss notation without any
+ leading zeros to ensure that implementations don't fail; for
+ backward compatibility, all RTSP 2.0 implementations are
+ REQUIRED to support receiving NPT values, hours, minutes, or
+ seconds, without leading zeros.
+
+ o The npt-sec notation expresses the time in seconds, using between
+ one and nineteen (19) digits.
+
+ Both notations allow decimal fractions of seconds as specified in
+ Section 5.3.1.3 of [ISO.8601.2000], using at most nine digits, and
+ allowing only "." (full stop) as the decimal separator.
+
+ The npt-sec notation is optimized for automatic generation; the npt-
+ hhmmss notation is optimized for consumption by human readers. The
+ "now" constant allows clients to request to receive the live feed
+ rather than the stored or time-delayed version. This is needed since
+ neither absolute time nor zero time are appropriate for this case.
+
+4.4.3. Absolute Time
+
+ Absolute time is expressed using a timestamp based on ISO 8601
+ [ISO.8601.2000]. The date is a complete representation of the
+ calendar date in basic format (YYYYMMDD) without separators (per
+ Section 5.2.1.1 of [ISO.8601.2000]). The time of day is provided in
+ the complete representation basic format (hhmmss) as specified in
+ Section 5.3.1.1 of [ISO.8601.2000], allowing decimal fractions of
+ seconds following Section 5.3.1.3 requiring "." (full stop) as
+ decimal separator and limiting the number of digits to no more than
+ nine. The time expressed MUST use UTC (GMT), i.e., no time zone
+ offsets are allowed. The full date and time specification is the
+
+
+
+Schulzrinne, et al. Standards Track [Page 30]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ eight-digit date followed by a "T" followed by the six-digit time
+ value, optionally followed by a full stop followed by one to nine
+ fractions of a second and ended by "Z", e.g., YYYYMMDDThhmmss.ssZ.
+
+ The reasons for this time format rather than using "Date and Time
+ on the Internet: Timestamps" [RFC3339] are historic. We continue
+ to use the format specified in RTSP 1.0. The motivations raised
+ in RFC 3339 apply to why a selection from ISO 8601 was made;
+ however, a different and even more restrictive selection was
+ applied in this case.
+
+ Below are three examples of media time formats, first, a request for
+ a clock format range request for a starting time of November 8, 1996
+ at 14 h 37 min and 20 1/4 seconds UTC playing for 10 min and 5
+ seconds, followed by a Media-Properties header's "Time-Limited" UTC
+ property for the 24th of December 2014 at 15 hours and 00 minutes,
+ and finally a Terminate-Reason header "time" property for the 18th of
+ June 2013 at 16 hours, 12 minutes, and 56 seconds:
+
+ clock=19961108T143720.25Z-19961108T144725.25Z
+ Time-Limited=20141224T1500Z
+ time=20130618T161256Z
+
+4.5. Feature Tags
+
+ Feature tags are unique identifiers used to designate features in
+ RTSP. These tags are used in Require (Section 18.43), Proxy-Require
+ (Section 18.37), Proxy-Supported (Section 18.38), Supported
+ (Section 18.51), and Unsupported (Section 18.55) header fields.
+
+ A feature tag definition MUST indicate which combination of clients,
+ servers, or proxies to which it applies.
+
+ The creator of a new RTSP feature tag should either prefix the
+ feature tag with a reverse domain name (e.g.,
+ "com.example.mynewfeature" is an apt name for a feature whose
+ inventor can be reached at "example.com") or register the new feature
+ tag with the Internet Assigned Numbers Authority (IANA). (See
+ Section 22, "IANA Considerations".)
+
+ The usage of feature tags is further described in Section 11, which
+ deals with capability handling.
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 31]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+4.6. Message Body Tags
+
+ Message body tags are opaque strings that are used to compare two
+ message bodies from the same resource, for example, in caches or to
+ optimize setup after a redirect. Message body tags can be carried in
+ the MTag header (see Section 18.31) or in SDP (see Appendix D.1.9).
+ MTag is similar to ETag in HTTP/1.1 (see Section 3.11 of [RFC2068]).
+
+ A message body tag MUST be unique across all versions of all message
+ bodies associated with a particular resource. A given message body
+ tag value MAY be used for message bodies obtained by requests on
+ different URIs. The use of the same message body tag value in
+ conjunction with message bodies obtained by requests on different
+ URIs does not imply the equivalence of those message bodies.
+
+ Message body tags are used in RTSP to make some methods conditional.
+ The methods are made conditional through the inclusion of headers;
+ see Section 18.24 and Section 18.26 for information on the If-Match
+ and If-None-Match headers, respectively. Note that RTSP message body
+ tags apply to the complete presentation, i.e., both the presentation
+ description and the individual media streams. Thus, message body
+ tags can be used to verify at setup time after a redirect that the
+ same session description applies to the media at the new location
+ using the If-Match header.
+
+4.7. Media Properties
+
+ When an RTSP server handles media, it is important to consider the
+ different properties a media instance for delivery and playback can
+ have. This specification considers the media properties listed below
+ in its protocol operations. They are derived from the differences
+ between a number of supported usages.
+
+ On-demand: Media that has a fixed (given) duration that doesn't
+ change during the lifetime of the RTSP session and is known at the
+ time of the creation of the session. It is expected that the
+ content of the media will not change, even if the representation,
+ such as encoding, or quality, may change. Generally, one can
+ seek, i.e., request any range, within the media.
+
+ Dynamic On-demand: This is a variation of the on-demand case where
+ external methods are used to manipulate the actual content of the
+ media setup for the RTSP session. The main example is content
+ defined by a playlist.
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 32]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Live: Live media represents a progressing content stream (such as
+ broadcast TV) where the duration may or may not be known. It is
+ not seekable, only the content presently being delivered can be
+ accessed.
+
+ Live with Recording: A live stream that is combined with a server-
+ side capability to store and retain the content of the live
+ session and allow for random access delivery within the part of
+ the already-recorded content. The actual behavior of the media
+ stream is very much dependent on the retention policy for the
+ media stream; either the server will be able to capture the
+ complete media stream or it will have a limitation in how much
+ will be retained. The media range will dynamically change as the
+ session progress. For servers with a limited amount of storage
+ available for recording, there will typically be a sliding window
+ that moves forward while new data is made available and older data
+ is discarded.
+
+ To cover the above usages, the following media properties with
+ appropriate values are specified.
+
+4.7.1. Random Access and Seeking
+
+ Random access is the ability to specify and get media delivered
+ starting from any time (instant) within the content, an operation
+ called "seeking". The Media-Properties header will indicate the
+ general capability for a media resource to perform random access.
+
+ Random-Access: The media is seekable to any out of a large number of
+ points within the media. Due to media-encoding limitations, a
+ particular point may not be reachable, but seeking to a point
+ close by is enabled. A floating-point number of seconds may be
+ provided to express the worst-case distance between random access
+ points.
+
+ Beginning-Only: Seeking is only possible to the beginning of the
+ content.
+
+ No-Seeking: Seeking is not possible at all.
+
+ If random access is possible, as indicated by the Media-Properties
+ header, the actual behavior policy when seeking can be controlled
+ using the Seek-Style header (Section 18.47).
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 33]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+4.7.2. Retention
+
+ The following retention policies are used by media to limit possible
+ protocol operations:
+
+ Unlimited: The media will not be removed as long as the RTSP session
+ is in existence.
+
+ Time-Limited: The media will not be removed before the given
+ wallclock time. After that time, it may or may not be available
+ anymore.
+
+ Time-Duration: The media (on fragment or unit basis) will be
+ retained for the specified duration.
+
+4.7.3. Content Modifications
+
+ The media content and its timeline can be of different types, e.g.
+ pre-produced content on demand, a live source that is being generated
+ as time progresses, or something that is dynamically altered or
+ recomposed during playback. Therefore, a media property for content
+ modifications is needed and the following initial values are defined:
+
+ Immutable: The content of the media will not change, even if the
+ representation, such as encoding or quality changes.
+
+ Dynamic: The content can change due to external methods or triggers,
+ such as playlists, but this will be announced by explicit updates.
+
+ Time-Progressing: As time progresses, new content will become
+ available. If the content is also retained, it will become longer
+ as everything between the start point and the point currently
+ being made available can be accessed. If the media server uses a
+ sliding-window policy for retention, the start point will also
+ change as time progresses.
+
+4.7.4. Supported Scale Factors
+
+ A particular media content item often supports only a limited set or
+ range of scales when delivering the media. To enable the client to
+ know what values or ranges of scale operations that the whole content
+ or the current position supports, a media properties attribute for
+ this is defined that contains a list with the values or ranges that
+ are supported. The attribute is named "Scales". The "Scales"
+ attribute may be updated at any point in the content due to content
+ consisting of spliced pieces or content being dynamically updated by
+ out-of-band mechanisms.
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 34]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+4.7.5. Mapping to the Attributes
+
+ This section shows examples of how one would map the above usages to
+ the properties and their values.
+
+ Example of On-Demand:
+ Random Access: Random-Access=5.0, Content Modifications:
+ Immutable, Retention: Unlimited or Time-Limited.
+
+ Example of Dynamic On-Demand:
+ Random Access: Random-Access=3.0, Content Modifications: Dynamic,
+ Retention: Unlimited or Time-Limited.
+
+ Example of Live:
+ Random Access: No-Seeking, Content Modifications: Time-
+ Progressing, Retention: Time-Duration=0.0
+
+ Example of Live with Recording:
+ Random Access: Random-Access=3.0, Content Modifications: Time-
+ Progressing, Retention: Time-Duration=7200.0
+
+5. RTSP Message
+
+ RTSP is a text-based protocol that uses the ISO 10646 character set
+ in UTF-8 encoding per RFC 3629 [RFC3629]. Lines MUST be terminated
+ by a CRLF.
+
+ Text-based protocols make it easier to add optional parameters in
+ a self-describing manner. Since the number of parameters and the
+ frequency of commands is low, processing efficiency is not a
+ concern. Text-based protocols, if used carefully, also allow easy
+ implementation of research prototypes in scripting languages such
+ as Python, PHP, Perl and TCL.
+
+ The ISO 10646 character set avoids character-set switching, but is
+ invisible to the application as long as US-ASCII is being used. This
+ is also the encoding used for text fields in RTCP [RFC3550].
+
+ A request contains a method, the object the method is operating upon,
+ and parameters to further describe the method. Methods are
+ idempotent unless otherwise noted. Methods are also designed to
+ require little or no state maintenance at the media server.
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 35]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+5.1. Message Types
+
+ RTSP messages are either requests from client to server or from
+ server to client, and responses in the reverse direction. Request
+ (Section 7) and response (Section 8) messages use a format based on
+ the generic message format of RFC 5322 [RFC5322] for transferring
+ bodies (the payload of the message). Both types of messages consist
+ of a start-line, zero or more header fields (also known as
+ "headers"), an empty line (i.e., a line with nothing preceding the
+ CRLF) indicating the end of the headers, and possibly the data of the
+ message body. The ABNF [RFC5234] below is for illustration only; the
+ formal message specification is presented in Section 20.2.2.
+
+ generic-message = start-line
+ *(rtsp-header CRLF)
+ CRLF
+ [ message-body-data ]
+ start-line = Request-Line / Status-Line
+
+ In the interest of robustness, agents MUST ignore any empty line(s)
+ received where a Request-Line or Status-Line is expected. In other
+ words, if the agent is reading the protocol stream at the beginning
+ of a message and receives any number of CRLFs first, it MUST ignore
+ all of the CRLFs.
+
+5.2. Message Headers
+
+ RTSP header fields (see Section 18) include general-header, request-
+ header, response-header, and message body header fields.
+
+ The order in which header fields with differing field names are
+ received is not significant. However, it is "good practice" to send
+ general-header fields first, followed by a request-header or
+ response-header field, and ending with the message body header
+ fields.
+
+ Multiple header fields with the same field-name MAY be present in a
+ message if and only if the entire field-value for that header field
+ is defined as a comma-separated list. It MUST be possible to combine
+ the multiple header fields into one "field-name: field-value" pair,
+ without changing the semantics of the message, by appending each
+ subsequent field-value to the first, each separated by a comma. The
+ order in which header fields with the same field-name are received is
+ therefore significant to the interpretation of the combined field
+ value; thus, a proxy MUST NOT change the order of these field-values
+ when a message is forwarded.
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 36]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Unknown message headers MUST be ignored (skipping over the header to
+ the next protocol element, and not causing an error) by an RTSP
+ server or client. An RTSP proxy MUST forward unknown message
+ headers. Message headers defined outside of this specification that
+ are required to be interpreted by the RTSP agent will need to use
+ feature tags (Section 4.5) and include them in the appropriate
+ Require (Section 18.43) or Proxy-Require (Section 18.37) header.
+
+5.3. Message Body
+
+ The message body (if any) of an RTSP message is used to carry further
+ information for a particular resource associated with the request or
+ response. An example of a message body is an SDP message.
+
+ The presence of a message body in either a request or a response MUST
+ be signaled by the inclusion of a Content-Length header (see
+ Section 18.17) and Content-Type header (see Section 18.19). A
+ message body MUST NOT be included in a request or response if the
+ specification of the particular method (see Method Definitions
+ (Section 13)) does not allow sending a message body. In case a
+ message body is received in a message when not expected, the message
+ body data SHOULD be discarded. This is to allow future extensions to
+ define optional use of a message body.
+
+5.4. Message Length
+
+ An RTSP message that does not contain any message body is terminated
+ by the first empty line after the header fields (note: an empty line
+ is a line with nothing preceding the CRLF.). In RTSP messages that
+ contain message bodies, the empty line is followed by the message
+ body. The length of that body is determined by the value of the
+ Content-Length header (Section 18.17). The value in the header
+ represents the length of the message body in octets. If this header
+ field is not present, a value of zero is assumed, i.e., no message
+ body present in the message. Unlike an HTTP message, an RTSP message
+ MUST contain a Content-Length header whenever it contains a message
+ body. Note that RTSP does not support the HTTP/1.1 "chunked"
+ transfer coding (see Section 4.1 of [RFC7230]).
+
+ Given the moderate length of presentation descriptions returned,
+ the server should always be able to determine its length, even if
+ it is generated dynamically, making the chunked transfer encoding
+ unnecessary.
+
+6. General-Header Fields
+
+ General headers are headers that may be used in both requests and
+ responses. The general-headers are listed in Table 1:
+
+
+
+Schulzrinne, et al. Standards Track [Page 37]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ +--------------------+----------------+
+ | Header Name | Defined in |
+ +--------------------+----------------+
+ | Accept-Ranges | Section 18.5 |
+ | | |
+ | Cache-Control | Section 18.11 |
+ | | |
+ | Connection | Section 18.12 |
+ | | |
+ | CSeq | Section 18.20 |
+ | | |
+ | Date | Section 18.21 |
+ | | |
+ | Media-Properties | Section 18.29 |
+ | | |
+ | Media-Range | Section 18.30 |
+ | | |
+ | Pipelined-Requests | Section 18.33 |
+ | | |
+ | Proxy-Supported | Section 18.38 |
+ | | |
+ | Range | Section 18.40 |
+ | | |
+ | RTP-Info | Section 18.45 |
+ | | |
+ | Scale | Section 18.46 |
+ | | |
+ | Seek-Style | Section 18.47 |
+ | | |
+ | Server | Section 18.48 |
+ | | |
+ | Session | Section 18.49 |
+ | | |
+ | Speed | Section 18.50 |
+ | | |
+ | Supported | Section 18.51 |
+ | | |
+ | Timestamp | Section 18.53 |
+ | | |
+ | Transport | Section 18.54 |
+ | | |
+ | User-Agent | Section 18.56 |
+ | | |
+ | Via | Section 18.57 |
+ +--------------------+----------------+
+
+ Table 1: The General Headers Used in RTSP
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 38]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+7. Request
+
+ A request message uses the format outlined below regardless of the
+ direction of a request, whether client to server or server to client:
+
+ o Request line, containing the method to be applied to the resource,
+ the identifier of the resource, and the protocol version in use;
+
+ o Zero or more Header lines, which can be of the following types:
+ general-headers (Section 6), request-headers (Section 7.2), or
+ message body headers (Section 9.1);
+
+ o One empty line (CRLF) to indicate the end of the header section;
+
+ o Optionally, a message body, consisting of one or more lines. The
+ length of the message body in octets is indicated by the Content-
+ Length message header.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 39]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+7.1. Request Line
+
+ The request line provides the key information about the request: what
+ method, on what resources, and using which RTSP version. The methods
+ that are defined by this specification are listed in Table 2.
+
+ +---------------+----------------+
+ | Method | Defined in |
+ +---------------+----------------+
+ | DESCRIBE | Section 13.2 |
+ | | |
+ | GET_PARAMETER | Section 13.8 |
+ | | |
+ | OPTIONS | Section 13.1 |
+ | | |
+ | PAUSE | Section 13.6 |
+ | | |
+ | PLAY | Section 13.4 |
+ | | |
+ | PLAY_NOTIFY | Section 13.5 |
+ | | |
+ | REDIRECT | Section 13.10 |
+ | | |
+ | SETUP | Section 13.3 |
+ | | |
+ | SET_PARAMETER | Section 13.9 |
+ | | |
+ | TEARDOWN | Section 13.7 |
+ +---------------+----------------+
+
+ Table 2: The RTSP Methods
+
+ The syntax of the RTSP request line has the following:
+
+ <Method> SP <Request-URI> SP <RTSP-Version> CRLF
+
+ Note: This syntax cannot be freely changed in future versions of
+ RTSP. This line needs to remain parsable by older RTSP
+ implementations since it indicates the RTSP version of the message.
+
+ In contrast to HTTP/1.1 [RFC7230], RTSP requests identify the
+ resource through an absolute RTSP URI (including scheme, host, and
+ port) (see Section 4.2) rather than just the absolute path.
+
+ HTTP/1.1 requires servers to understand the absolute URI, but
+ clients are supposed to use the Host request-header. This is
+ purely needed for backward compatibility with HTTP/1.0 servers, a
+ consideration that does not apply to RTSP.
+
+
+
+Schulzrinne, et al. Standards Track [Page 40]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ An asterisk "*" can be used instead of an absolute URI in the
+ Request-URI part to indicate that the request does not apply to a
+ particular resource but to the server or proxy itself, and is only
+ allowed when the request method does not necessarily apply to a
+ resource.
+
+ For example:
+
+ OPTIONS * RTSP/2.0
+
+ An OPTIONS in this form will determine the capabilities of the server
+ or the proxy that first receives the request. If the capability of
+ the specific server needs to be determined, without regard to the
+ capability of an intervening proxy, the server should be addressed
+ explicitly with an absolute URI that contains the server's address.
+
+ For example:
+
+ OPTIONS rtsp://example.com RTSP/2.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 41]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+7.2. Request-Header Fields
+
+ The RTSP headers in Table 3 can be included in a request, as request-
+ headers, to modify the specifics of the request.
+
+ +---------------------+----------------+
+ | Header | Defined in |
+ +---------------------+----------------+
+ | Accept | Section 18.1 |
+ | | |
+ | Accept-Credentials | Section 18.2 |
+ | | |
+ | Accept-Encoding | Section 18.3 |
+ | | |
+ | Accept-Language | Section 18.4 |
+ | | |
+ | Authorization | Section 18.8 |
+ | | |
+ | Bandwidth | Section 18.9 |
+ | | |
+ | Blocksize | Section 18.10 |
+ | | |
+ | From | Section 18.23 |
+ | | |
+ | If-Match | Section 18.24 |
+ | | |
+ | If-Modified-Since | Section 18.25 |
+ | | |
+ | If-None-Match | Section 18.26 |
+ | | |
+ | Notify-Reason | Section 18.32 |
+ | | |
+ | Proxy-Authorization | Section 18.36 |
+ | | |
+ | Proxy-Require | Section 18.37 |
+ | | |
+ | Referrer | Section 18.41 |
+ | | |
+ | Request-Status | Section 18.42 |
+ | | |
+ | Require | Section 18.43 |
+ | | |
+ | Terminate-Reason | Section 18.52 |
+ +---------------------+----------------+
+
+ Table 3: The RTSP Request-Headers
+
+ Detailed header definitions are provided in Section 18.
+
+
+
+Schulzrinne, et al. Standards Track [Page 42]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ New request-headers may be defined. If the receiver of the request
+ is required to understand the request-header, the request MUST
+ include a corresponding feature tag in a Require or Proxy-Require
+ header to ensure the processing of the header.
+
+8. Response
+
+ After receiving and interpreting a request message, the recipient
+ responds with an RTSP response message. Normally, there is only one,
+ final, response. Responses using the response code class 1xx is the
+ only class for which there MAY be sent one or more responses prior to
+ the final response message.
+
+ The valid response codes and the methods they can be used with are
+ listed in Table 4.
+
+8.1. Status-Line
+
+ The first line of a response message is the Status-Line, consisting
+ of the protocol version followed by a numeric status code and the
+ textual phrase associated with the status code, with each element
+ separated by SP characters. No CR or LF is allowed except in the
+ final CRLF sequence.
+
+ <RTSP-Version> SP <Status-Code> SP <Reason Phrase> CRLF
+
+8.1.1. Status Code and Reason Phrase
+
+ The Status-Code element is a 3-digit integer result code of the
+ attempt to understand and satisfy the request. These codes are fully
+ defined in Section 17. The reason phrase is intended to give a short
+ textual description of the Status-Code. The Status-Code is intended
+ for use by automata and the reason phrase is intended for the human
+ user. The client is not required to examine or display the reason
+ phrase.
+
+ The first digit of the Status-Code defines the class of response.
+ The last two digits do not have any categorization role. There are
+ five values for the first digit:
+
+ 1xx: Informational - Request received, continuing process
+
+ 2xx: Success - The action was successfully received, understood, and
+ accepted
+
+ 3rr: Redirection - Further action needs to be taken in order to
+ complete the request (3rr rather than 3xx is used as 304 is
+ excluded; see Section 17.3)
+
+
+
+Schulzrinne, et al. Standards Track [Page 43]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ 4xx: Client Error - The request contains bad syntax or cannot be
+ fulfilled
+
+ 5xx: Server Error - The server failed to fulfill an apparently valid
+ request
+
+ The individual values of the numeric status codes defined for RTSP
+ 2.0, and an example set of corresponding reason phrases, are
+ presented in Table 4. The reason phrases listed here are only
+ recommended; they may be replaced by local equivalents without
+ affecting the protocol. Note that RTSP adopted most HTTP/1.1
+ [RFC2068] status codes and then added RTSP-specific status codes
+ starting at x50 to avoid conflicts with future HTTP status codes that
+ are desirable to import into RTSP. All these codes are RTSP specific
+ and RTSP has its own registry separate from HTTP for status codes.
+
+ RTSP status codes are extensible. RTSP applications are not required
+ to understand the meaning of all registered status codes, though such
+ understanding is obviously desirable. However, applications MUST
+ understand the class of any status code, as indicated by the first
+ digit, and treat any unrecognized response as being equivalent to the
+ x00 status code of that class, with an exception for unknown 3xx
+ codes, which MUST be treated as a 302 (Found). The reason for that
+ exception is that the status code 300 (Multiple Choices in HTTP) is
+ not defined for RTSP. A response with an unrecognized status code
+ MUST NOT be cached. For example, if an unrecognized status code of
+ 431 is received by the client, it can safely assume that there was
+ something wrong with its request and treat the response as if it had
+ received a 400 status code. In such cases, user agents SHOULD
+ present to the user the message body returned with the response,
+ since that message body is likely to include human-readable
+ information that will explain the unusual status.
+
+ +------+---------------------------------+--------------------------+
+ | Code | Reason | Method |
+ +------+---------------------------------+--------------------------+
+ | 100 | Continue | all |
+ | | | |
+ | 200 | OK | all |
+ | | | |
+ | 301 | Moved Permanently | all |
+ | | | |
+ | 302 | Found | all |
+ | | | |
+ | 303 | See Other | n/a |
+ | | | |
+ | 304 | Not Modified | all |
+ | | | |
+
+
+
+Schulzrinne, et al. Standards Track [Page 44]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ | 305 | Use Proxy | all |
+ | | | |
+ | 400 | Bad Request | all |
+ | | | |
+ | 401 | Unauthorized | all |
+ | | | |
+ | 402 | Payment Required | all |
+ | | | |
+ | 403 | Forbidden | all |
+ | | | |
+ | 404 | Not Found | all |
+ | | | |
+ | 405 | Method Not Allowed | all |
+ | | | |
+ | 406 | Not Acceptable | all |
+ | | | |
+ | 407 | Proxy Authentication Required | all |
+ | | | |
+ | 408 | Request Timeout | all |
+ | | | |
+ | 410 | Gone | all |
+ | | | |
+ | 412 | Precondition Failed | DESCRIBE, SETUP |
+ | | | |
+ | 413 | Request Message Body Too Large | all |
+ | | | |
+ | 414 | Request-URI Too Long | all |
+ | | | |
+ | 415 | Unsupported Media Type | all |
+ | | | |
+ | 451 | Parameter Not Understood | SET_PARAMETER, |
+ | | | GET_PARAMETER |
+ | | | |
+ | 452 | reserved | n/a |
+ | | | |
+ | 453 | Not Enough Bandwidth | SETUP |
+ | | | |
+ | 454 | Session Not Found | all |
+ | | | |
+ | 455 | Method Not Valid in This State | all |
+ | | | |
+ | 456 | Header Field Not Valid for | all |
+ | | Resource | |
+ | | | |
+ | 457 | Invalid Range | PLAY, PAUSE |
+ | | | |
+ | 458 | Parameter Is Read-Only | SET_PARAMETER |
+ | | | |
+
+
+
+Schulzrinne, et al. Standards Track [Page 45]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ | 459 | Aggregate Operation Not Allowed | all |
+ | | | |
+ | 460 | Only Aggregate Operation | all |
+ | | Allowed | |
+ | | | |
+ | 461 | Unsupported Transport | all |
+ | | | |
+ | 462 | Destination Unreachable | all |
+ | | | |
+ | 463 | Destination Prohibited | SETUP |
+ | | | |
+ | 464 | Data Transport Not Ready Yet | PLAY |
+ | | | |
+ | 465 | Notification Reason Unknown | PLAY_NOTIFY |
+ | | | |
+ | 466 | Key Management Error | all |
+ | | | |
+ | 470 | Connection Authorization | all |
+ | | Required | |
+ | | | |
+ | 471 | Connection Credentials Not | all |
+ | | Accepted | |
+ | | | |
+ | 472 | Failure to Establish Secure | all |
+ | | Connection | |
+ | | | |
+ | 500 | Internal Server Error | all |
+ | | | |
+ | 501 | Not Implemented | all |
+ | | | |
+ | 502 | Bad Gateway | all |
+ | | | |
+ | 503 | Service Unavailable | all |
+ | | | |
+ | 504 | Gateway Timeout | all |
+ | | | |
+ | 505 | RTSP Version Not Supported | all |
+ | | | |
+ | 551 | Option Not Supported | all |
+ | | | |
+ | 553 | Proxy Unavailable | all |
+ +------+---------------------------------+--------------------------+
+
+ Table 4: Status Codes and Their Usage with RTSP Methods
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 46]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+8.2. Response Headers
+
+ The response-headers allow the request recipient to pass additional
+ information about the response that cannot be placed in the Status-
+ Line. This header gives information about the server and about
+ further access to the resource identified by the Request-URI. All
+ headers currently classified as response-headers are listed in
+ Table 5.
+
+ +------------------------+----------------+
+ | Header | Defined in |
+ +------------------------+----------------+
+ | Authentication-Info | Section 18.7 |
+ | | |
+ | Connection-Credentials | Section 18.13 |
+ | | |
+ | Location | Section 18.28 |
+ | | |
+ | MTag | Section 18.31 |
+ | | |
+ | Proxy-Authenticate | Section 18.34 |
+ | | |
+ | Public | Section 18.39 |
+ | | |
+ | Retry-After | Section 18.44 |
+ | | |
+ | Unsupported | Section 18.55 |
+ | | |
+ | WWW-Authenticate | Section 18.58 |
+ +------------------------+----------------+
+
+ Table 5: The RTSP Response Headers
+
+ Response-header names can be extended reliably only in combination
+ with a change in the protocol version. However, the usage of feature
+ tags in the request allows the responding party to learn the
+ capability of the receiver of the response. A new or experimental
+ header can be given the semantics of response-header if all parties
+ in the communication recognize them to be a response-header.
+ Unrecognized headers in responses MUST be ignored.
+
+9. Message Body
+
+ Some request and response messages include a message body, if not
+ otherwise restricted by the request method or response status code.
+ The message body consists of the content data itself (see also
+ Section 5.3).
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 47]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ The SET_PARAMETER and GET_PARAMETER requests and responses, and the
+ DESCRIBE response as defined by this specification, can have a
+ message body; the purpose of the message body is defined in each
+ case. All 4xx and 5xx responses MAY also have a message body to
+ carry additional response information. Generally, a message body MAY
+ be attached to any RTSP 2.0 request or response, but the content of
+ the message body MAY be ignored by the receiver. Extensions to this
+ specification can specify the purpose and content of message bodies,
+ including requiring their inclusion.
+
+ In this section, both sender and recipient refer to either the client
+ or the server, depending on who sends and who receives the message
+ body.
+
+9.1. Message Body Header Fields
+
+ Message body header fields define meta-information about the content
+ data in the message body. The message body header fields are listed
+ in Table 6.
+
+ +------------------+----------------+
+ | Header | Defined in |
+ +------------------+----------------+
+ | Allow | Section 18.6 |
+ | | |
+ | Content-Base | Section 18.14 |
+ | | |
+ | Content-Encoding | Section 18.15 |
+ | | |
+ | Content-Language | Section 18.16 |
+ | | |
+ | Content-Length | Section 18.17 |
+ | | |
+ | Content-Location | Section 18.18 |
+ | | |
+ | Content-Type | Section 18.19 |
+ | | |
+ | Expires | Section 18.22 |
+ | | |
+ | Last-Modified | Section 18.27 |
+ +------------------+----------------+
+
+ Table 6: The RTSP Message Body Headers
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 48]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ The extension-header mechanism allows additional message body header
+ fields to be defined without changing the protocol, but these fields
+ cannot be assumed to be recognizable by the recipient. Unrecognized
+ header fields MUST be ignored by the recipient and forwarded by
+ proxies.
+
+9.2. Message Body
+
+ An RTSP message with a message body MUST include the Content-Type and
+ Content-Length headers. When a message body is included with a
+ message, the data type of that content data is determined via the
+ Content-Type and Content-Encoding header fields.
+
+ Content-Type specifies the media type of the underlying data. There
+ is no default media format and the actual format used in the body is
+ required to be explicitly stated in the Content-Type header. By
+ being explicit and always requiring the inclusion of the Content-Type
+ header with accurate information, one avoids the many pitfalls in a
+ heuristic-based interpretation of the body content. The user
+ experience of HTTP and email have suffered from relying on such
+ heuristics.
+
+ Content-Encoding may be used to indicate any additional content-
+ codings applied to the data, usually for the purpose of data
+ compression, that are a property of the requested resource. The
+ default encoding is 'identity', i.e. no transformation of the message
+ body.
+
+ The Content-Length of a message is the length of the content,
+ measured in octets.
+
+9.3. Message Body Format Negotiation
+
+ The content format of the message body is provided using the Content-
+ Type header (Section 18.19). To enable the responder of a request to
+ determine which media type it should use, the requester may include
+ the Accept header (Section 18.1) in a request to identify supported
+ media types or media type ranges suitable to the response. In case
+ the responder is not supporting any of the specified formats, then
+ the request response will be a 406 (Not Acceptable) error code.
+
+ The media types that may be used on requests with message bodies need
+ to be determined through the use of feature tags, specification
+ requirement, or trial and error. Trial and error works because when
+ the responder does not support the media type of the message body, it
+ will respond with a 415 (Unsupported Media Type).
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 49]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ The formats supported and their negotiation is done individually on a
+ per method and direction (request or response body) direction.
+ Requirements on supporting particular media types for use as message
+ bodies in requests and response SHALL also be specified on a per-
+ method and per-direction basis.
+
+10. Connections
+
+ RTSP messages are transferred between RTSP agents and proxies using a
+ transport connection. This transport connection uses TCP or TCP/TLS.
+ This transport connection is referred to as the "connection" or "RTSP
+ connection" within this document.
+
+ RTSP requests can be transmitted using the two different connection
+ scenarios listed below:
+
+ o persistent - a transport connection is used for several request/
+ response transactions;
+
+ o transient - a transport connection is used for each single
+ request/response transaction.
+
+ RFC 2326 attempted to specify an optional mechanism for transmitting
+ RTSP messages in connectionless mode over a transport protocol such
+ as UDP. However, it was not specified in sufficient detail to allow
+ for interoperable implementations. In an attempt to reduce
+ complexity and scope, and due to lack of interest, RTSP 2.0 does not
+ attempt to define a mechanism for supporting RTSP over UDP or other
+ connectionless transport protocols. A side effect of this is that
+ RTSP requests MUST NOT be sent to multicast groups since no
+ connection can be established with a specific receiver in multicast
+ environments.
+
+ Certain RTSP headers, such as the CSeq header (Section 18.20), which
+ may appear to be relevant only to connectionless transport scenarios,
+ are still retained and MUST be implemented according to this
+ specification. In the case of CSeq, it is quite useful for matching
+ responses to requests if the requests are pipelined (see Section 12).
+ It is also useful in proxies for keeping track of the different
+ requests when aggregating several client requests on a single TCP
+ connection.
+
+10.1. Reliability and Acknowledgements
+
+ Since RTSP messages are transmitted using reliable transport
+ protocols, they MUST NOT be retransmitted at the RTSP level.
+ Instead, the implementation must rely on the underlying transport to
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 50]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ provide reliability. The RTSP implementation may use any indication
+ of reception acknowledgment of the message from the underlying
+ transport protocols to optimize the RTSP behavior.
+
+ If both the underlying reliable transport, such as TCP, and the
+ RTSP application retransmit requests, each packet loss or message
+ loss may result in two retransmissions. The receiver typically
+ cannot take advantage of the application-layer retransmission
+ since the transport stack will not deliver the application-layer
+ retransmission before the first attempt has reached the receiver.
+ If the packet loss is caused by congestion, multiple
+ retransmissions at different layers will exacerbate the
+ congestion.
+
+ Lack of acknowledgment of an RTSP request should be handled within
+ the constraints of the connection timeout considerations described
+ below (Section 10.4).
+
+10.2. Using Connections
+
+ A TCP transport can be used for both persistent connections (for
+ several message exchanges) and transient connections (for a single
+ message exchange). Implementations of this specification MUST
+ support RTSP over TCP. The scheme of the RTSP URI (Section 4.2)
+ allows the client to specify the port it will contact the server on,
+ and defines the default port to use if one is not explicitly given.
+
+ In addition to the registered default ports, i.e., 554 (rtsp) and 322
+ (rtsps), there is an alternative port 8554 registered. This port may
+ provide some benefits over non-registered ports if an RTSP server is
+ unable to use the default ports. The benefits may include
+ preconfigured security policies as well as classifiers in network
+ monitoring tools.
+
+ An RTSP client opening a TCP connection to access a particular
+ resource as identified by a URI uses the IP address and port derived
+ from the host and port parts of the URI. The IP address is either
+ the explicit address provided in the URI or any of the addresses
+ provided when performing A and AAAA record DNS lookups of the
+ hostname in the URI.
+
+ A server MUST handle both persistent and transient connections.
+
+ Transient connections facilitate mechanisms for fault tolerance.
+ They also allow for application-layer mobility. A server-and-
+ client pair that supports transient connections can survive the
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 51]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ loss of a TCP connection; e.g., due to a NAT timeout. When the
+ client has discovered that the TCP connection has been lost, it
+ can set up a new one when there is need to communicate again.
+
+ A persistent connection is RECOMMENDED to be used for all
+ transactions between the server and client, including messages for
+ multiple RTSP sessions. However, a persistent connection MAY be
+ closed after a few message exchanges. For example, a client may use
+ a persistent connection for the initial SETUP and PLAY message
+ exchanges in a session and then close the connection. Later, when
+ the client wishes to send a new request, such as a PAUSE for the
+ session, a new connection would be opened. This connection may be
+ either transient or persistent.
+
+ An RTSP agent MAY use one connection to handle multiple RTSP sessions
+ on the same server. The RTSP agent SHALL NOT use more than one
+ connection per RTSP session at any given point.
+
+ Having only one connection in use at any time avoids confusion
+ regarding on which connection any server-to-client requests shall
+ be sent. Using a single connection for multiple RTSP sessions
+ also saves complexity by enabling the server to maintain less
+ state about its connection resources on the server. Not using
+ more than one connection at a time for a particular RTSP session
+ avoids wasting connection resources and allows the server to track
+ only the most recently used client-to-server connection for each
+ RTSP session as being the currently valid server-to-client
+ connection.
+
+ RTSP allows a server to send requests to a client. However, this can
+ be supported only if a client establishes a persistent connection
+ with the server. In cases where a persistent connection does not
+ exist between a server and its client, due to the lack of a signaling
+ channel, the server may be forced to silently discard RTSP messages,
+ and it may even drop an RTSP session without notifying the client.
+ An example of such a case is when the server desires to send a
+ REDIRECT request for an RTSP session to the client but is not able to
+ do so because it cannot reach the client. A server that attempts to
+ send a request to a client that has no connection currently to the
+ server SHALL discard the request.
+
+ Without a persistent connection between the client and the server,
+ the media server has no reliable way of reaching the client.
+ Because of the likely failure of server-to-client established
+ connections, the server will not even attempt establishing any
+ connection.
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 52]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Queuing of server-to-client requests has been considered.
+ However, a security issue exists as to how it might be possible to
+ authorize a client establishing a new connection as being a
+ legitimate receiver of a request related to a particular RTSP
+ session, without the client first issuing requests related to the
+ pending request. Thus, it would be likely to make any such
+ requests even more delayed and less useful.
+
+ The sending of client and server requests can be asynchronous events.
+ To avoid deadlock situations, both client and server MUST be able to
+ send and receive requests simultaneously. As an RTSP response may be
+ queued up for transmission, reception or processing behind the peer
+ RTSP agent's own requests, all RTSP agents are required to have a
+ certain capability of handling outstanding messages. A potential
+ issue is that outstanding requests may time out despite being
+ processed by the peer; this can be due to the response being caught
+ in the queue behind a number of requests that the RTSP agent is
+ processing but that take some time to complete. To avoid this
+ problem, an RTSP agent should buffer incoming messages locally so
+ that any response messages can be processed immediately upon
+ reception. If responses are separated from requests and directly
+ forwarded for processing, not only can the result be used
+ immediately, the state associated with that outstanding request can
+ also be released. However, buffering a number of requests on the
+ receiving RTSP agent consumes resources and enables a resource
+ exhaustion attack on the agent. Therefore, this buffer should be
+ limited so that an unreasonable number of requests or total message
+ size is not allowed to consume the receiving agent's resources. In
+ most APIs, having the receiving agent stop reading from the TCP
+ socket will result in TCP's window being clamped, thus forcing the
+ buffering onto the sending agent when the load is larger than
+ expected. However, as both RTSP message sizes and frequency may be
+ changed in the future by protocol extensions, an agent should be
+ careful about taking harsher measurements against a potential attack.
+ When under attack, an RTSP agent can close TCP connections and
+ release state associated with that TCP connection.
+
+ To provide some guidance on what is reasonable, the following
+ guidelines are given. It is RECOMMENDED that:
+
+ o an RTSP agent should not have more than 10 outstanding requests
+ per RTSP session;
+
+ o an RTSP agent should not have more than 10 outstanding requests
+ that are not related to an RTSP session or that are requesting to
+ create an RTSP session.
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 53]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ In light of the above, it is RECOMMENDED that clients use persistent
+ connections whenever possible. A client that supports persistent
+ connections MAY "pipeline" its requests (see Section 12).
+
+ RTSP agents can send requests to multiple different destinations,
+ either server or client contexts over the same connection to a proxy.
+ Then, the proxy forks the message to the different destinations over
+ proxy-to-agent connections. In these cases when multiple requests
+ are outstanding, the requesting agent MUST be ready to receive the
+ responses out of order compared to the order they where sent on the
+ connection. The order between multiple messages for each destination
+ will be maintained; however, the order between response from
+ different destinations can be different.
+
+ The reason for this is to avoid a head-of-line blocking situation.
+ In a sequence of requests, an early outstanding request may take
+ time to be processed at one destination. Simultaneously, a
+ response from any other destination that was later in the sequence
+ of requests may have arrived at the proxy; thus, allowing out-of-
+ order responses avoids forcing the proxy to buffer this response
+ and instead deliver it as soon as possible. Note, this will not
+ affect the order in which the messages sent to each separate
+ destination were processed at the request destination.
+
+ This scenario can occur in two cases involving proxies. The first is
+ a client issuing requests for sessions on different servers using a
+ common client-to-proxy connection. The second is for server-to-
+ client requests, like REDIRECT being sent by the server over a common
+ transport connection the proxy created for its different connecting
+ clients.
+
+10.3. Closing Connections
+
+ The client MAY close a connection at any point when no outstanding
+ request/response transactions exist for any RTSP session being
+ managed through the connection. The server, however, SHOULD NOT
+ close a connection until all RTSP sessions being managed through the
+ connection have been timed out (Section 18.49). A server SHOULD NOT
+ close a connection immediately after responding to a session-level
+ TEARDOWN request for the last RTSP session being controlled through
+ the connection. Instead, the server should wait for a reasonable
+ amount of time for the client to receive and act upon the TEARDOWN
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 54]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ response and then initiate the connection closing. The server SHOULD
+ wait at least 10 seconds after sending the TEARDOWN response before
+ closing the connection.
+
+ This is to ensure that the client has time to issue a SETUP for a
+ new session on the existing connection after having torn the last
+ one down. Ten seconds should give the client ample opportunity to
+ get its message to the server.
+
+ A server SHOULD NOT close the connection directly as a result of
+ responding to a request with an error code.
+
+ Certain error responses such as 460 (Only Aggregate Operation
+ Allowed) (Section 17.4.24) are used for negotiating capabilities
+ of a server with respect to content or other factors. In such
+ cases, it is inefficient for the server to close a connection on
+ an error response. Also, such behavior would prevent
+ implementation of advanced or special types of requests or result
+ in extra overhead for the client when testing for new features.
+ On the other hand, keeping connections open after sending an error
+ response poses a Denial-of-Service (DoS) security risk
+ (Section 21).
+
+ The server MAY close a connection if it receives an incomplete
+ message and if the message is not completed within a reasonable
+ amount of time. It is RECOMMENDED that the server wait at least 10
+ seconds for the completion of a message or for the next part of the
+ message to arrive (which is an indication that the transport and the
+ client are still alive). Servers believing they are under attack or
+ that are otherwise starved for resources during that event MAY
+ consider using a shorter timeout.
+
+ If a server closes a connection while the client is attempting to
+ send a new request, the client will have to close its current
+ connection, establish a new connection, and send its request over the
+ new connection.
+
+ An RTSP message SHOULD NOT be terminated by closing the connection.
+ Such a message MAY be considered to be incomplete by the receiver and
+ discarded. An RTSP message is properly terminated as defined in
+ Section 5.
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 55]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+10.4. Timing Out Connections and RTSP Messages
+
+ Receivers of a request (responders) SHOULD respond to requests in a
+ timely manner even when a reliable transport such as TCP is used.
+ Similarly, the sender of a request (requester) SHOULD wait for a
+ sufficient time for a response before concluding that the responder
+ will not be acting upon its request.
+
+ A responder SHOULD respond to all requests within 5 seconds. If the
+ responder recognizes that the processing of a request will take
+ longer than 5 seconds, it SHOULD send a 100 (Continue) response as
+ soon as possible. It SHOULD continue sending a 100 response every 5
+ seconds thereafter until it is ready to send the final response to
+ the requester. After sending a 100 response, the responder MUST send
+ a final response indicating the success or failure of the request.
+
+ A requester SHOULD wait at least 10 seconds for a response before
+ concluding that the responder will not be responding to its request.
+ After receiving a 100 response, the requester SHOULD continue waiting
+ for further responses. If more than 10 seconds elapse without
+ receiving any response, the requester MAY assume that the responder
+ is unresponsive and abort the connection by closing the TCP
+ connection.
+
+ In some cases, multiple RTSP sessions share the same transport
+ connection; abandoning a request and closing the connection may have
+ significant impact on those other sessions. First of all, other RTSP
+ requests may have become queued up due to the request taking a long
+ time to process. Secondly, those sessions also lose the possibility
+ to receive server-to-client requests. To mitigate that situation,
+ the RTSP client or server SHOULD establish a new connection and send
+ any requests that are queued up or that haven't received a response
+ on this new connection. Thirdly, to ensure that the RTSP server
+ knows which connection is valid for a particular RTSP session, the
+ RTSP agent SHOULD send a keep-alive request, if no other request will
+ be sent immediately for that RTSP session, for each RTSP session on
+ the old connection. The keep-alive request will normally be a
+ SET_PARAMETER with a session header to inform the server that this
+ agent cares about this RTSP session.
+
+ A requester SHOULD wait longer than 10 seconds for a response if it
+ is experiencing significant transport delays on its connection to the
+ responder. The requester is capable of determining the Round-Trip
+ Time (RTT) of the request/response cycle using the Timestamp header
+ (Section 18.53) in any RTSP request.
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 56]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ The 10-second wait was chosen for the following reasons. It gives
+ TCP time to perform a couple of retransmissions, even if operating
+ on default values. It is short enough that users may not abandon
+ the process themselves. However, it should be noted that 10
+ seconds can be aggressive on certain types of networks. The
+ 5-second value for 1xx messages is half the timeout giving a
+ reasonable chance of successful delivery before timeout happens on
+ the requester side.
+
+10.5. Showing Liveness
+
+ RTSP requires the client to periodically show its liveness to the
+ server or the server may terminate any session state. Several
+ different protocol mechanism include in their usage a liveness proof
+ from the client. These mechanisms are RTSP requests with a Session
+ header to the server; if RTP & RTCP is used for media data transport
+ and the transport is established, the RTCP message proves liveness;
+ or through any other used media-transport protocol capable of
+ indicating liveness of the RTSP client. It is RECOMMENDED that a
+ client not wait to the last second of the timeout before trying to
+ send a liveness message. The RTSP message may take some time to
+ arrive safely at the receiver, due to packet loss and TCP
+ retransmissions. To show liveness between RTSP requests being issued
+ to accomplish other things, the following mechanisms can be used, in
+ descending order of preference:
+
+ RTCP: If RTP is used for media transport, RTCP SHOULD be used. If
+ RTCP is used to report transport statistics, it will
+ necessarily also function as a keep-alive. The server can
+ determine the client by network address and port together with
+ the fact that the client is reporting on the server's RTP
+ sender sources (synchronization source (SSRCs)). A downside of
+ using RTCP is that it only gives statistical guarantees of
+ reaching the server. However, the probability of a false
+ client timeout is so low that it can be ignored in most cases.
+ For example, assume a session with a 60-second timeout and
+ enough bitrate assigned to RTCP messages to send a message from
+ client to server on average every 5 seconds. That client has,
+ for a network with 5% packet loss, a probability of failing to
+ confirm liveness within the timeout interval for that session
+ of 2.4*E-16. Sessions with shorter timeouts, much higher
+ packet loss, or small RTCP bandwidths SHOULD also implement one
+ or more of the mechanisms below.
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 57]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ SET_PARAMETER: When using SET_PARAMETER for keep-alives, a body
+ SHOULD NOT be included. This method is the RECOMMENDED RTSP
+ method to use for a request intended only to perform keep-
+ alives. RTSP servers MUST support the SET_PARAMETER method, so
+ that clients can always use this mechanism.
+
+ GET_PARAMETER: When using GET_PARAMETER for keep-alives, a body
+ SHOULD NOT be included, dependent on implementation support in
+ the server. Use the OPTIONS method to determine if there is
+ method support or simply try.
+
+ OPTIONS: This method is also usable, but it causes the server to
+ perform more unnecessary processing and results in bigger
+ responses than necessary for the task. The reason is that the
+ server needs to determine the capabilities associated with the
+ media resource to correctly populate the Public and Allow
+ headers.
+
+ The timeout parameter of the Session header (Section 18.49) MAY be
+ included in a SETUP response and MUST NOT be included in requests.
+ The server uses it to indicate to the client how long the server is
+ prepared to wait between RTSP commands or other signs of life before
+ closing the session due to lack of activity (see Appendix B). The
+ timeout is measured in seconds, with a default of 60 seconds. The
+ length of the session timeout MUST NOT be changed in an established
+ session.
+
+10.6. Use of IPv6
+
+ Explicit IPv6 [RFC2460] support was not present in RTSP 1.0. RTSP
+ 2.0 has been updated for explicit IPv6 support. Implementations of
+ RTSP 2.0 MUST understand literal IPv6 addresses in URIs and RTSP
+ headers. Although the general URI format envisages potential future
+ new versions of the literal IP address, usage of any such new version
+ would require other modifications to the RTSP specification (e.g.,
+ address fields in the Transport header (Section 18.54)).
+
+10.7. Overload Control
+
+ Overload in RTSP can occur when servers and proxies have insufficient
+ resources to complete the processing of a request. An improper
+ handling of such an overload situation at proxies and servers can
+ impact the operation of the RTSP deployment, and probably worsen the
+ situation. RTSP defines the 503 (Service Unavailable) response
+ (Section 17.5.4) to let servers and proxies notify requesting proxies
+ and RTSP clients about an overload situation. In conjunction with
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 58]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ the Retry-After header (Section 18.44), the server or proxy can
+ indicate the time after which the requesting entity can send another
+ request to the proxy or server.
+
+ There are two scopes of such 503 answers. The first scope is for an
+ established RTSP session, where the request resulting in the 503
+ response as well as the response itself carries a Session header
+ identifying the session that is suffering overload. This response
+ only applies to this particular session. The other scope is the
+ general RTSP server as identified by the host in the Request-URI.
+ Such a 503 answer with any Retry-After header applies to all requests
+ that are not session specific to that server, including a SETUP
+ request intended to create a new RTSP session.
+
+ Another scope for overload situations exists: the RTSP proxy. To
+ enable an RTSP proxy to signal that it is overloaded, or otherwise
+ unavailable and unable to handle the request, a 553 response code has
+ been defined with the meaning "Proxy Unavailable". As with servers,
+ there is a separation in response scopes between requests associated
+ with existing RTSP sessions and requests to create new sessions or
+ general proxy requests.
+
+ Simply implementing and using the 503 (Service Unavailable) and 553
+ (Proxy Unavailable) response codes is not sufficient for properly
+ handling overload situations. For instance, a simplistic approach
+ would be to send the 503 response with a Retry-After header set to a
+ fixed value. However, this can cause a situation in which multiple
+ RTSP clients again send requests to a proxy or server at roughly the
+ same time, which may again cause an overload situation. Another
+ situation would be if the "old" overload situation is not yet
+ resolved, i.e., the length indicated in the Retry-After header was
+ too short for the overload situation to subside.
+
+ An RTSP server or proxy in an overload situation must select the
+ value of the Retry-After header carefully, bearing in mind its
+ current load situation. It is REQUIRED to increase the timeout
+ period in proportion to the current load on the server, i.e., an
+ increasing workload should result in an increased length of the
+ indicated unavailability. It is REQUIRED not to send the same value
+ in the Retry-After header to all requesting proxies and clients, but
+ to add a variation to the mean value of the Retry-After header.
+
+ A more complex case may arise when a load-balancing RTSP proxy is in
+ use. This is the case when an RTSP proxy is used to select amongst a
+ set of RTSP servers to handle the requests or when multiple server
+ addresses are available for a given server name. The proxy or client
+ may receive a 503 (Service Unavailable) or 553 (Proxy Unavailable)
+ response code from one of its RTSP servers or proxies, or a TCP
+
+
+
+Schulzrinne, et al. Standards Track [Page 59]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ timeout (if the server is even unable to handle the request message).
+ The proxy or client simply retries the other addresses or configured
+ proxies, but it may also receive a 503 (Service Unavailable) or 553
+ (Proxy Unavailable) response or TCP timeouts from those addresses.
+ In such a situation, where none of the RTSP servers/proxies/addresses
+ can handle the request, the RTSP agent has to wait before it can send
+ any new requests to the RTSP server. Any additional request to a
+ specific address MUST be delayed according to the Retry-After headers
+ received. For addresses where no response was received or TCP
+ timeout occurred, an initial wait timer SHOULD be set to 5 seconds.
+ That timer MUST be doubled for each additional failure to connect or
+ receive response until the value exceeds 30 minutes when the timer's
+ mean value may be set to 30 minutes. It is REQUIRED not to set the
+ same value in the timer for each scheduling, but instead to add a
+ variation to the mean value, resulting in picking a random value
+ within the range of 0.5 to 1.5 times the mean value.
+
+11. Capability Handling
+
+ This section describes the available capability-handling mechanism
+ that allows RTSP to be extended. Extensions to this version of the
+ protocol are basically done in two ways. Firstly, new headers can be
+ added. Secondly, new methods can be added. The capability-handling
+ mechanism is designed to handle both cases.
+
+ When a method is added, the involved parties can use the OPTIONS
+ method to discover whether it is supported. This is done by issuing
+ an OPTIONS request to the other party. Depending on the URI, it will
+ either apply in regard to a certain media resource, the whole server
+ in general, or simply the next hop. The OPTIONS response MUST
+ contain a Public header that declares all methods supported for the
+ indicated resource.
+
+ It is not necessary to use OPTIONS to discover support of a method,
+ as the client could simply try the method. If the receiver of the
+ request does not support the method, it will respond with an error
+ code indicating the method is either not implemented (501) or does
+ not apply for the resource (405). The choice between the two
+ discovery methods depends on the requirements of the service.
+
+ Feature tags are defined to handle functionality additions that are
+ not new methods. Each feature tag represents a certain block of
+ functionality. The amount of functionality that a feature tag
+ represents can vary significantly. For example, a feature tag can
+ represent the functionality a single RTSP header provides. Another
+ feature tag can represent much more functionality, such as the
+ "play.basic" feature tag (Section 11.1), which represents the minimal
+ media delivery for playback implementation.
+
+
+
+Schulzrinne, et al. Standards Track [Page 60]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Feature tags are used to determine whether the client, server, or
+ proxy supports the functionality that is necessary to achieve the
+ desired service. To determine support of a feature tag, several
+ different headers can be used, each explained below:
+
+ Supported: This header is used to determine the complete set of
+ functionality that both client and server have, in general, and
+ is not dependent on a specific resource. The intended usage is
+ to determine before one needs to use a functionality that it is
+ supported. It can be used in any method, but OPTIONS is the
+ most suitable as it simultaneously determines all methods that
+ are implemented. When sending a request, the requester
+ declares all its capabilities by including all supported
+ feature tags. This results in the receiver learning the
+ requester's feature support. The receiver then includes its
+ set of features in the response.
+
+ Proxy-Supported: This header is used in a similar fashion as the
+ Supported header, but instead of giving the supported
+ functionality of the client or server, it provides both the
+ requester and the responder a view of the common functionality
+ supported in general by all members of the proxy chain between
+ the client and server; it does not depend on the resource.
+ Proxies are required to add this header whenever the Supported
+ header is present, but proxies may also add it independently of
+ the requester.
+
+ Require: This header can be included in any request where the
+ endpoint, i.e., the client or server, is required to understand
+ the feature to correctly perform the request. This can, for
+ example, be a SETUP request, where the server is required to
+ understand a certain parameter to be able to set up the media
+ delivery correctly. Ignoring this parameter would not have the
+ desired effect and is not acceptable. Therefore, the endpoint
+ receiving a request containing a Require MUST negatively
+ acknowledge any feature that it does not understand and not
+ perform the request. The response in cases where features are
+ not supported is 551 (Option Not Supported). Also, the
+ features that are not supported are given in the Unsupported
+ header in the response.
+
+ Proxy-Require: This header has the same purpose and behavior as
+ Require except that it only applies to proxies and not the
+ endpoint. Features that need to be supported by both proxies
+ and endpoints need to be included in both the Require and
+ Proxy-Require header.
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 61]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Unsupported: This header is used in a 551 (Option Not Supported)
+ error response, to indicate which features were not supported.
+ Such a response is only the result of the usage of the Require
+ or Proxy-Require headers where one or more features were not
+ supported. This information allows the requester to make the
+ best of situations as it knows which features are not
+ supported.
+
+11.1. Feature Tag: play.basic
+
+ An implementation supporting all normative parts of this
+ specification for the setup and control of playback of media uses the
+ feature tag "play.basic" to indicate this support. The appendices
+ (starting with letters) are not part of the functionality included in
+ the feature tag unless the appendix is explicitly specified in a main
+ section as being a required appendix.
+
+ Note: This feature tag does not mandate any media delivery
+ protocol, such as RTP.
+
+ In RTSP 1.0, there was a minimal implementation section. However,
+ that was not consistent with the rest of the specification. So,
+ rather than making an attempt to explicitly enumerate the features
+ for play.basic, this specification has to be taken as a whole and
+ the necessary features normatively defined as being required are
+ included.
+
+12. Pipelining Support
+
+ Pipelining is a general method to improve performance of request/
+ response protocols by allowing the requesting agent to have more than
+ one request outstanding and to send them over the same persistent
+ connection. For RTSP, where the relative order of requests will
+ matter, it is important to maintain the order of the requests.
+ Because of this, the responding agent MUST process the incoming
+ requests in their sending order. The sending order can be determined
+ by the CSeq header and its sequence number. For TCP, the delivery
+ order will be the same, between two agents, as the sending order.
+ The processing of the request MUST also have been finished before
+ processing the next request from the same agent. The responses MUST
+ be sent in the order the requests were processed.
+
+ RTSP 2.0 has extended support for pipelining beyond the capabilities
+ in RTSP 1.0. As a major improvement, all requests involved in
+ setting up and initiating media delivery can now be pipelined,
+ indicated by the Pipelined-Request header (see Section 18.33). This
+ header allows a client to request that two or more requests be
+ processed in the same RTSP session context that the first request
+
+
+
+Schulzrinne, et al. Standards Track [Page 62]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ creates. In other words, a client can request that two or more media
+ streams be set up and then played without needing to wait for a
+ single response. This speeds up the initial start-up time for an
+ RTSP session by at least one RTT.
+
+ If a pipelined request builds on the successful completion of one or
+ more prior requests, the requester must verify that all requests were
+ executed as expected. A common example will be two SETUP requests
+ and a PLAY request. In case one of the SETUP requests fails
+ unexpectedly, the PLAY request can still be successfully executed.
+ However, the resulting presentation will not be as expected by the
+ requesting client, as only a single media instead of two will be
+ played. In this case, the client can send a PAUSE request, correct
+ the failing SETUP request, and then request it be played.
+
+13. Method Definitions
+
+ The method indicates what is to be performed on the resource
+ identified by the Request-URI. The method name is case sensitive.
+ New methods may be defined in the future. Method names MUST NOT
+ start with a $ character (decimal 36) and MUST be a token as defined
+ by the ABNF [RFC5234] in Section 20. The methods are summarized in
+ Table 7.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 63]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ +---------------+-----------+--------+-------------+-------------+
+ | method | direction | object | Server req. | Client req. |
+ +---------------+-----------+--------+-------------+-------------+
+ | DESCRIBE | C -> S | P,S | recommended | recommended |
+ | | | | | |
+ | GET_PARAMETER | C -> S | P,S | optional | optional |
+ | | | | | |
+ | | S -> C | P,S | optional | optional |
+ | | | | | |
+ | OPTIONS | C -> S | P,S | required | required |
+ | | | | | |
+ | | S -> C | P,S | optional | optional |
+ | | | | | |
+ | PAUSE | C -> S | P,S | required | required |
+ | | | | | |
+ | PLAY | C -> S | P,S | required | required |
+ | | | | | |
+ | PLAY_NOTIFY | S -> C | P,S | required | required |
+ | | | | | |
+ | REDIRECT | S -> C | P,S | optional | required |
+ | | | | | |
+ | SETUP | C -> S | S | required | required |
+ | | | | | |
+ | SET_PARAMETER | C -> S | P,S | required | optional |
+ | | | | | |
+ | | S -> C | P,S | optional | optional |
+ | | | | | |
+ | TEARDOWN | C -> S | P,S | required | required |
+ | | | | | |
+ | | S -> C | P | required | required |
+ +---------------+-----------+--------+-------------+-------------+
+
+ Table 7: Overview of RTSP Methods
+
+ Note on Table 7: This table covers RTSP methods, their direction,
+ and on what objects (P: presentation, S: stream) they operate.
+ Further, it indicates whether a server or a client implementation
+ is required (mandatory), recommended, or optional.
+
+ Further note on Table 7: the GET_PARAMETER is optional. For
+ example, a fully functional server can be built to deliver media
+ without any parameters. However, SET_PARAMETER is required, i.e.,
+ mandatory to implement for the server; this is due to its usage
+ for keep-alive. PAUSE is required because it is the only way of
+ leaving the Play state without terminating the whole session.
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 64]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ If an RTSP agent does not support a particular method, it MUST return
+ a 501 (Not Implemented) response code and the requesting RTSP agent,
+ in turn, SHOULD NOT try this method again for the given agent/
+ resource combination. An RTSP proxy whose main function is to log or
+ audit and not modify transport or media handling in any way MAY
+ forward RTSP messages with unknown methods. Note that the proxy
+ still needs to perform the minimal required processing, like adding
+ the Via header.
+
+13.1. OPTIONS
+
+ The semantics of the RTSP OPTIONS method is similar to that of the
+ HTTP OPTIONS method described in Section 4.3.7 of [RFC7231].
+ However, in RTSP, OPTIONS is bidirectional in that a client can send
+ the request to a server and vice versa. A client MUST implement the
+ capability to send an OPTIONS request and a server or a proxy MUST
+ implement the capability to respond to an OPTIONS request. In
+ addition to this "MUST-implement" functionality, clients, servers and
+ proxies MAY provide support both for sending OPTIONS requests and for
+ generating responses to the requests.
+
+ An OPTIONS request may be issued at any time. Such a request does
+ not modify the session state. However, it may prolong the session
+ lifespan (see below). The URI in an OPTIONS request determines the
+ scope of the request and the corresponding response. If the Request-
+ URI refers to a specific media resource on a given host, the scope is
+ limited to the set of methods supported for that media resource by
+ the indicated RTSP agent. A Request-URI with only the host address
+ limits the scope to the specified RTSP agent's general capabilities
+ without regard to any specific media. If the Request-URI is an
+ asterisk ("*"), the scope is limited to the general capabilities of
+ the next hop (i.e., the RTSP agent in direct communication with the
+ request sender).
+
+ Regardless of the scope of the request, the Public header MUST always
+ be included in the OPTIONS response, listing the methods that are
+ supported by the responding RTSP agent. In addition, if the scope of
+ the request is limited to a media resource, the Allow header MUST be
+ included in the response to enumerate the set of methods that are
+ allowed for that resource unless the set of methods completely
+ matches the set in the Public header. If the given resource is not
+ available, the RTSP agent SHOULD return an appropriate response code,
+ such as 3rr or 4xx. The Supported header MAY be included in the
+ request to query the set of features that are supported by the
+ responding RTSP agent.
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 65]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ The OPTIONS method can be used to keep an RTSP session alive.
+ However, this is not the preferred way of session keep-alive
+ signaling; see Section 18.49. An OPTIONS request intended for
+ keeping alive an RTSP session MUST include the Session header with
+ the associated session identifier. Such a request SHOULD also use
+ the media or the aggregated control URI as the Request-URI.
+
+ Example:
+
+ C->S: OPTIONS rtsp://server.example.com RTSP/2.0
+ CSeq: 1
+ User-Agent: PhonyClient/1.2
+ Proxy-Require: gzipped-messages
+ Supported: play.basic
+
+ S->C: RTSP/2.0 200 OK
+ CSeq: 1
+ Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, OPTIONS
+ Supported: play.basic, setup.rtp.rtcp.mux, play.scale
+ Server: PhonyServer/1.1
+
+
+ Note that the "gzipped-messages" feature tag in the Proxy-Require is
+ a fictitious feature.
+
+13.2. DESCRIBE
+
+ The DESCRIBE method is used to retrieve the description of a
+ presentation or media object from a server. The Request-URI of the
+ DESCRIBE request identifies the media resource of interest. The
+ client MAY include the Accept header in the request to list the
+ description formats that it understands. The server MUST respond
+ with a description of the requested resource and return the
+ description in the message body of the response, if the DESCRIBE
+ method request can be successfully fulfilled. The DESCRIBE reply-
+ response pair constitutes the media initialization phase of RTSP.
+
+ The DESCRIBE response SHOULD contain all media initialization
+ information for the resource(s) that it describes. Servers SHOULD
+ NOT use the DESCRIBE response as a means of media indirection by
+ having the description point at another server; instead, using the
+ 3rr responses is RECOMMENDED.
+
+ By forcing a DESCRIBE response to contain all media initialization
+ information for the set of streams that it describes, and
+ discouraging the use of DESCRIBE for media indirection, any
+ looping problems can be avoided that might have resulted from
+ other approaches.
+
+
+
+Schulzrinne, et al. Standards Track [Page 66]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Example:
+
+ C->S: DESCRIBE rtsp://server.example.com/fizzle/foo RTSP/2.0
+ CSeq: 312
+ User-Agent: PhonyClient/1.2
+ Accept: application/sdp, application/example
+
+ S->C: RTSP/2.0 200 OK
+ CSeq: 312
+ Date: Thu, 23 Jan 1997 15:35:06 GMT
+ Server: PhonyServer/1.1
+ Content-Base: rtsp://server.example.com/fizzle/foo/
+ Content-Type: application/sdp
+ Content-Length: 358
+
+ v=0
+ o=MNobody 2890844526 2890842807 IN IP4 192.0.2.46
+ s=SDP Seminar
+ i=A Seminar on the session description protocol
+ u=http://www.example.com/lectures/sdp.ps
+ e=seminar@example.com (Seminar Management)
+ c=IN IP4 0.0.0.0
+ a=control:*
+ t=2873397496 2873404696
+ m=audio 3456 RTP/AVP 0
+ a=control:audio
+ m=video 2232 RTP/AVP 31
+ a=control:video
+
+ Media initialization is a requirement for any RTSP-based system, but
+ the RTSP specification does not dictate that this is required to be
+ done via the DESCRIBE method. There are three ways that an RTSP
+ client may receive initialization information:
+
+ o via an RTSP DESCRIBE request
+
+ o via some other protocol (HTTP, email attachment, etc.)
+
+ o via some form of user interface
+
+ If a client obtains a valid description from an alternate source, the
+ client MAY use this description for initialization purposes without
+ issuing a DESCRIBE request for the same media. The client should use
+ any MTag to either validate the presentation description or make the
+ session establishment conditional on being valid.
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 67]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ It is RECOMMENDED that minimal servers support the DESCRIBE method,
+ and highly recommended that minimal clients support the ability to
+ act as "helper applications" that accept a media initialization file
+ from a user interface, or other means that are appropriate to the
+ operating environment of the clients.
+
+13.3. SETUP
+
+ The description below uses the following states in a protocol state
+ machine that is related to a specific session when that session has
+ been created. The state transitions are driven by protocol
+ interactions. For additional information about the state machine,
+ see Appendix B.
+
+ Init: Initial state. No session exists.
+
+ Ready: Session is ready to start playing.
+
+ Play: Session is playing, i.e., sending media-stream data in the
+ direction S->C.
+
+ The SETUP request for a URI specifies the transport mechanism to be
+ used for the streamed media. The SETUP method may be used in two
+ different cases, namely, creating an RTSP session and changing the
+ transport parameters of media streams that are already set up. SETUP
+ can be used in all three states, Init, Ready, and Play, to change the
+ transport parameters. Additionally, Init and Ready can also be used
+ for the creation of the RTSP session. The usage of the SETUP method
+ in the Play state to add a media resource to the session is
+ unspecified.
+
+ The Transport header, see Section 18.54, specifies the media-
+ transport parameters acceptable to the client for data transmission;
+ the response will contain the transport parameters selected by the
+ server. This allows the client to enumerate, in descending order of
+ preference, the transport mechanisms and parameters acceptable to it,
+ so the server can select the most appropriate. It is expected that
+ the session description format used will enable the client to select
+ a limited number of possible configurations that are offered as
+ choices to the server. All transport-related parameters SHALL be
+ included in the Transport header; the use of other headers for this
+ purpose is NOT RECOMMENDED due to middleboxes, such as firewalls or
+ NATs.
+
+ For the benefit of any intervening firewalls, a client MUST indicate
+ the known transport parameters, even if it has no influence over
+ these parameters, for example, where the server advertises a fixed-
+ multicast address as destination.
+
+
+
+Schulzrinne, et al. Standards Track [Page 68]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Since SETUP includes all transport initialization information,
+ firewalls and other intermediate network devices (which need this
+ information) are spared the more arduous task of parsing the
+ DESCRIBE response, which has been reserved for media
+ initialization.
+
+ The client MUST include the Accept-Ranges header in the request,
+ indicating all supported unit formats in the Range header. This
+ allows the server to know which formats it may use in future session-
+ related responses, such as a PLAY response without any range in the
+ request. If the client does not support a time format necessary for
+ the presentation, the server MUST respond using 456 (Header Field Not
+ Valid for Resource) and include the Accept-Ranges header with the
+ range unit formats supported for the resource.
+
+ In a SETUP response, the server MUST include the Accept-Ranges header
+ (see Section 18.5) to indicate which time formats are acceptable to
+ use for this media resource.
+
+ The SETUP 200 OK response MUST include the Media-Properties header
+ (see Section 18.29). The combination of the parameters of the Media-
+ Properties header indicates the nature of the content present in the
+ session (see also Section 4.7). For example, a live stream with time
+ shifting is indicated by
+
+ o Random access set to Random-Access,
+
+ o Content Modifications set to Time-Progressing, and
+
+ o Retention set to Time-Duration (with specific recording window
+ time value).
+
+ The SETUP 200 OK response MUST include the Media-Range header (see
+ Section 18.30) if the media is Time-Progressing.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 69]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ A basic example for SETUP:
+
+ C->S: SETUP rtsp://example.com/foo/bar/baz.rm RTSP/2.0
+ CSeq: 302
+ Transport: RTP/AVP;unicast;dest_addr=":4588"/":4589",
+ RTP/AVP/TCP;unicast;interleaved=0-1
+ Accept-Ranges: npt, clock
+ User-Agent: PhonyClient/1.2
+
+ S->C: RTSP/2.0 200 OK
+ CSeq: 302
+ Date: Thu, 23 Jan 1997 15:35:06 GMT
+ Server: PhonyServer/1.1
+ Session: QKyjN8nt2WqbWw4tIYof52;timeout=60
+ Transport: RTP/AVP;unicast;dest_addr="192.0.2.53:4588"/
+ "192.0.2.53:4589"; src_addr="198.51.100.241:6256"/
+ "198.51.100.241:6257"; ssrc=2A3F93ED
+ Accept-Ranges: npt
+ Media-Properties: Random-Access=3.2, Time-Progressing,
+ Time-Duration=3600.0
+ Media-Range: npt=0-2893.23
+
+ In the above example, the client wants to create an RTSP session
+ containing the media resource "rtsp://example.com/foo/bar/baz.rm".
+ The transport parameters acceptable to the client are either RTP/AVP/
+ UDP (UDP per default) to be received on client port 4588 and 4589 at
+ the address the RTSP setup connection comes from or RTP/AVP
+ interleaved on the RTSP control channel. The server selects the
+ RTP/AVP/UDP transport and adds the address and ports it will send and
+ receive RTP and RTCP from, and the RTP SSRC that will be used by the
+ server.
+
+ The server MUST generate a session identifier in response to a
+ successful SETUP request unless a SETUP request to a server includes
+ a session identifier or a Pipelined-Requests header referencing an
+ existing session context. In that latter case, the server MUST
+ bundle this SETUP request into the existing session (aggregated
+ session) or return a 459 (Aggregate Operation Not Allowed) error code
+ (see Section 17.4.23). An aggregate control URI MUST be used to
+ control an aggregated session. This URI MUST be different from the
+ stream control URIs of the individual media streams included in the
+ aggregate (see Section 13.4.2 for aggregated sessions and for the
+ particular URIs see Appendix D.1.1). The aggregate control URI is to
+ be specified by the session description if the server supports
+ aggregated control and aggregated control is desired for the session.
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 70]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ However, even if aggregated control is offered, the client MAY choose
+ not to set up the session in aggregated control. If an aggregate
+ control URI is not specified in the session description, it is
+ normally an indication that non-aggregated control should be used.
+
+ The SETUP of media streams in an aggregate that has not been given an
+ aggregated control URI is unspecified.
+
+ While the session ID sometimes carries enough information for
+ aggregate control of a session, the aggregate control URI is still
+ important for some methods such as SET_PARAMETER where the control
+ URI enables the resource in question to be easily identified. The
+ aggregate control URI is also useful for proxies, enabling them to
+ route the request to the appropriate server, and for logging,
+ where it is useful to note the actual resource on which a request
+ was operating.
+
+ A session will exist until it is either removed by a TEARDOWN request
+ or is timed out by the server. The server MAY remove a session that
+ has not demonstrated liveness signs from the client(s) within a
+ certain timeout period. The default timeout value is 60 seconds; the
+ server MAY set this to a different value and indicate so in the
+ timeout field of the Session header in the SETUP response. For
+ further discussion, see Section 18.49. Signs of liveness for an RTSP
+ session include any RTSP requests from a client that contain a
+ Session header with the ID for that session, as well as RTCP sender
+ or receiver reports if RTP is used to transport the underlying media
+ stream. RTCP sender reports may, for example, be received in session
+ where the server is invited into a conference session and are thus
+ valid as a liveness indicator.
+
+ If a SETUP request on a session fails for any reason, the session
+ state, as well as transport and other parameters for associated
+ streams, MUST remain unchanged from their values as if the SETUP
+ request had never been received by the server.
+
+13.3.1. Changing Transport Parameters
+
+ A client MAY issue a SETUP request for a stream that is already set
+ up or playing in the session to change transport parameters, which a
+ server MAY allow. If it does not allow the changing of parameters,
+ it MUST respond with error 455 (Method Not Valid in This State). The
+ reasons to support changing transport parameters include allowing
+ application-layer mobility and flexibility to utilize the best
+ available transport as it becomes available. If a client receives a
+ 455 error when trying to change transport parameters while the server
+ is in Play state, it MAY try to put the server in Ready state using
+ PAUSE before issuing the SETUP request again. If that also fails,
+
+
+
+Schulzrinne, et al. Standards Track [Page 71]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ the changing of transport parameters will require that the client
+ perform a TEARDOWN of the affected media and then set it up again.
+ For an aggregated session, not tearing down all the media at the same
+ time will avoid the creation of a new session.
+
+ All transport parameters MAY be changed. However, the primary usage
+ expected is to either change the transport protocol completely, like
+ switching from Interleaved TCP mode to UDP or vice versa, or to
+ change the delivery address.
+
+ In a SETUP response for a request to change the transport parameters
+ while in Play state, the server MUST include the Range header to
+ indicate at what point the new transport parameters will be used.
+ Further, if RTP is used for delivery, the server MUST also include
+ the RTP-Info header to indicate at what timestamp and RTP sequence
+ number the change will take place. If both RTP-Info and Range are
+ included in the response, the "rtp_time" parameter and start point in
+ the Range header MUST be for the corresponding time, i.e., be used in
+ the same way as for PLAY to ensure the correct synchronization
+ information is available.
+
+ If the transport-parameters change that happened while in Play state
+ results in a change of synchronization-related information, for
+ example, changing RTP SSRC, the server MUST include the necessary
+ synchronization information in the SETUP response. However, the
+ server SHOULD avoid changing the synchronization information if
+ possible.
+
+13.4. PLAY
+
+ This section describes the usage of the PLAY method in general, for
+ aggregated sessions, and in different usage scenarios.
+
+13.4.1. General Usage
+
+ The PLAY method tells the server to start sending data via the
+ mechanism specified in SETUP and which part of the media should be
+ played out. PLAY requests are valid when the session is in Ready or
+ Play state. A PLAY request MUST include a Session header to indicate
+ to which session the request applies.
+
+ Upon receipt of the PLAY request, the server MUST position the normal
+ play time to the beginning of the range specified in the received
+ Range header, within the limits of the media resource and in
+ accordance with the Seek-Style header (Section 18.47). It MUST
+ deliver stream data until the end of the range if given, until a new
+ PLAY request is received, until a PAUSE request (Section 13.5) is
+ received, or until the end of the media is reached. If no Range
+
+
+
+Schulzrinne, et al. Standards Track [Page 72]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ header is present in the PLAY request, the server SHALL play from
+ current pause point until the end of media. The pause point defaults
+ at session start to the beginning of the media. For media that is
+ time-progressing and has no retention, the pause point will always be
+ set equal to NPT "now", i.e., the current delivery point. The pause
+ point may also be set to a particular point in the media by the PAUSE
+ method; see Section 13.6. The pause point for media that is
+ currently playing is equal to the current media position. For time-
+ progressing media with time-limited retention, if the pause point
+ represents a position that is older than what is retained by the
+ server, the pause point will be moved to the oldest retained
+ position.
+
+ What range values are valid depends on the type of content. For
+ content that isn't time-progressing, the range value is valid if the
+ given range is part of any media within the aggregate. In other
+ words, the valid media range for the aggregate is the union of all of
+ the media components in the aggregate. If a given range value points
+ outside of the media, the response MUST be the 457 (Invalid Range)
+ error code and include the Media-Range header (Section 18.30) with
+ the valid range for the media. Except for time-progressing content
+ where the client requests a start point prior to what is retained,
+ the start point is adjusted to the oldest retained content. For a
+ start point that is beyond the media front edge, i.e., beyond the
+ current value for "now", the server SHALL adjust the start value to
+ the current front edge. The Range header's stop point value may
+ point beyond the current media edge. In that case, the server SHALL
+ deliver media from the requested (and possibly adjusted) start point
+ until the first of either the provided stop point or the end of the
+ media. Please note that if one simply wants to play from a
+ particular start point until the end of media, using a Range header
+ with an implicit stop point is RECOMMENDED.
+
+ If a client requests to start playing at the end of media, either
+ explicitly with a Range header or implicitly with a pause point that
+ is at the end of media, a 457 (Invalid Range) error MUST be sent and
+ include the Media-Range header (Section 18.30). It is specified
+ below that the Range header also must be included in the response and
+ that it will carry the pause point in the media, in the case of the
+ session being in Ready State. Note that this also applies if the
+ pause point or requested start point is at the beginning of the media
+ and a Scale header (Section 18.46) is included with a negative value
+ (playing backwards).
+
+ For media with random access properties, a client may indicate which
+ policy for start point selection the server should use. This is done
+ by including the Seek-Style header (Section 18.47) in the PLAY
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 73]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ request. The Seek-Style applied will affect the content of the Range
+ header as it will be adjusted to indicate from what point the media
+ actually is delivered.
+
+ A client desiring to play the media from the beginning MUST send a
+ PLAY request with a Range header pointing at the beginning, e.g.,
+ "npt=0-". If a PLAY request is received without a Range header and
+ media delivery has stopped at the end, the server SHOULD respond with
+ a 457 (Invalid Range) error response. In that response, the current
+ pause point MUST be included in a Range header.
+
+ All range specifiers in this specification allow for ranges with an
+ implicit start point (e.g., "npt=-30"). When used in a PLAY request,
+ the server treats this as a request to start or resume delivery from
+ the current pause point, ending at the end time specified in the
+ Range header. If the pause point is located later than the given end
+ value, a 457 (Invalid Range) response MUST be returned.
+
+ The example below will play seconds 10 through 25. It also requests
+ that the server deliver media from the first random access point
+ prior to the indicated start point.
+
+ C->S: PLAY rtsp://audio.example.com/audio RTSP/2.0
+ CSeq: 835
+ Session: ULExwZCXh2pd0xuFgkgZJW
+ Range: npt=10-25
+ Seek-Style: RAP
+ User-Agent: PhonyClient/1.2
+
+ Servers MUST include a Range header in any PLAY response, even if no
+ Range header was present in the request. The response MUST use the
+ same format as the request's Range header contained. If no Range
+ header was in the request, the format used in any previous PLAY
+ request within the session SHOULD be used. If no format has been
+ indicated in a previous request, the server MAY use any time format
+ supported by the media and indicated in the Accept-Ranges header in
+ the SETUP request. It is RECOMMENDED that NPT is used if supported
+ by the media.
+
+ For any error response to a PLAY request, the server's response
+ depends on the current session state. If the session is in Ready
+ state, the current pause point is returned using a Range header with
+ the pause point as the explicit start point and an implicit stop
+ point. For time-progressing content, where the pause-point moves
+ with real-time due to limited retention, the current pause point is
+ returned. For sessions in Play state, the current playout point and
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 74]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ the remaining parts of the range request are returned. For any media
+ with retention longer than 0 seconds, the currently valid Media-Range
+ header SHALL also be included in the response.
+
+ A PLAY response MAY include a header carrying synchronization
+ information. As the information necessary is dependent on the media-
+ transport format, further rules specifying the header and its usage
+ are needed. For RTP the RTP-Info header is specified, see
+ Section 18.45, and used in the following example.
+
+ Here is a simple example for a single audio stream where the client
+ requests the media starting from 3.52 seconds and to the end. The
+ server sends a 200 OK response with the actual play time, which is 10
+ ms prior (3.51), and the RTP-Info header that contains the necessary
+ parameters for the RTP stack.
+
+ C->S: PLAY rtsp://example.com/audio RTSP/2.0
+ CSeq: 836
+ Session: ULExwZCXh2pd0xuFgkgZJW
+ Range: npt=3.52-
+ User-Agent: PhonyClient/1.2
+
+ S->C: RTSP/2.0 200 OK
+ CSeq: 836
+ Date: Thu, 23 Jan 1997 15:35:06 GMT
+ Server: PhonyServer/1.0
+ Range: npt=3.51-324.39
+ Seek-Style: First-Prior
+ Session: ULExwZCXh2pd0xuFgkgZJW
+ RTP-Info:url="rtsp://example.com/audio"
+ ssrc=0D12F123:seq=14783;rtptime=2345962545
+
+ S->C: RTP Packet TS=2345962545 => NPT=3.51
+ Media duration=0.16 seconds
+
+ The server replies with the actual start point that will be
+ delivered. This may differ from the requested range if alignment of
+ the requested range to valid frame boundaries is required for the
+ media source. Note that some media streams in an aggregate may need
+ to be delivered from even earlier points. Also, some media formats
+ have a very long duration per individual data unit; therefore, it
+ might be necessary for the client to parse the data unit, and select
+ where to start. The server SHALL also indicate which policy it uses
+ for selecting the actual start point by including a Seek-Style
+ header.
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 75]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ In the following example, the client receives the first media packet
+ that stretches all the way up and past the requested playtime. Thus,
+ it is the client's decision whether to render to the user the time
+ between 3.52 and 7.05 or to skip it. In most cases, it is probably
+ most suitable not to render that time period.
+
+ C->S: PLAY rtsp://example.com/audio RTSP/2.0
+ CSeq: 836
+ Session: ZGGyCJOs8xaLkdNK2dmxQO
+ Range: npt=7.05-
+ User-Agent: PhonyClient/1.2
+
+ S->C: RTSP/2.0 200 OK
+ CSeq: 836
+ Date: Thu, 23 Jan 1997 15:35:06 GMT
+ Server: PhonyServer/1.0
+ Session: ZGGyCJOs8xaLkdNK2dmxQO
+ Range: npt=3.52-
+ Seek-Style: First-Prior
+ RTP-Info:url="rtsp://example.com/audio"
+ ssrc=0D12F123:seq=14783;rtptime=2345962545
+
+ S->C: RTP Packet TS=2345962545 => NPT=3.52
+ Duration=4.15 seconds
+
+ After playing the desired range, the presentation does NOT change to
+ the Ready state, media delivery simply stops. If it is necessary to
+ put the stream into the Ready state, a PAUSE request MUST be issued.
+ A PLAY request while the stream is still in the Play state is legal
+ and can be issued without an intervening PAUSE request. Such a
+ request MUST replace the current PLAY action with the new one
+ requested, i.e., being handled in the same way as if as the request
+ was received in Ready state. In the case that the range in the Range
+ header has an implicit start time ("-endtime"), the server MUST
+ continue to play from where it currently was until the specified
+ endpoint. This is useful to change the end to at another point than
+ in the previous request.
+
+ The following example plays the whole presentation starting at SMPTE
+ time code 0:10:20 until the end of the clip. Note: the RTP-Info
+ headers have been broken into several lines, where subsequent lines
+ start with whitespace as allowed by the syntax.
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 76]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ C->S: PLAY rtsp://audio.example.com/twister.en RTSP/2.0
+ CSeq: 833
+ Session: N465Wvsv0cjUy6tLqINkcf
+ Range: smpte=0:10:20-
+ User-Agent: PhonyClient/1.2
+
+ S->C: RTSP/2.0 200 OK
+ CSeq: 833
+ Date: Thu, 23 Jan 1997 15:35:06 GMT
+ Session: N465Wvsv0cjUy6tLqINkcf
+ Server: PhonyServer/1.0
+ Range: smpte=0:10:22-0:15:45
+ Seek-Style: Next
+ RTP-Info:url="rtsp://example.com/twister.en"
+ ssrc=0D12F123:seq=14783;rtptime=2345962545
+
+ For playing back a recording of a live presentation, it may be
+ desirable to use clock units:
+
+ C->S: PLAY rtsp://audio.example.com/meeting.en RTSP/2.0
+ CSeq: 835
+ Session: N465Wvsv0cjUy6tLqINkcf
+ Range: clock=19961108T142300Z-19961108T143520Z
+ User-Agent: PhonyClient/1.2
+
+ S->C: RTSP/2.0 200 OK
+ CSeq: 835
+ Date: Thu, 23 Jan 1997 15:35:06 GMT
+ Session: N465Wvsv0cjUy6tLqINkcf
+ Server: PhonyServer/1.0
+ Range: clock=19961108T142300Z-19961108T143520Z
+ Seek-Style: Next
+ RTP-Info:url="rtsp://example.com/meeting.en"
+ ssrc=0D12F123:seq=53745;rtptime=484589019
+
+13.4.2. Aggregated Sessions
+
+ PLAY requests can operate on sessions controlling a single media
+ stream and on aggregated sessions controlling multiple media streams.
+
+ In an aggregated session, the PLAY request MUST contain an aggregated
+ control URI. A server MUST respond with a 460 error (Only Aggregate
+ Operation Allowed) if the client PLAY Request-URI is for a single
+ media. The media in an aggregate MUST be played in sync. If a
+ client wants individual control of the media, it needs to use
+ separate RTSP sessions for each media.
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 77]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ For aggregated sessions where the initial SETUP request (creating a
+ session) is followed by one or more additional SETUP requests, a PLAY
+ request MAY be pipelined (Section 12) after those additional SETUP
+ requests without awaiting their responses. This procedure can reduce
+ the delay from the start of session establishment until media playout
+ has started with one RTT. However, a client needs to be aware that
+ using this procedure will result in the playout of the server state
+ established at the time of processing the PLAY, i.e., after the
+ processing of all the requests prior to the PLAY request in the
+ pipeline. This state may not be the intended one due to failure of
+ any of the prior requests. A client can easily determine this based
+ on the responses from those requests. In case of failure, the client
+ can halt the media playout using PAUSE and try to establish the
+ intended state again before issuing another PLAY request.
+
+13.4.3. Updating Current PLAY Requests
+
+ Clients can issue PLAY requests while the stream is in Play state and
+ thus updating their request.
+
+ The important difference compared to a PLAY request in Ready state is
+ the handling of the current play point and how the Range header in
+ the request is constructed. The session is actively playing media
+ and the play point will be moving, making the exact time a request
+ will take effect hard to predict. Depending on how the PLAY header
+ appears, two different cases exist: total replacement or
+ continuation. A total replacement is signaled by having the first
+ range specification have an explicit start value, e.g., "npt=45-" or
+ "npt=45-60", in which case the server stops playout at the current
+ playout point and then starts delivering media according to the Range
+ header. This is equivalent to having the client first send a PAUSE
+ and then a new PLAY request that isn't based on the pause point. In
+ the case of continuation, the first range specifier has an implicit
+ start point and an explicit stop value (Z), e.g., "npt=-60", which
+ indicate that it MUST convert the range specifier being played prior
+ to this PLAY request (X to Y) into (X to Z) and continue as if this
+ was the request originally played. If the current delivery point is
+ beyond the stop point, the server SHALL immediately pause delivery.
+ As the request has been completed successfully, it shall be responded
+ to with a 200 OK response. A PLAY_NOTIFY with end-of-stream is also
+ sent to indicate the actual stop point. The pause point is set to
+ the requested stop point.
+
+ The following is an example of this behavior: The server has received
+ requests to play ranges 10 to 15. If the new PLAY request arrives at
+ the server 4 seconds after the previous one, it will take effect
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 78]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ while the server still plays the first range (10-15). The server
+ changes the current play to continue to 25 seconds, i.e., the
+ equivalent single request would be PLAY with "range: npt=10-25".
+
+ C->S: PLAY rtsp://example.com/fizzle/foo RTSP/2.0
+ CSeq: 834
+ Session: apzA8LnjQ5KWTdw0kUkiRh
+ Range: npt=10-15
+ User-Agent: PhonyClient/1.2
+
+ S->C: RTSP/2.0 200 OK
+ CSeq: 834
+ Date: Thu, 23 Jan 1997 15:35:06 GMT
+ Session: apzA8LnjQ5KWTdw0kUkiRh
+ Server: PhonyServer/1.0
+ Range: npt=10-15
+ Seek-Style: Next
+ RTP-Info:url="rtsp://example.com/fizzle/audiotrack"
+ ssrc=0D12F123:seq=5712;rtptime=934207921,
+ url="rtsp://example.com/fizzle/videotrack"
+ ssrc=789DAF12:seq=57654;rtptime=2792482193
+
+
+ C->S: PLAY rtsp://example.com/fizzle/foo RTSP/2.0
+ CSeq: 835
+ Session: apzA8LnjQ5KWTdw0kUkiRh
+ Range: npt=-25
+ User-Agent: PhonyClient/1.2
+
+ S->C: RTSP/2.0 200 OK
+ CSeq: 835
+ Date: Thu, 23 Jan 1997 15:35:09 GMT
+ Session: apzA8LnjQ5KWTdw0kUkiRh
+ Server: PhonyServer/1.0
+ Range: npt=14-25
+ Seek-Style: Next
+ RTP-Info:url="rtsp://example.com/fizzle/audiotrack"
+ ssrc=0D12F123:seq=5712;rtptime=934239921,
+ url="rtsp://example.com/fizzle/videotrack"
+ ssrc=789DAF12:seq=57654;rtptime=2792842193
+
+ A common use of a PLAY request while in Play state is changing the
+ scale of the media, i.e., entering or leaving fast forward or fast
+ rewind. The client can issue an updating PLAY request that is either
+ a continuation or a complete replacement, as discussed above this
+ section. Below is an example of a client that is requesting a fast
+ forward (scale = 2) without giving a stop point and then a change
+ from fast forward to regular playout (scale = 1). In the second PLAY
+
+
+
+Schulzrinne, et al. Standards Track [Page 79]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ request, the time is set explicitly to be wherever the server
+ currently plays out (npt=now-) and the server responds with the
+ actual playback point where the new scale actually takes effect
+ (npt=02:17:27.144-).
+
+ C->S: PLAY rtsp://example.com/fizzle/foo RTSP/2.0
+ CSeq: 2034
+ Session: apzA8LnjQ5KWTdw0kUkiRh
+ Range: npt=now-
+ Scale: 2.0
+ User-Agent: PhonyClient/1.2
+
+ S->C: RTSP/2.0 200 OK
+ CSeq: 2034
+ Date: Thu, 23 Jan 1997 15:35:06 GMT
+ Session: apzA8LnjQ5KWTdw0kUkiRh
+ Server: PhonyServer/1.0
+ Range: npt=02:17:21.394-
+ Seek-Style: Next
+ Scale: 2.0
+ RTP-Info:url="rtsp://example.com/fizzle/audiotrack"
+ ssrc=0D12F123:seq=5712;rtptime=934207921,
+ url="rtsp://example.com/fizzle/videotrack"
+ ssrc=789DAF12:seq=57654;rtptime=2792482193
+
+
+ [playing in fast forward and now returning to scale = 1]
+
+ C->S: PLAY rtsp://example.com/fizzle/foo RTSP/2.0
+ CSeq: 2035
+ Session: apzA8LnjQ5KWTdw0kUkiRh
+ Range: npt=now-
+ Scale: 1.0
+ User-Agent: PhonyClient/1.2
+
+ S->C: RTSP/2.0 200 OK
+ CSeq: 2035
+ Date: Thu, 23 Jan 1997 15:35:09 GMT
+ Session: apzA8LnjQ5KWTdw0kUkiRh
+ Server: PhonyServer/1.0
+ Range: npt=02:17:27.144-
+ Seek-Style: Next
+ Scale: 1.0
+ RTP-Info:url="rtsp://example.com/fizzle/audiotrack"
+ ssrc=0D12F123:seq=5712;rtptime=934239921,
+ url="rtsp://example.com/fizzle/videotrack"
+ ssrc=789DAF12:seq=57654;rtptime=2792842193
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 80]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+13.4.4. Playing On-Demand Media
+
+ On-demand media is indicated by the content of the Media-Properties
+ header in the SETUP response when (see also Section 18.29):
+
+ o the Random Access property is set to Random-Access;
+
+ o the Content Modifications property is set to Immutable;
+
+ o the Retention property is set to Unlimited or Time-Limited.
+
+ Playing on-demand media follows the general usage as described in
+ Section 13.4.1.
+
+13.4.5. Playing Dynamic On-Demand Media
+
+ Dynamic on-demand media is indicated by the content of the Media-
+ Properties header in the SETUP response when (see also
+ Section 18.29):
+
+ o the Random Access property is set to Random-Access;
+
+ o the Content Modifications property is set to Dynamic;
+
+ o the Retention property is set to Unlimited or Time-Limited.
+
+ Playing on-demand media follows the general usage as described in
+ Section 13.4.1 as long as the media has not been changed.
+
+ There are two ways for the client to be informed about changes of
+ media resources in Play state. The first being that the client will
+ receive a PLAY_NOTIFY request with the Notify-Reason header set to
+ media-properties-update (see Section 13.5.2). The client can use the
+ value of the Media-Range header to decide further actions, if the
+ Media-Range header is present in the PLAY_NOTIFY request. The second
+ way is that the client issues a GET_PARAMETER request without a body
+ but including a Media-Range header. The 200 OK response MUST include
+ the current Media-Range header (see Section 18.30).
+
+13.4.6. Playing Live Media
+
+ Live media is indicated by the content of the Media-Properties header
+ in the SETUP response when (see also Section 18.29):
+
+ o the Random Access property is set to No-Seeking;
+
+ o the Content Modifications property is set to Time-Progressing;
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 81]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ o the Retention property's Time-Duration is set to 0.0.
+
+ For live media, the SETUP 200 OK response MUST include the Media-
+ Range header (see Section 18.30).
+
+ A client MAY send PLAY requests without the Range header. If the
+ request includes the Range header, it MUST use a symbolic value
+ representing "now". For NPT, that range specification is "npt=now-".
+ The server MUST include the Range header in the response, and it MUST
+ indicate an explicit time value and not a symbolic value. In other
+ words, "npt=now-" cannot be used in the response. Instead, the time
+ since session start is recommended, expressed as an open interval,
+ e.g., "npt=96.23-". An absolute time value (clock) for the
+ corresponding time MAY be given, i.e., "clock=20030213T143205Z-".
+ The Absolute Time format can only be used if the client has shown
+ support for it using the Accept-Ranges header.
+
+13.4.7. Playing Live with Recording
+
+ Certain media servers may offer recording services of live sessions
+ to their clients. This recording would normally be from the
+ beginning of the media session. Clients can randomly access the
+ media between now and the beginning of the media session. This live
+ media with recording is indicated by the content of the Media-
+ Properties header in the SETUP response when (see also
+ Section 18.29):
+
+ o the Random Access property is set to Random-Access;
+
+ o the Content Modifications property is set to Time-Progressing;
+
+ o the Retention property is set to Time-Limited or Unlimited
+
+ The SETUP 200 OK response MUST include the Media-Range header (see
+ Section 18.30) for this type of media. For live media with
+ recording, the Range header indicates the current delivery point in
+ the media and the Media-Range header indicates the currently
+ available media window around the current time. This window can
+ cover recorded content in the past (seen from current time in the
+ media) or recorded content in the future (seen from current time in
+ the media). The server adjusts the delivery point to the requested
+ border of the window. If the client requests a delivery point that
+ is located outside the recording window, e.g., if the requested point
+ is too far in the past, the server selects the oldest point in the
+ recording. The considerations in Section 13.5.3 apply if a client
+ requests delivery with scale (Section 18.46) values other than 1.0
+ (normal playback rate) while delivering live media with recording.
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 82]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+13.4.8. Playing Live with Time-Shift
+
+ Certain media servers may offer time-shift services to their clients.
+ This time shift records a fixed interval in the past, i.e., a sliding
+ window recording mechanism, but not past this interval. Clients can
+ randomly access the media between now and the interval. This live
+ media with recording is indicated by the content of the Media-
+ Properties header in the SETUP response when (see also
+ Section 18.29):
+
+ o the Random Access property is set to Random-Access;
+
+ o the Content Modifications property is set to Time-Progressing;
+
+ o the Retention property is set to Time-Duration and a value
+ indicating the recording interval (>0).
+
+ The SETUP 200 OK response MUST include the Media-Range header (see
+ Section 18.30) for this type of media. For live media with
+ recording, the Range header indicates the current time in the media
+ and the Media-Range header indicates a window around the current
+ time. This window can cover recorded content in the past (seen from
+ current time in the media) or recorded content in the future (seen
+ from current time in the media). The server adjusts the play point
+ to the requested border of the window, if the client requests a play
+ point that is located outside the recording windows, e.g., if
+ requested too far in the past, the server selects the oldest range in
+ the recording. The considerations in Section 13.5.3 apply if a
+ client requests delivery using a scale (Section 18.46) value other
+ than 1.0 (normal playback rate) while delivering live media with
+ time-shift.
+
+13.5. PLAY_NOTIFY
+
+ The PLAY_NOTIFY method is issued by a server to inform a client about
+ an asynchronous event for a session in Play state. The Session
+ header MUST be presented in a PLAY_NOTIFY request and indicates the
+ scope of the request. Sending of PLAY_NOTIFY requests requires a
+ persistent connection between server and client; otherwise, there is
+ no way for the server to send this request method to the client.
+
+ PLAY_NOTIFY requests have an end-to-end (i.e., server-to-client)
+ scope, as they carry the Session header, and apply only to the given
+ session. The client SHOULD immediately return a response to the
+ server.
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 83]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ PLAY_NOTIFY requests MAY use both an aggregate control URI and
+ individual media resource URIs, depending on the scope of the
+ notification. This scope may have important distinctions for
+ aggregated sessions, and each reason for a PLAY_NOTIFY request needs
+ to specify the interpretation as well as if aggregated control URIs
+ or individual URIs may be used in requests.
+
+ PLAY_NOTIFY requests can be used with a message body, depending on
+ the value of the Notify-Reason header. It is described in the
+ particular section for each Notify-Reason if a message body is used.
+ However, currently there is no Notify-Reason that allows the use of a
+ message body. In this case, there is a need to obey some limitations
+ when adding new Notify-Reasons that intend to use a message body: the
+ server can send any type of message body, but it is not ensured that
+ the client can understand the received message body. This is related
+ to DESCRIBE (see Section 13.2 ); but, in this particular case, the
+ client can state its acceptable message bodies by using the Accept
+ header. In the case of PLAY_NOTIFY, the server does not know which
+ message bodies are understood by the client.
+
+ The Notify-Reason header (see Section 18.32) specifies the reason why
+ the server sends the PLAY_NOTIFY request. This is extensible and new
+ reasons can be added in the future (see Section 22.8). In case the
+ client does not understand the reason for the notification, it MUST
+ respond with a 465 (Notification Reason Unknown) (Section 17.4.29)
+ error code. This document defines how servers can send PLAY_NOTIFY
+ with Notify-Reason values of these types:
+
+ o end-of-stream (see Section 13.5.1);
+
+ o media-properties-update (see Section 13.5.2);
+
+ o scale-change (see Section 13.5.3).
+
+13.5.1. End-of-Stream
+
+ A PLAY_NOTIFY request with the Notify-Reason header set to end-of-
+ stream indicates the completion or near completion of the PLAY
+ request and the ending delivery of the media stream(s). The request
+ MUST NOT be issued unless the server is in the Play state. The end
+ of the media stream delivery notification may be used either to
+ indicate a successful completion of the PLAY request currently being
+ served or to indicate some error resulting in failure to complete the
+ request. The Request-Status header (Section 18.42) MUST be included
+ to indicate which request the notification is for and its completion
+ status. The message response status codes (Section 8.1.1) are used
+ to indicate how the PLAY request concluded. The sender of a
+ PLAY_NOTIFY MAY issue an updated PLAY_NOTIFY, in the case of a
+
+
+
+Schulzrinne, et al. Standards Track [Page 84]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ PLAY_NOTIFY sent with wrong information. For instance, a PLAY_NOTIFY
+ was issued before reaching the end-of-stream, but some error occurred
+ resulting in that the previously sent PLAY_NOTIFY contained a wrong
+ time when the stream will end. In this case, a new PLAY_NOTIFY MUST
+ be sent including the correct status for the completion and all
+ additional information.
+
+ PLAY_NOTIFY requests with the Notify-Reason header set to end-of-
+ stream MUST include a Range header and the Scale header if the scale
+ value is not 1. The Range header indicates the point in the stream
+ or streams where delivery is ending with the timescale that was used
+ by the server in the PLAY response for the request being fulfilled.
+ The server MUST NOT use the "now" constant in the Range header; it
+ MUST use the actual numeric end position in the proper timescale.
+ When end-of-stream notifications are issued prior to having sent the
+ last media packets, this is made evident because the end time in the
+ Range header is beyond the current time in the media being received
+ by the client, e.g., "npt=-15", if npt is currently at 14.2 seconds.
+ The Scale header is to be included so that it is evident if the media
+ timescale is moving backwards or has a non-default pace. The end-of-
+ stream notification does not prevent the client from sending a new
+ PLAY request.
+
+ If RTP is used as media transport, an RTP-Info header MUST be
+ included, and the RTP-Info header MUST indicate the last sequence
+ number in the sequence parameter.
+
+ For an RTSP Session where media resources are under aggregated
+ control, the media resources will normally end at approximately the
+ same time, although some small differences may exist, on the scale of
+ a few hundred milliseconds. In those cases, an RTSP session under
+ aggregated control SHOULD send only a single PLAY_NOTIFY request. By
+ using the aggregate control URI in the PLAY_NOTIFY request, the RTSP
+ server indicates that this applies to all media resources within the
+ session. In cases in which RTP is used for media delivery,
+ corresponding RTP-Info needs to be included for all media resources.
+ In cases where one or more media resources have a significantly
+ shorter duration than some other resources in the aggregated session,
+ the server MAY send end-of-stream notifications using individual
+ media resource URIs to indicate to agents that there will be no more
+ media for this particular media resource related to the current
+ active PLAY request. In such cases, when the remaining media
+ resources come to the end of the stream, they MUST send a PLAY_NOTIFY
+ request using the aggregate control URI to indicate that no more
+ resources remain.
+
+ A PLAY_NOTIFY request with Notify-Reason header set to end-of-stream
+ MUST NOT carry a message body.
+
+
+
+Schulzrinne, et al. Standards Track [Page 85]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ This example request notifies the client about a future end-of-stream
+ event:
+
+ S->C: PLAY_NOTIFY rtsp://example.com/fizzle/foo RTSP/2.0
+ CSeq: 854
+ Notify-Reason: end-of-stream
+ Request-Status: cseq=853 status=200 reason="OK"
+ Range: npt=-145
+ RTP-Info:url="rtsp://example.com/fizzle/foo/audio"
+ ssrc=0D12F123:seq=14783;rtptime=2345962545,
+ url="rtsp://example.com/fizzle/video"
+ ssrc=789DAF12:seq=57654;rtptime=2792482193
+ Session: CDtUJfDQXJWtJ7Iqua2xOi
+ Date: Mon, 08 Mar 2010 13:37:16 GMT
+
+ C->S: RTSP/2.0 200 OK
+ CSeq: 854
+ User-Agent: PhonyClient/1.2
+ Session: CDtUJfDQXJWtJ7Iqua2xOi
+
+13.5.2. Media-Properties-Update
+
+ A PLAY_NOTIFY request with a Notify-Reason header set to media-
+ properties-update indicates an update of the media properties for the
+ given session (see Section 18.29) or the available media range that
+ can be played as indicated by the Media-Range header (Section 18.30).
+ PLAY_NOTIFY requests with Notify-Reason header set to media-
+ properties-update MUST include a Media-Properties and Date header and
+ SHOULD include a Media-Range header. The Media-Properties header has
+ session scope; thus, for aggregated sessions, the PLAY_NOTIFY request
+ MUST use the aggregated control URI.
+
+ This notification MUST be sent for media that are time-progressing
+ every time an event happens that changes the basis for making
+ estimates on how the available for play-back media range will
+ progress with wall clock time. In addition, it is RECOMMENDED that
+ the server send these notifications approximately every 5 minutes for
+ time-progressing content to ensure the long-term stability of the
+ client estimation and allow for clock skew detection by the client.
+ The time between notifications should be greater than 1 minute and
+ less than 2 hours. For the reasons just explained, requests MUST
+ include a Media-Range header to provide current Media duration and a
+ Range header to indicate the current playing point and any remaining
+ parts of the requested range.
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 86]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ The recommendation for sending updates every 5 minutes is due to
+ any clock skew issues. In 5 minutes, the clock skew should not
+ become too significant as this is not used for media playback and
+ synchronization, it is only for determining which content is
+ available to the user.
+
+ A PLAY_NOTIFY request with Notify-Reason header set to media-
+ properties-update MUST NOT carry a message body.
+
+ S->C: PLAY_NOTIFY rtsp://example.com/fizzle/foo RTSP/2.0
+ Date: Tue, 14 Apr 2008 15:48:06 GMT
+ CSeq: 854
+ Notify-Reason: media-properties-update
+ Session: CDtUJfDQXJWtJ7Iqua2xOi
+ Media-Properties: Time-Progressing,
+ Time-Limited=20080415T153919.36Z, Random-Access=5.0
+ Media-Range: npt=00:00:00-01:37:21.394
+ Range: npt=01:15:49.873-
+
+ C->S: RTSP/2.0 200 OK
+ CSeq: 854
+ User-Agent: PhonyClient/1.2
+ Session: CDtUJfDQXJWtJ7Iqua2xOi
+
+13.5.3. Scale-Change
+
+ The server may be forced to change the rate of media time per
+ playback time when a client requests delivery using a scale
+ (Section 18.46) value other than 1.0 (normal playback rate). For
+ time-progressing media with some retention, i.e., the server stores
+ already-sent content, a client requesting to play with scale values
+ larger than 1 may catch up with the front end of the media. The
+ server will then be unable to continue to provide content at scale
+ larger than 1 as content is only made available by the server at
+ scale = 1. Another case is when scale < 1 and the media retention is
+ Time-Duration limited. In this case, the delivery point can reach
+ the oldest media unit available, and further playback at this scale
+ becomes impossible as there will be no media available. To avoid
+ having the client lose any media, the scale will need to be adjusted
+ to the same rate at which the media is removed from the storage
+ buffer, commonly scale = 1.0.
+
+ Another case is when the content itself consists of spliced pieces or
+ is dynamically updated. In these cases, the server may be required
+ to change from one supported scale value (different than scale = 1.0)
+ to another. In this case, the server will pick the closest value and
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 87]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ inform the client of what it has picked. In these cases, the media
+ properties will also be sent, updating the supported scale values.
+ This enables a client to adjust the scale value used.
+
+ To minimize impact on playback in any of the above cases, the server
+ MUST modify the playback properties, set scale to a supportable
+ value, and continue delivery of the media. When doing this
+ modification, it MUST send a PLAY_NOTIFY message with the Notify-
+ Reason header set to "scale-change". The request MUST contain a
+ Range header with the media time when the change took effect, a Scale
+ header with the new value in use, a Session header with the
+ identifier for the session to which it applies, and a Date header
+ with the server wallclock time of the change. For time-progressing
+ content, the Media-Range and the Media-Properties headers at this
+ point in time also MUST be included. The Media-Properties header
+ MUST be included if the scale change was due to the content changing
+ what scale values ("Scales") are supported.
+
+ For media streams delivered using RTP, an RTP-Info header MUST also
+ be included. It MUST contain the rtptime parameter with a value
+ corresponding to the point of change in that media and optionally the
+ sequence number.
+
+ PLAY_NOTIFY requests for aggregated sessions MUST use the aggregated
+ control URI in the request. The scale change for any aggregated
+ session applies to all media streams that are part of the aggregate.
+
+ A PLAY_NOTIFY request with Notify-Reason header set to "Scale-Change"
+ MUST NOT carry a message body.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 88]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ S->C: PLAY_NOTIFY rtsp://example.com/fizzle/foo RTSP/2.0
+ Date: Tue, 14 Apr 2008 15:48:06 GMT
+ CSeq: 854
+ Notify-Reason: scale-change
+ Session: CDtUJfDQXJWtJ7Iqua2xOi
+ Media-Properties: Time-Progressing,
+ Time-Limited=20080415T153919.36Z, Random-Access=5.0
+ Media-Range: npt=00:00:00-01:37:21.394
+ Range: npt=01:37:21.394-
+ Scale: 1
+ RTP-Info: url="rtsp://example.com/fizzle/foo/audio"
+ ssrc=0D12F123:rtptime=2345962545,
+ url="rtsp://example.com/fizzle/foo/videotrack"
+ ssrc=789DAF12:seq=57654;rtptime=2792482193
+
+ C->S: RTSP/2.0 200 OK
+ CSeq: 854
+ User-Agent: PhonyClient/1.2
+ Session: CDtUJfDQXJWtJ7Iqua2xOi
+
+13.6. PAUSE
+
+ The PAUSE request causes the stream delivery to immediately be
+ interrupted (halted). A PAUSE request MUST be made either with the
+ aggregated control URI for aggregated sessions, resulting in all
+ media being halted, or with the media URI for non-aggregated
+ sessions. Any attempt to mute a single media with a PAUSE request in
+ an aggregated session MUST be responded to with a 460 (Only Aggregate
+ Operation Allowed) error. After resuming playback, synchronization
+ of the tracks MUST be maintained. Any server resources are kept,
+ though servers MAY close the session and free resources after being
+ paused for the duration specified with the timeout parameter of the
+ Session header in the SETUP message.
+
+ Example:
+
+ C->S: PAUSE rtsp://example.com/fizzle/foo RTSP/2.0
+ CSeq: 834
+ Session: OoOUPyUwt0VeY9fFRHuZ6L
+ User-Agent: PhonyClient/1.2
+
+ S->C: RTSP/2.0 200 OK
+ CSeq: 834
+ Date: Thu, 23 Jan 1997 15:35:06 GMT
+ Session: OoOUPyUwt0VeY9fFRHuZ6L
+ Range: npt=45.76-75.00
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 89]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ The PAUSE request causes stream delivery to be interrupted
+ immediately on receipt of the message, and the pause point is set to
+ the current point in the presentation. That pause point in the media
+ stream needs to be maintained. A subsequent PLAY request without a
+ Range header resumes from the pause point and plays until media end.
+
+ The pause point after any PAUSE request MUST be returned to the
+ client by adding a Range header with what remains unplayed of the
+ PLAY request's range. For media with random access properties, if
+ one desires to resume playing a ranged request, one simply includes
+ the Range header from the PAUSE response and includes the Seek-Style
+ header with the Next policy in the PLAY request. For media that is
+ time-progressing and has retention duration=0, the follow-up PLAY
+ request to start media delivery again MUST use "npt=now-" and not the
+ answer given in the response to PAUSE.
+
+ C->S: PLAY rtsp://example.com/fizzle/foo RTSP/2.0
+ CSeq: 834
+ Session: OccldOFFq23KwjYpAnBbUr
+ Range: npt=10-30
+ User-Agent: PhonyClient/1.2
+
+ S->C: RTSP/2.0 200 OK
+ CSeq: 834
+ Date: Thu, 23 Jan 1997 15:35:06 GMT
+ Server: PhonyServer/1.0
+ Range: npt=10-30
+ Seek-Style: First-Prior
+ RTP-Info:url="rtsp://example.com/fizzle/audiotrack"
+ ssrc=0D12F123:seq=5712;rtptime=934207921,
+ url="rtsp://example.com/fizzle/videotrack"
+ ssrc=4FAD8726:seq=57654;rtptime=2792482193
+ Session: OccldOFFq23KwjYpAnBbUr
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 90]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ After 11 seconds, i.e., at 21 seconds into the presentation:
+
+ C->S: PAUSE rtsp://example.com/fizzle/foo RTSP/2.0
+ CSeq: 835
+ Session: OccldOFFq23KwjYpAnBbUr
+ User-Agent: PhonyClient/1.2
+
+ S->C: RTSP/2.0 200 OK
+ CSeq: 835
+ Date: 23 Jan 1997 15:35:17 GMT
+ Server: PhonyServer/1.0
+ Range: npt=21-30
+ Session: OccldOFFq23KwjYpAnBbUr
+
+ If a client issues a PAUSE request and the server acknowledges and
+ enters the Ready state, the proper server response, if the player
+ issues another PAUSE, is still 200 OK. The 200 OK response MUST
+ include the Range header with the current pause point. See examples
+ below:
+
+ C->S: PAUSE rtsp://example.com/fizzle/foo RTSP/2.0
+ CSeq: 834
+ Session: OccldOFFq23KwjYpAnBbUr
+ User-Agent: PhonyClient/1.2
+
+ S->C: RTSP/2.0 200 OK
+ CSeq: 834
+ Session: OccldOFFq23KwjYpAnBbUr
+ Date: Thu, 23 Jan 1997 15:35:06 GMT
+ Range: npt=45.76-98.36
+
+ C->S: PAUSE rtsp://example.com/fizzle/foo RTSP/2.0
+ CSeq: 835
+ Session: OccldOFFq23KwjYpAnBbUr
+ User-Agent: PhonyClient/1.2
+
+ S->C: RTSP/2.0 200 OK
+ CSeq: 835
+ Session: OccldOFFq23KwjYpAnBbUr
+ Date: 23 Jan 1997 15:35:07 GMT
+ Range: npt=45.76-98.36
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 91]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+13.7. TEARDOWN
+
+13.7.1. Client to Server
+
+ The TEARDOWN client-to-server request stops the stream delivery for
+ the given URI, freeing the resources associated with it. A TEARDOWN
+ request can be performed on either an aggregated or a media control
+ URI. However, some restrictions apply depending on the current
+ state. The TEARDOWN request MUST contain a Session header indicating
+ to what session the request applies. The TEARDOWN request MUST NOT
+ include a Terminate-Reason header.
+
+ A TEARDOWN using the aggregated control URI or the media URI in a
+ session under non-aggregated control (single media session) MAY be
+ done in any state (Ready and Play). A successful request MUST result
+ in that media delivery being immediately halted and the session state
+ being destroyed. This MUST be indicated through the lack of a
+ Session header in the response.
+
+ A TEARDOWN using a media URI in an aggregated session can only be
+ done in Ready state. Such a request only removes the indicated media
+ stream and associated resources from the session. This may result in
+ a session returning to non-aggregated control, because it only
+ contains a single media after the request's completion. A session
+ that will exist after the processing of the TEARDOWN request MUST, in
+ the response to that TEARDOWN request, contain a Session header.
+
+ Thus, the presence of the Session header indicates to the receiver of
+ the response if the session is still extant or has been removed.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 92]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Example:
+
+ C->S: TEARDOWN rtsp://example.com/fizzle/foo RTSP/2.0
+ CSeq: 892
+ Session: OccldOFFq23KwjYpAnBbUr
+ User-Agent: PhonyClient/1.2
+
+ S->C: RTSP/2.0 200 OK
+ CSeq: 892
+ Server: PhonyServer/1.0
+
+13.7.2. Server to Client
+
+ The server can send TEARDOWN requests in the server-to-client
+ direction to indicate that the server has been forced to terminate
+ the ongoing session. This may happen for several reasons, such as
+ server maintenance without available backup, or that the session has
+ been inactive for extended periods of time. The reason is provided
+ in the Terminate-Reason header (Section 18.52).
+
+ When an RTSP client has maintained an RTSP session that otherwise is
+ inactive for an extended period of time, the server may reclaim the
+ resources. That is done by issuing a TEARDOWN request with the
+ Terminate-Reason set to "Session-Timeout". This MAY be done when the
+ client has been inactive in the RTSP session for more than one
+ Session Timeout period (Section 18.49). However, the server is NOT
+ RECOMMENDED to perform this operation until an extended period of
+ inactivity of 10 times the Session-Timeout period has passed. It is
+ up to the operator of the RTSP server to actually configure how long
+ this extended period of inactivity is. An operator should take into
+ account, when doing this configuration, what the served content is
+ and what this means for the extended period of inactivity.
+
+ In case the server needs to stop providing service to the established
+ sessions and there is no server to point at in a REDIRECT request,
+ then TEARDOWN SHALL be used to terminate the session. This method
+ can also be used when non-recoverable internal errors have happened
+ and the server has no other option than to terminate the sessions.
+
+ The TEARDOWN request MUST be made only on the session aggregate
+ control URI (i.e., it is not allowed to terminate individual media
+ streams, if it is a session aggregate), and it MUST include the
+ following headers: Session and Terminate-Reason. The request only
+ applies to the session identified in the Session header. The server
+ may include a message to the client's user with the "user-msg"
+ parameter.
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 93]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ The TEARDOWN request may alternatively be done on the wildcard URI
+ "*" and without any session header. The scope of such a request is
+ limited to the next-hop (i.e., the RTSP agent in direct communication
+ with the server) and applies, as well, to the RTSP connection between
+ the next-hop RTSP agent and the server. This request indicates that
+ all sessions and pending requests being managed via the connection
+ are terminated. Any intervening proxies SHOULD do all of the
+ following in the order listed:
+
+ 1. respond to the TEARDOWN request
+
+ 2. disconnect the control channel from the requesting server
+
+ 3. pass the TEARDOWN request to each applicable client (typically
+ those clients with an active session or an unanswered request)
+
+ Note: The proxy is responsible for accepting TEARDOWN responses
+ from its clients; these responses MUST NOT be passed on to either
+ the original server or the target server in the redirect.
+
+13.8. GET_PARAMETER
+
+ The GET_PARAMETER request retrieves the value of any specified
+ parameter or parameters for a presentation or stream specified in the
+ URI. If the Session header is present in a request, the value of a
+ parameter MUST be retrieved in the specified session context. There
+ are two ways of specifying the parameters to be retrieved.
+
+ The first approach includes headers that have been defined to be
+ usable for this purpose. Headers for this purpose should allow
+ empty, or stripped value parts to avoid having to specify bogus data
+ when indicating the desire to retrieve a value. The successful
+ completion of the request should also be evident from any filled out
+ values in the response. The headers in this specification that MAY
+ be used for retrieving their current value using GET_PARAMETER are
+ listed below; additional headers MAY be specified in the future:
+
+ o Accept-Ranges
+
+ o Media-Range
+
+ o Media-Properties
+
+ o Range
+
+ o RTP-Info
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 94]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ The other way is to specify a message body that lists the
+ parameter(s) that are desired to be retrieved. The Content-Type
+ header (Section 18.19) is used to specify which format the message
+ body has. If the receiver of the request does not support the media
+ type used for the message body, it SHALL respond using the error code
+ 415 (Unsupported Media Type). The responder to a GET_PARAMETER
+ request MUST use the media type of the request for the response. For
+ additional considerations regarding message body negotiation, see
+ Section 9.3.
+
+ RTSP agents implementing support for responding to GET_PARAMETER
+ requests SHALL implement the "text/parameters" format (Appendix F).
+ This to ensure that at least one known format for parameters is
+ implemented and, thus, prevent parameter format negotiation failure.
+
+ Parameters specified within the body of the message must all be
+ understood by the request-receiving agent. If one or more parameters
+ are not understood a 451 (Parameter Not Understood) MUST be sent
+ including a body listing the parameters that weren't understood. If
+ all parameters are understood, their values are filled in and
+ returned in the response message body.
+
+ The method can also be used without a message body or any header that
+ requests parameters for keep-alive purposes. The keep-alive timer
+ has been updated for any request that is successful, i.e., a 200 OK
+ response is received. Any non-required header present in such a
+ request may or may not have been processed. Normally, the presence
+ of filled-out values in the header will be indication that the header
+ has been processed. However, for cases when this is difficult to
+ determine, it is recommended to use a feature tag and the Require
+ header. For this reason, it is usually easier if any parameters to
+ be retrieved are sent in the body, rather than using any header.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 95]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Example:
+
+ S->C: GET_PARAMETER rtsp://example.com/fizzle/foo RTSP/2.0
+ CSeq: 431
+ User-Agent: PhonyClient/1.2
+ Session: OccldOFFq23KwjYpAnBbUr
+ Content-Length: 26
+ Content-Type: text/parameters
+
+ packets_received
+ jitter
+
+ C->S: RTSP/2.0 200 OK
+ CSeq: 431
+ Session: OccldOFFq23KwjYpAnBbUr
+ Server: PhonyServer/1.1
+ Date: Mon, 08 Mar 2010 13:43:23 GMT
+ Content-Length: 38
+ Content-Type: text/parameters
+
+ packets_received: 10
+ jitter: 0.3838
+
+13.9. SET_PARAMETER
+
+ This method requests the setting of the value of a parameter or a set
+ of parameters for a presentation or stream specified by the URI. If
+ the Session header is present in a request, the value of a parameter
+ MUST be retrieved in the specified session context. The method MAY
+ also be used without a message body. It is the RECOMMENDED method to
+ be used in a request sent for the sole purpose of updating the keep-
+ alive timer. If this request is successful, i.e., a 200 OK response
+ is received, then the keep-alive timer has been updated. Any non-
+ required header present in such a request may or may not have been
+ processed. To allow a client to determine if any such header has
+ been processed, it is necessary to use a feature tag and the Require
+ header. Due to this reason it is RECOMMENDED that any parameters are
+ sent in the body rather than using any header.
+
+ When using a message body to list the parameter(s) desired to be set,
+ the Content-Type header (Section 18.19) is used to specify which
+ format the message body has. If the receiver of the request is not
+ supporting the media type used for the message body, it SHALL respond
+ using the error code 415 (Unsupported Media Type). For additional
+ considerations regarding message body negotiation, see Section 9.3.
+ The responder to a SET_PARAMETER request MUST use the media type of
+ the request for the response. For additional considerations
+ regarding message body negotiation, see Section 9.3.
+
+
+
+Schulzrinne, et al. Standards Track [Page 96]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ RTSP agents implementing support for responding to SET_PARAMETER
+ requests SHALL implement the text/parameters format (Appendix F).
+ This is to ensure that at least one known format for parameters is
+ implemented and, thus, prevent parameter format negotiation failure.
+
+ A request is RECOMMENDED to only contain a single parameter to allow
+ the client to determine why a particular request failed. If the
+ request contains several parameters, the server MUST only act on the
+ request if all of the parameters can be set successfully. A server
+ MUST allow a parameter to be set repeatedly to the same value, but it
+ MAY disallow changing parameter values. If the receiver of the
+ request does not understand or cannot locate a parameter, error 451
+ (Parameter Not Understood) MUST be used. When a parameter is not
+ allowed to change, the error code is 458 (Parameter Is Read-Only).
+ The response body MUST contain only the parameters that have errors.
+ Otherwise, a body MUST NOT be returned. The response body MUST use
+ the media type of the request for the response.
+
+ Note: transport parameters for the media stream MUST only be set with
+ the SETUP command.
+
+ Restricting setting transport parameters to SETUP is for the
+ benefit of firewalls connected to border RTSP proxies.
+
+ The parameters are split in a fine-grained fashion so that there
+ can be more meaningful error indications. However, it may make
+ sense to allow the setting of several parameters if an atomic
+ setting is desirable. Imagine device control where the client
+ does not want the camera to pan unless it can also tilt to the
+ right angle at the same time.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 97]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Example:
+
+ C->S: SET_PARAMETER rtsp://example.com/fizzle/foo RTSP/2.0
+ CSeq: 421
+ User-Agent: PhonyClient/1.2
+ Session: iixT43KLc
+ Date: Mon, 08 Mar 2010 14:45:04 GMT
+ Content-length: 20
+ Content-type: text/parameters
+
+ barparam: barstuff
+
+ S->C: RTSP/2.0 451 Parameter Not Understood
+ CSeq: 421
+ Session: iixT43KLc
+ Server: PhonyServer/1.0
+ Date: Mon, 08 Mar 2010 14:44:56 GMT
+ Content-length: 20
+ Content-type: text/parameters
+
+ barparam: barstuff
+
+13.10. REDIRECT
+
+ The REDIRECT method is issued by a server to inform a client that the
+ service provided will be terminated and where a corresponding service
+ can be provided instead. This may happen for different reasons. One
+ is that the server is being administered such that it must stop
+ providing service. Thus, the client is required to connect to
+ another server location to access the resource indicated by the
+ Request-URI.
+
+ The REDIRECT request SHALL contain a Terminate-Reason header
+ (Section 18.52) to inform the client of the reason for the request.
+ Additional parameters related to the reason may also be included.
+ The intention here is to allow a server administrator to do a
+ controlled shutdown of the RTSP server. That requires sufficient
+ time to inform all entities having associated state with the server
+ and for them to perform a controlled migration from this server to a
+ fall-back server.
+
+ A REDIRECT request with a Session header has end-to-end (i.e.,
+ server-to-client) scope and applies only to the given session. Any
+ intervening proxies SHOULD NOT disconnect the control channel while
+ there are other remaining end-to-end sessions. The REQUIRED Location
+ header MUST contain a complete absolute URI pointing to the resource
+ to which the client SHOULD reconnect. Specifically, the Location
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 98]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ MUST NOT contain just the host and port. A client may receive a
+ REDIRECT request with a Session header, if and only if, an end-to-end
+ session has been established.
+
+ A client may receive a REDIRECT request without a Session header at
+ any time when it has communication or a connection established with a
+ server. The scope of such a request is limited to the next-hop
+ (i.e., the RTSP agent in direct communication with the server) and
+ applies to all sessions controlled, as well as the connection between
+ the next-hop RTSP agent and the server. A REDIRECT request without a
+ Session header indicates that all sessions and pending requests being
+ managed via the connection MUST be redirected. The Location header,
+ if included in such a request, SHOULD contain an absolute URI with
+ only the host address and the OPTIONAL port number of the server to
+ which the RTSP agent SHOULD reconnect. Any intervening proxies
+ SHOULD do all of the following in the order listed:
+
+ 1. respond to the REDIRECT request
+
+ 2. disconnect the control channel from the requesting server
+
+ 3. connect to the server at the given host address
+
+ 4. pass the REDIRECT request to each applicable client (typically
+ those clients with an active session or an unanswered request)
+
+ Note: The proxy is responsible for accepting REDIRECT responses
+ from its clients; these responses MUST NOT be passed on to either
+ the original server or the redirected server.
+
+ A server that needs to terminate a session or all its sessions and
+ lacks an alternative server to redirect to, SHALL instead use
+ TEARDOWN requests.
+
+ When no Terminate-Reason "time" parameter is included in a REDIRECT
+ request, the client SHALL perform the redirection immediately and
+ return a response to the server. The server shall consider the
+ session to be terminated and can free any associated state after it
+ receives the successful (2xx) response. The server MAY close the
+ signaling connection upon receiving the response, and the client
+ SHOULD close the signaling connection after sending the 2xx response.
+ The exception to this is when the client has several sessions on the
+ server being managed by the given signaling connection. In this
+ case, the client SHOULD close the connection when it has received and
+ responded to REDIRECT requests for all the sessions managed by the
+ signaling connection.
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 99]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ The Terminate-Reason header "time" parameter MAY be used to indicate
+ the wallclock time by which the redirection MUST have taken place.
+ To allow a client to determine that redirect time without being time
+ synchronized with the server, the server MUST include a Date header
+ in the request. The client should have terminated the session and
+ closed the connection before the redirection time-line terminated.
+ The server MAY simply cease to provide service when the deadline time
+ has been reached, or it can issue a TEARDOWN requests to the
+ remaining sessions.
+
+ If the REDIRECT request times out following the rules in
+ Section 10.4, the server MAY terminate the session or transport
+ connection that would be redirected by the request. This is a
+ safeguard against misbehaving clients that refuse to respond to a
+ REDIRECT request. This action removes any incentive of not
+ acknowledging the reception of a REDIRECT request.
+
+ After a REDIRECT request has been processed, a client that wants to
+ continue to receive media for the resource identified by the Request-
+ URI will have to establish a new session with the designated host.
+ If the URI given in the Location header is a valid resource URI, a
+ client SHOULD issue a DESCRIBE request for the URI.
+
+ Note: The media resource indicated by the Location header can be
+ identical, slightly different, or totally different. This is the
+ reason why a new DESCRIBE request SHOULD be issued.
+
+ If the Location header contains only a host address, the client may
+ assume that the media on the new server is identical to the media on
+ the old server, i.e., all media configuration information from the
+ old session is still valid except for the host address. However, the
+ usage of conditional SETUP using MTag identifiers is RECOMMENDED as a
+ means to verify the assumption.
+
+ This example request redirects traffic for this session to the new
+ server at the given absolute time:
+
+ S->C: REDIRECT rtsp://example.com/fizzle/foo RTSP/2.0
+ CSeq: 732
+ Location: rtsp://s2.example.com:8001/fizzle/foo
+ Terminate-Reason: Server-Admin ;time=19960213T143205Z
+ Session: uZ3ci0K+Ld-M
+ Date: Thu, 13 Feb 1996 14:30:43 GMT
+
+ C->S: RTSP/2.0 200 OK
+ CSeq: 732
+ User-Agent: PhonyClient/1.2
+ Session: uZ3ci0K+Ld-M
+
+
+
+Schulzrinne, et al. Standards Track [Page 100]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+14. Embedded (Interleaved) Binary Data
+
+ In order to fulfill certain requirements on the network side, e.g.,
+ in conjunction with network address translators that block RTP
+ traffic over UDP, it may be necessary to interleave RTSP messages and
+ media-stream data. This interleaving should generally be avoided
+ unless necessary since it complicates client and server operation and
+ imposes additional overhead. Also, head-of-line blocking may cause
+ problems. Interleaved binary data SHOULD only be used if RTSP is
+ carried over TCP. Interleaved data is not allowed inside RTSP
+ messages.
+
+ Stream data, such as RTP packets, is encapsulated by an ASCII dollar
+ sign (36 decimal) followed by a one-octet channel identifier and the
+ length of the encapsulated binary data as a binary, two-octet
+ unsigned integer in network octet order (Appendix B of [RFC791]).
+ The stream data follows immediately afterwards, without a CRLF, but
+ including the upper-layer protocol headers. Each dollar sign block
+ MUST contain exactly one upper-layer protocol data unit, e.g., one
+ RTP packet.
+
+ Note that this mechanism does not support PDUs larger than 65535
+ octets, which matches the maximum payload size of regular, non-
+ jumbo IPv4 and IPv6 packets. If the media delivery protocol
+ intended to be used has larger PDUs than that, a definition of a
+ PDU fragmentation mechanism will be required to support embedded
+ binary data.
+
+ 0 1 2 3
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | "$" = 36 | Channel ID | Length in octets |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ : Binary data (Length according to Length field) :
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Figure 1: Embedded Interleaved Binary Data Format
+
+ The channel identifier is defined in the Transport header with the
+ interleaved parameter (Section 18.54).
+
+ When the transport choice is RTP, RTCP messages are also interleaved
+ by the server over the TCP connection. The usage of RTCP messages is
+ indicated by including an interval containing a second channel in the
+ interleaved parameter of the Transport header (see Section 18.54).
+ If RTCP is used, packets MUST be sent on the first available channel
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 101]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ that is higher than the RTP channel. The channels are bidirectional,
+ using the same Channel ID in both directions; therefore, RTCP traffic
+ is sent on the second channel in both directions.
+
+ RTCP is sometimes needed for synchronization when two or more
+ streams are interleaved in such a fashion. Also, this provides a
+ convenient way to tunnel RTP/RTCP packets through the RTSP
+ connection (TCP or TCP/TLS) when required by the network
+ configuration and to transfer them onto UDP when possible.
+
+ C->S: SETUP rtsp://example.com/bar.file RTSP/2.0
+ CSeq: 2
+ Transport: RTP/AVP/TCP;unicast;interleaved=0-1
+ Accept-Ranges: npt, smpte, clock
+ User-Agent: PhonyClient/1.2
+
+ S->C: RTSP/2.0 200 OK
+ CSeq: 2
+ Date: Thu, 05 Jun 1997 18:57:18 GMT
+ Transport: RTP/AVP/TCP;unicast;interleaved=5-6
+ Session: OccldOFFq23KwjYpAnBbUr
+ Accept-Ranges: npt
+ Media-Properties: Random-Access=0.2, Immutable, Unlimited
+
+ C->S: PLAY rtsp://example.com/bar.file RTSP/2.0
+ CSeq: 3
+ Session: OccldOFFq23KwjYpAnBbUr
+ User-Agent: PhonyClient/1.2
+
+ S->C: RTSP/2.0 200 OK
+ CSeq: 3
+ Session: OccldOFFq23KwjYpAnBbUr
+ Date: Thu, 05 Jun 1997 18:57:19 GMT
+ RTP-Info: url="rtsp://example.com/bar.file"
+ ssrc=0D12F123:seq=232433;rtptime=972948234
+ Range: npt=0-56.8
+ Seek-Style: RAP
+
+ S->C: $005{2 octet length}{"length" octets data, w/RTP header}
+ S->C: $005{2 octet length}{"length" octets data, w/RTP header}
+ S->C: $006{2 octet length}{"length" octets RTCP packet}
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 102]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+15. Proxies
+
+ RTSP Proxies are RTSP agents that are located in between a client and
+ a server. A proxy can take on the roles of both client and server
+ depending on what it tries to accomplish. RTSP proxies use two
+ transport-layer connections: one from the RTSP client to the RTSP
+ proxy and a second from the RTSP proxy to the RTSP server. Proxies
+ are introduced for several different reasons; those listed below are
+ often combined.
+
+ Caching Proxy: This type of proxy is used to reduce the workload on
+ servers and connections. By caching the description and media
+ streams, i.e., the presentation, the proxy can serve a client
+ with content, but without requesting it from the server once it
+ has been cached and has not become stale. See Section 16.
+ This type of proxy is also expected to understand RTSP endpoint
+ functionality, i.e., functionality identified in the Require
+ header in addition to what Proxy-Require demands.
+
+ Translator Proxy: This type of proxy is used to ensure that an RTSP
+ client gets access to servers and content on an external
+ network or gets access by using content encodings not supported
+ by the client. The proxy performs the necessary translation of
+ addresses, protocols, or encodings. This type of proxy is
+ expected also to understand RTSP endpoint functionality, i.e.,
+ functionality identified in the Require header in addition to
+ what Proxy-Require demands.
+
+ Access Proxy: This type of proxy is used to ensure that an RTSP
+ client gets access to servers on an external network. Thus,
+ this proxy is placed on the border between two domains, e.g., a
+ private address space and the public Internet. The proxy
+ performs the necessary translation, usually addresses. This
+ type of proxy is required to redirect the media to itself or a
+ controlled gateway that performs the translation before the
+ media can reach the client.
+
+ Security Proxy: This type of proxy is used to help facilitate
+ security functions around RTSP. For example, in the case of a
+ firewalled network, the security proxy requests that the
+ necessary pinholes in the firewall are opened when a client in
+ the protected network wants to access media streams on the
+ external side. This proxy can perform its function without
+ redirecting the media between the server and client. However,
+ in deployments with private address spaces, this proxy is
+ likely to be combined with the access proxy. The functionality
+ of this proxy is usually closely tied into understanding all
+ aspects of the media transport.
+
+
+
+Schulzrinne, et al. Standards Track [Page 103]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Auditing Proxy: RTSP proxies can also provide network owners with a
+ logging and auditing point for RTSP sessions, e.g., for
+ corporations that track their employees usage of the network.
+ This type of proxy can perform its function without inserting
+ itself or any other node in the media transport. This proxy
+ type can also accept unknown methods as it doesn't interfere
+ with the clients' requests.
+
+ All types of proxies can also be used when using secured
+ communication with TLS, as RTSP 2.0 allows the client to approve
+ certificate chains used for connection establishment from a proxy;
+ see Section 19.3.2. However, that trust model may not be suitable
+ for all types of deployment. In those cases, the secured sessions do
+ bypass the proxies.
+
+ Access proxies SHOULD NOT be used in equipment like NATs and
+ firewalls that aren't expected to be regularly maintained, like home
+ or small office equipment. In these cases, it is better to use the
+ NAT traversal procedures defined for RTSP 2.0 [RFC7825]. The reason
+ for these recommendations is that any extensions of RTSP resulting in
+ new media-transport protocols or profiles, new parameters, etc., may
+ fail in a proxy that isn't maintained. This would impede RTSP's
+ future development and usage.
+
+15.1. Proxies and Protocol Extensions
+
+ The existence of proxies must always be considered when developing
+ new RTSP extensions. Most types of proxies will need to implement
+ any new method to operate correctly in the presence of that
+ extension. New headers can be introduced and will not be blocked by
+ older proxies. However, it is important to consider if this header
+ and its function are required to be understood by the proxy or if it
+ can be simply forwarded. If the header needs to be understood, a
+ feature tag representing the functionality MUST be included in the
+ Proxy-Require header. Below are guidelines for analysis whether the
+ header needs to be understood. The Transport header and its
+ parameters are extensible, which requires handling rules for a proxy
+ in order to ensure a correct interpretation.
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 104]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Whether or not a proxy needs to understand a header is not easy to
+ determine as they serve a broad variety of functions. When
+ evaluating if a header needs to be understood, one can divide the
+ functionality into three main categories:
+
+ Media modifying: The caching and translator proxies modify the
+ actual media and therefore need also to understand the request
+ directed to the server that affects how the media is rendered.
+ Thus, this type of proxy also needs to understand the server-side
+ functionality.
+
+ Transport modifying: The access and the security proxy both need to
+ understand how the media transport is performed, either for
+ opening pinholes or translating the outer headers, e.g., IP and
+ UDP or TCP.
+
+ Non-modifying: The audit proxy is special in that it does not modify
+ the messages in other ways than to insert the Via header. That
+ makes it possible for this type to forward RTSP messages that
+ contain different types of unknown methods, headers, or header
+ parameters.
+
+ An extension has to be classified as mandatory to be implemented for
+ a proxy, if an extension has to be understood by a "Transport
+ modifying" type of proxy.
+
+15.2. Multiplexing and Demultiplexing of Messages
+
+ RTSP proxies may have to multiplex several RTSP sessions from their
+ clients towards RTSP servers. This requires that RTSP requests from
+ multiple clients be multiplexed onto a common connection for requests
+ outgoing to an RTSP server, and, on the way back, the responses be
+ demultiplexed from the server to per-client responses. On the
+ protocol level, this requires that request and response messages be
+ handled in both directions, requiring that there be a mechanism to
+ correlate which request/response pair exchanged between proxy and
+ server is mapped to which client (or client request).
+
+ This multiplexing of requests and demultiplexing of responses is done
+ by using the CSeq header field. The proxy has to rewrite the CSeq in
+ requests to the server and responses from the server and remember
+ which CSeq is mapped to which client. The proxy also needs to ensure
+ that the order of the message related to each client is maintained.
+ Section 18.20 defines the handling of how requests and responses are
+ rewritten.
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 105]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+16. Caching
+
+ In HTTP, request/response pairs are cached. RTSP differs
+ significantly in that respect. Responses are not cacheable, with the
+ exception of the presentation description returned by DESCRIBE.
+ (Since the responses for anything but DESCRIBE and GET_PARAMETER do
+ not return any data, caching is not really an issue for these
+ requests.) However, it is desirable for the continuous media data,
+ typically delivered out-of-band with respect to RTSP, to be cached,
+ as well as the session description.
+
+ On receiving a SETUP or PLAY request, a proxy ascertains whether it
+ has an up-to-date copy of the continuous media content and its
+ description. It can determine whether the copy is up to date by
+ issuing a SETUP or DESCRIBE request, respectively, and comparing the
+ Last-Modified header with that of the cached copy. If the copy is
+ not up to date, it modifies the SETUP transport parameters as
+ appropriate and forwards the request to the origin server.
+ Subsequent control commands such as PLAY or PAUSE then pass the proxy
+ unmodified. The proxy delivers the continuous media data to the
+ client, while possibly making a local copy for later reuse. The
+ exact allowed behavior of the cache is given by the cache-response
+ directives described in Section 18.11. A cache MUST answer any
+ DESCRIBE requests if it is currently serving the stream to the
+ requester, as it is possible that low-level details of the stream
+ description may have changed on the origin server.
+
+ Note that an RTSP cache is of the "cut-through" variety. Rather than
+ retrieving the whole resource from the origin server, the cache
+ simply copies the streaming data as it passes by on its way to the
+ client. Thus, it does not introduce additional latency.
+
+ To the client, an RTSP proxy cache appears like a regular media
+ server. To the media origin server, an RTSP proxy cache appears like
+ a client. Just as an HTTP cache has to store the content type,
+ content language, and so on for the objects it caches, a media cache
+ has to store the presentation description. Typically, a cache
+ eliminates all transport references (e.g., multicast information)
+ from the presentation description, since these are independent of the
+ data delivery from the cache to the client. Information on the
+ encodings remains the same. If the cache is able to translate the
+ cached media data, it would create a new presentation description
+ with all the encoding possibilities it can offer.
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 106]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+16.1. Validation Model
+
+ When a cache has a stale entry that it would like to use as a
+ response to a client's request, it first has to check with the origin
+ server (or possibly an intermediate cache with a fresh response) to
+ see if its cached entry is still usable. This is called "validating"
+ the cache entry. To avoid having to pay the overhead of
+ retransmitting the full response if the cached entry is good, and at
+ the same time avoiding having to pay the overhead of an extra round
+ trip if the cached entry is invalid, RTSP supports the use of
+ conditional methods.
+
+ The key protocol features for supporting conditional methods are
+ those concerned with "cache validators." When an origin server
+ generates a full response, it attaches some sort of validator to it,
+ which is kept with the cache entry. When a client (user agent or
+ proxy cache) makes a conditional request for a resource for which it
+ has a cache entry, it includes the associated validator in the
+ request.
+
+ The server then checks that validator against the current validator
+ for the requested resource, and, if they match (see Section 16.1.3),
+ it responds with a special status code (usually, 304 (Not Modified))
+ and no message body. Otherwise, it returns a full response
+ (including message body). Thus, avoiding transmitting the full
+ response if the validator matches and avoiding an extra round trip if
+ it does not match.
+
+ In RTSP, a conditional request looks exactly the same as a normal
+ request for the same resource, except that it carries a special
+ header (which includes the validator) that implicitly turns the
+ method (usually DESCRIBE or SETUP) into a conditional.
+
+ The protocol includes both positive and negative senses of cache-
+ validating conditions. That is, it is possible to request that a
+ method be performed either if and only if a validator matches or if
+ and only if no validators match.
+
+ Note: a response that lacks a validator may still be cached, and
+ served from cache until it expires, unless this is explicitly
+ prohibited by a cache directive (see Section 18.11). However, a
+ cache cannot perform a conditional retrieval if it does not have a
+ validator for the resource, which means it will not be refreshable
+ after it expires.
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 107]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Media streams that are being adapted based on the transport capacity
+ between the server and the cache make caching more difficult. A
+ server needs to consider how it views the caching of media streams
+ that it adapts and potentially instruct any caches not to cache such
+ streams.
+
+16.1.1. Last-Modified Dates
+
+ The Last-Modified header (Section 18.27) value is often used as a
+ cache validator. In simple terms, a cache entry is considered to be
+ valid if the cache entry was created after the Last-Modified time.
+
+16.1.2. Message Body Tag Cache Validators
+
+ The MTag response-header field-value, a message body tag, provides
+ for an "opaque" cache validator. This might allow more reliable
+ validation in situations where it is inconvenient to store
+ modification dates, where the one-second resolution of RTSP-date
+ values is not sufficient, or where the origin server wishes to avoid
+ certain paradoxes that might arise from the use of modification
+ dates.
+
+ Message body tags are described in Section 4.6
+
+16.1.3. Weak and Strong Validators
+
+ Since both origin servers and caches will compare two validators to
+ decide if they represent the same or different entities, one normally
+ would expect that if the message body (i.e., the presentation
+ description) or any associated message body headers changes in any
+ way, then the associated validator would change as well. If this is
+ true, then this validator is a "strong validator". The Message body
+ (i.e., the presentation description) or any associated message body
+ headers is named an entity for a better understanding.
+
+ However, there might be cases when a server prefers to change the
+ validator only on semantically significant changes and not when
+ insignificant aspects of the entity change. A validator that does
+ not always change when the resource changes is a "weak validator".
+
+ Message body tags are normally strong validators, but the protocol
+ provides a mechanism to tag a message body tag as "weak". One can
+ think of a strong validator as one that changes whenever the bits of
+ an entity changes, while a weak value changes whenever the meaning of
+ an entity changes. Alternatively, one can think of a strong
+ validator as part of an identifier for a specific entity, while a
+ weak validator is part of an identifier for a set of semantically
+ equivalent entities.
+
+
+
+Schulzrinne, et al. Standards Track [Page 108]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Note: One example of a strong validator is an integer that is
+ incremented in stable storage every time an entity is changed.
+
+ An entity's modification time, if represented with one-second
+ resolution, could be a weak validator, since it is possible that
+ the resource might be modified twice during a single second.
+
+ Support for weak validators is optional. However, weak validators
+ allow for more efficient caching of equivalent objects.
+
+ A "use" of a validator is either when a client generates a request
+ and includes the validator in a validating header field or when a
+ server compares two validators.
+
+ Strong validators are usable in any context. Weak validators are
+ only usable in contexts that do not depend on exact equality of an
+ entity. For example, either kind is usable for a conditional
+ DESCRIBE of a full entity. However, only a strong validator is
+ usable for a subrange retrieval, since otherwise the client might end
+ up with an internally inconsistent entity.
+
+ Clients MAY issue DESCRIBE requests with either weak or strong
+ validators. Clients MUST NOT use weak validators in other forms of
+ requests.
+
+ The only function that RTSP defines on validators is comparison.
+ There are two validator comparison functions, depending on whether or
+ not the comparison context allows the use of weak validators:
+
+ o The strong comparison function: in order to be considered equal,
+ both validators MUST be identical in every way, and both MUST NOT
+ be weak.
+
+ o The weak comparison function: in order to be considered equal,
+ both validators MUST be identical in every way, but either or both
+ of them MAY be tagged as "weak" without affecting the result.
+
+ A message body tag is strong unless it is explicitly tagged as weak.
+
+ A Last-Modified time, when used as a validator in a request, is
+ implicitly weak unless it is possible to deduce that it is strong,
+ using the following rules:
+
+ o The validator is being compared by an origin server to the actual
+ current validator for the entity and,
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 109]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ o That origin server reliably knows that the associated entity did
+ not change more than once during the second covered by the
+ presented validator.
+
+ OR
+
+ o The validator is about to be used by a client in an If-Modified-
+ Since, because the client has a cache entry for the associated
+ entity, and
+
+ o That cache entry includes a Date value, which gives the time when
+ the origin server sent the original response, and
+
+ o The presented Last-Modified time is at least 60 seconds before the
+ Date value.
+
+ OR
+
+ o The validator is being compared by an intermediate cache to the
+ validator stored in its cache entry for the entity, and
+
+ o That cache entry includes a Date value, which gives the time when
+ the origin server sent the original response, and
+
+ o The presented Last-Modified time is at least 60 seconds before the
+ Date value.
+
+ This method relies on the fact that if two different responses were
+ sent by the origin server during the same second, but both had the
+ same Last-Modified time, then at least one of those responses would
+ have a Date value equal to its Last-Modified time. The arbitrary
+ 60-second limit guards against the possibility that the Date and
+ Last-Modified values are generated from different clocks or at
+ somewhat different times during the preparation of the response. An
+ implementation MAY use a value larger than 60 seconds, if it is
+ believed that 60 seconds is too short.
+
+ If a client wishes to perform a subrange retrieval on a value for
+ which it has only a Last-Modified time and no opaque validator, it
+ MAY do this only if the Last-Modified time is strong in the sense
+ described here.
+
+16.1.4. Rules for When to Use Message Body Tags and Last-Modified Dates
+
+ This document adopts a set of rules and recommendations for origin
+ servers, clients, and caches regarding when various validator types
+ ought to be used, and for what purposes.
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 110]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ RTSP origin servers:
+
+ o SHOULD send a message body tag validator unless it is not feasible
+ to generate one.
+
+ o MAY send a weak message body tag instead of a strong message body
+ tag, if performance considerations support the use of weak message
+ body tags, or if it is unfeasible to send a strong message body
+ tag.
+
+ o SHOULD send a Last-Modified value if it is feasible to send one,
+ unless the risk of a breakdown in semantic transparency that could
+ result from using this date in an If-Modified-Since header would
+ lead to serious problems.
+ In other words, the preferred behavior for an RTSP origin server is
+ to send both a strong message body tag and a Last-Modified value.
+
+ In order to be legal, a strong message body tag MUST change whenever
+ the associated entity value changes in any way. A weak message body
+ tag SHOULD change whenever the associated entity changes in a
+ semantically significant way.
+
+ Note: in order to provide semantically transparent caching, an
+ origin server MUST avoid reusing a specific strong message body
+ tag value for two different entities or reusing a specific weak
+ message body tag value for two semantically different entities.
+ Cache entries might persist for arbitrarily long periods,
+ regardless of expiration times, so it might be inappropriate to
+ expect that a cache will never again attempt to validate an entry
+ using a validator that it obtained at some point in the past.
+
+ RTSP clients:
+
+ o If a message body tag has been provided by the origin server, MUST
+ use that message body tag in any cache-conditional request (using
+ If-Match or If-None-Match).
+
+ o If only a Last-Modified value has been provided by the origin
+ server, SHOULD use that value in non-subrange cache-conditional
+ requests (using If-Modified-Since).
+
+ o If both a message body tag and a Last-Modified value have been
+ provided by the origin server, SHOULD use both validators in
+ cache-conditional requests.
+
+ An RTSP origin server, upon receiving a conditional request that
+ includes both a Last-Modified date (e.g., in an If-Modified-Since
+ header) and one or more message body tags (e.g., in an If-Match,
+
+
+
+Schulzrinne, et al. Standards Track [Page 111]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ If-None-Match, or If-Range header field) as cache validators, MUST
+ NOT return a response status of 304 (Not Modified) unless doing so is
+ consistent with all of the conditional header fields in the request.
+
+ Note: The general principle behind these rules is that RTSP
+ servers and clients should transmit as much non-redundant
+ information as is available in their responses and requests. RTSP
+ systems receiving this information will make the most conservative
+ assumptions about the validators they receive.
+
+16.1.5. Non-validating Conditionals
+
+ The principle behind message body tags is that only the service
+ author knows the semantics of a resource well enough to select an
+ appropriate cache validation mechanism, and the specification of any
+ validator comparison function more complex than octet equality would
+ open up a can of worms. Thus, comparisons of any other headers are
+ never used for purposes of validating a cache entry.
+
+16.2. Invalidation after Updates or Deletions
+
+ The effect of certain methods performed on a resource at the origin
+ server might cause one or more existing cache entries to become non-
+ transparently invalid. That is, although they might continue to be
+ "fresh," they do not accurately reflect what the origin server would
+ return for a new request on that resource.
+
+ There is no way for RTSP to guarantee that all such cache entries are
+ marked invalid. For example, the request that caused the change at
+ the origin server might not have gone through the proxy where a cache
+ entry is stored. However, several rules help reduce the likelihood
+ of erroneous behavior.
+
+ In this section, the phrase "invalidate an entity" means that the
+ cache will either remove all instances of that entity from its
+ storage or mark these as "invalid" and in need of a mandatory
+ revalidation before they can be returned in response to a subsequent
+ request.
+
+ Some RTSP methods MUST cause a cache to invalidate an entity. This
+ is either the entity referred to by the Request-URI or by the
+ Location or Content-Location headers (if present). These methods
+ are:
+
+ o DESCRIBE
+
+ o SETUP
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 112]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ In order to prevent DoS attacks, an invalidation based on the URI in
+ a Location or Content-Location header MUST only be performed if the
+ host part is the same as in the Request-URI.
+
+ A cache that passes through requests for methods it does not
+ understand SHOULD invalidate any entities referred to by the Request-
+ URI.
+
+17. Status Code Definitions
+
+ Where applicable, HTTP status codes (see Section 6 of [RFC7231]) are
+ reused. See Table 4 in Section 8.1 for a listing of which status
+ codes may be returned by which requests. All error messages, 4xx and
+ 5xx, MAY return a body containing further information about the
+ error.
+
+17.1. Informational 1xx
+
+17.1.1. 100 Continue
+
+ The requesting agent SHOULD continue with its request. This interim
+ response is used to inform the requesting agent that the initial part
+ of the request has been received and has not yet been rejected by the
+ responding agent. The requesting agent SHOULD continue by sending
+ the remainder of the request or, if the request has already been
+ completed, continue to wait for a final response (see Section 10.4).
+ The responding agent MUST send a final response after the request has
+ been completed.
+
+17.2. Success 2xx
+
+ This class of status code indicates that the agent's request was
+ successfully received, understood, and accepted.
+
+17.2.1. 200 OK
+
+ The request has succeeded. The information returned with the
+ response is dependent on the method used in the request.
+
+17.3. Redirection 3xx
+
+ The notation "3xx" indicates response codes from 300 to 399 inclusive
+ that are meant for redirection. We use the notation "3rr" to
+ indicate all 3xx codes used for redirection, i.e., excluding 304.
+ The 304 response code appears here, rather than a 2xx response code,
+ which would have been appropriate; 304 has also been used in RTSP 1.0
+ [RFC2326].
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 113]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Within RTSP, redirection may be used for load-balancing or
+ redirecting stream requests to a server topologically closer to the
+ agent. Mechanisms to determine topological proximity are beyond the
+ scope of this specification.
+
+ A 3rr code MAY be used to respond to any request. The Location
+ header MUST be included in any 3rr response. It is RECOMMENDED that
+ they are used if necessary before a session is established, i.e., in
+ response to DESCRIBE or SETUP. However, in cases where a server is
+ not able to send a REDIRECT request to the agent, the server MAY need
+ to resort to using 3rr responses to inform an agent with an
+ established session about the need for redirecting the session. If a
+ 3rr response is received for a request in relation to an established
+ session, the agent SHOULD send a TEARDOWN request for the session and
+ MAY reestablish the session using the resource indicated by the
+ Location.
+
+ If the Location header is used in a response, it MUST contain an
+ absolute URI pointing out the media resource the agent is redirected
+ to; the URI MUST NOT only contain the hostname.
+
+ In the event that an unknown 3rr status code is received, the agent
+ SHOULD behave as if a 302 response code had been received
+ (Section 17.3.3).
+
+17.3.1. 300
+
+ The 300 response code is not used in RTSP 2.0.
+
+17.3.2. 301 Moved Permanently
+
+ The requested resource is moved permanently and resides now at the
+ URI given by the Location header. The user agent SHOULD redirect
+ automatically to the given URI. This response MUST NOT contain a
+ message body. The Location header MUST be included in the response.
+
+17.3.3. 302 Found
+
+ The requested resource resides temporarily at the URI given by the
+ Location header. This response is intended to be used for many types
+ of temporary redirects, e.g., load balancing. It is RECOMMENDED that
+ the server set the reason phrase to something more meaningful than
+ "Found" in these cases. The Location header MUST be included in the
+ response. The user agent SHOULD redirect automatically to the given
+ URI. This response MUST NOT contain a message body.
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 114]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ This example shows a client being redirected to a different server:
+
+ C->S: SETUP rtsp://example.com/fizzle/foo RTSP/2.0
+ CSeq: 2
+ Transport: RTP/AVP/TCP;unicast;interleaved=0-1
+ Accept-Ranges: npt, smpte, clock
+ User-Agent: PhonyClient/1.2
+
+ S->C: RTSP/2.0 302 Try Other Server
+ CSeq: 2
+ Location: rtsp://s2.example.com:8001/fizzle/foo
+
+17.3.4. 303 See Other
+
+ This status code MUST NOT be used in RTSP 2.0. However, it was
+ allowed in RTSP 1.0 [RFC2326].
+
+17.3.5. 304 Not Modified
+
+ If the agent has performed a conditional DESCRIBE or SETUP (see
+ Sections 18.25 and 18.26) and the requested resource has not been
+ modified, the server SHOULD send a 304 response. This response MUST
+ NOT contain a message body.
+
+ The response MUST include the following header fields:
+
+ o Date
+
+ o MTag or Content-Location, if the headers would have been sent in a
+ 200 response to the same request.
+
+ o Expires and Cache-Control if the field-value might differ from
+ that sent in any previous response for the same variant.
+
+ This response is independent for the DESCRIBE and SETUP requests.
+ That is, a 304 response to DESCRIBE does NOT imply that the resource
+ content is unchanged (only the session description) and a 304
+ response to SETUP does NOT imply that the resource description is
+ unchanged. The MTag and If-Match header (Section 18.24) may be used
+ to link the DESCRIBE and SETUP in this manner.
+
+17.3.6. 305 Use Proxy
+
+ The requested resource MUST be accessed through the proxy given by
+ the Location header that MUST be included. The Location header
+ field-value gives the URI of the proxy. The recipient is expected to
+ repeat this single request via the proxy. 305 responses MUST only be
+ generated by origin servers.
+
+
+
+Schulzrinne, et al. Standards Track [Page 115]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+17.4. Client Error 4xx
+
+17.4.1. 400 Bad Request
+
+ The request could not be understood by the agent due to malformed
+ syntax. The agent SHOULD NOT repeat the request without
+ modifications. If the request does not have a CSeq header, the agent
+ MUST NOT include a CSeq in the response.
+
+17.4.2. 401 Unauthorized
+
+ The request requires user authentication using the HTTP
+ authentication mechanism [RFC7235]. The usage of the error code is
+ defined in [RFC7235] and any applicable HTTP authentication scheme,
+ such as Digest [RFC7616]. The response is to include a WWW-
+ Authenticate header (Section 18.58) field containing a challenge
+ applicable to the requested resource. The agent can repeat the
+ request with a suitable Authorization header field. If the request
+ already included authorization credentials, then the 401 response
+ indicates that authorization has been refused for those credentials.
+ If the 401 response contains the same challenge as the prior
+ response, and the user agent has already attempted authentication at
+ least once, then the user SHOULD be presented the message body that
+ was given in the response, since that message body might include
+ relevant diagnostic information.
+
+17.4.3. 402 Payment Required
+
+ This code is reserved for future use.
+
+17.4.4. 403 Forbidden
+
+ The agent understood the request, but is refusing to fulfill it.
+ Authorization will not help, and the request SHOULD NOT be repeated.
+ If the agent wishes to make public why the request has not been
+ fulfilled, it SHOULD describe the reason for the refusal in the
+ message body. If the agent does not wish to make this information
+ available to the agent, the status code 404 (Not Found) can be used
+ instead.
+
+17.4.5. 404 Not Found
+
+ The agent has not found anything matching the Request-URI. No
+ indication is given of whether the condition is temporary or
+ permanent. The 410 (Gone) status code SHOULD be used if the agent
+ knows, through some internally configurable mechanism, that an old
+ resource is permanently unavailable and has no forwarding address.
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 116]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ This status code is commonly used when the agent does not wish to
+ reveal exactly why the request has been refused, or when no other
+ response is applicable.
+
+17.4.6. 405 Method Not Allowed
+
+ The method specified in the request is not allowed for the resource
+ identified by the Request-URI. The response MUST include an Allow
+ header containing a list of valid methods for the requested resource.
+ This status code is also to be used if a request attempts to use a
+ method not indicated during SETUP.
+
+17.4.7. 406 Not Acceptable
+
+ The resource identified by the request is only capable of generating
+ response message bodies that have content characteristics not
+ acceptable according to the Accept headers sent in the request.
+
+ The response SHOULD include a message body containing a list of
+ available message body characteristics and location(s) from which the
+ user or user agent can choose the one most appropriate. The message
+ body format is specified by the media type given in the Content-Type
+ header field. Depending upon the format and the capabilities of the
+ user agent, selection of the most appropriate choice MAY be performed
+ automatically. However, this specification does not define any
+ standard for such automatic selection.
+
+ If the response could be unacceptable, a user agent SHOULD
+ temporarily stop receipt of more data and query the user for a
+ decision on further actions.
+
+17.4.8. 407 Proxy Authentication Required
+
+ This code is similar to 401 (Unauthorized) (Section 17.4.2), but it
+ indicates that the client must first authenticate itself with the
+ proxy. The usage of this error code is defined in [RFC7235] and any
+ applicable HTTP authentication scheme, such as Digest [RFC7616]. The
+ proxy MUST return a Proxy-Authenticate header field (Section 18.34)
+ containing a challenge applicable to the proxy for the requested
+ resource.
+
+17.4.9. 408 Request Timeout
+
+ The agent did not produce a request within the time that the agent
+ was prepared to wait. The agent MAY repeat the request without
+ modifications at any later time.
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 117]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+17.4.10. 410 Gone
+
+ The requested resource is no longer available at the server and the
+ forwarding address is not known. This condition is expected to be
+ considered permanent. If the server does not know, or has no
+ facility to determine, whether or not the condition is permanent, the
+ status code 404 (Not Found) SHOULD be used instead. This response is
+ cacheable unless indicated otherwise.
+
+ The 410 response is primarily intended to assist the task of
+ repository maintenance by notifying the recipient that the resource
+ is intentionally unavailable and that the server owners desire that
+ remote links to that resource be removed. Such an event is common
+ for limited-time, promotional services and for resources belonging to
+ individuals no longer working at the server's site. It is not
+ necessary to mark all permanently unavailable resources as "gone" or
+ to keep the mark for any length of time -- that is left to the
+ discretion of the owner of the server.
+
+17.4.11. 412 Precondition Failed
+
+ The precondition given in one or more of the 'if-' request-header
+ fields evaluated to false when it was tested on the agent. See these
+ sections for the 'if-' headers: If-Match Section 18.24, If-Modified-
+ Since Section 18.25, and If-None-Match Section 18.26. This response
+ code allows the agent to place preconditions on the current resource
+ meta-information (header field data) and, thus, prevent the requested
+ method from being applied to a resource other than the one intended.
+
+17.4.12. 413 Request Message Body Too Large
+
+ The agent is refusing to process a request because the request
+ message body is larger than the agent is willing or able to process.
+ The agent MAY close the connection to prevent the requesting agent
+ from continuing the request.
+
+ If the condition is temporary, the agent SHOULD include a Retry-After
+ header field to indicate that it is temporary and after what time the
+ requesting agent MAY try again.
+
+17.4.13. 414 Request-URI Too Long
+
+ The responding agent is refusing to service the request because the
+ Request-URI is longer than the agent is willing to interpret. This
+ rare condition is only likely to occur when an agent has used a
+ request with long query information, when the agent has descended
+ into a URI "black hole" of redirection (e.g., a redirected URI prefix
+ that points to a suffix of itself), or when the agent is under attack
+
+
+
+Schulzrinne, et al. Standards Track [Page 118]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ by an agent attempting to exploit security holes present in some
+ agents using fixed-length buffers for reading or manipulating the
+ Request-URI.
+
+17.4.14. 415 Unsupported Media Type
+
+ The server is refusing to service the request because the message
+ body of the request is in a format not supported by the requested
+ resource for the requested method.
+
+17.4.15. 451 Parameter Not Understood
+
+ The recipient of the request does not support one or more parameters
+ contained in the request. When returning this error message the
+ agent SHOULD return a message body containing the offending
+ parameter(s).
+
+17.4.16. 452 Illegal Conference Identifier
+
+ This status code MUST NOT be used in RTSP 2.0. However, it was
+ allowed in RTSP 1.0 [RFC2326].
+
+17.4.17. 453 Not Enough Bandwidth
+
+ The request was refused because there was insufficient bandwidth.
+ This may, for example, be the result of a resource reservation
+ failure.
+
+17.4.18. 454 Session Not Found
+
+ The RTSP session identifier in the Session header is missing, is
+ invalid, or has timed out.
+
+17.4.19. 455 Method Not Valid in This State
+
+ The agent cannot process this request in its current state. The
+ response MUST contain an Allow header to make error recovery
+ possible.
+
+17.4.20. 456 Header Field Not Valid for Resource
+
+ The targeted agent could not act on a required request-header. For
+ example, if PLAY request contains the Range header field but the
+ stream does not allow seeking. This error message may also be used
+ for specifying when the time format in Range is impossible for the
+ resource. In that case, the Accept-Ranges header MUST be returned to
+ inform the agent of which formats are allowed.
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 119]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+17.4.21. 457 Invalid Range
+
+ The Range value given is out of bounds, e.g., beyond the end of the
+ presentation.
+
+17.4.22. 458 Parameter Is Read-Only
+
+ The parameter to be set by SET_PARAMETER can be read but not
+ modified. When returning this error message, the sender SHOULD
+ return a message body containing the offending parameter(s).
+
+17.4.23. 459 Aggregate Operation Not Allowed
+
+ The requested method may not be applied on the URI in question since
+ it is an aggregate (presentation) URI. The method may be applied on
+ a media URI.
+
+17.4.24. 460 Only Aggregate Operation Allowed
+
+ The requested method may not be applied on the URI in question since
+ it is not an aggregate control (presentation) URI. The method may be
+ applied on the aggregate control URI.
+
+17.4.25. 461 Unsupported Transport
+
+ The Transport field did not contain a supported transport
+ specification.
+
+17.4.26. 462 Destination Unreachable
+
+ The data transmission channel could not be established because the
+ agent address could not be reached. This error will most likely be
+ the result of an agent attempt to place an invalid dest_addr
+ parameter in the Transport field.
+
+17.4.27. 463 Destination Prohibited
+
+ The data transmission channel was not established because the server
+ prohibited access to the agent address. This error is most likely
+ the result of an agent attempt to redirect media traffic to another
+ destination with a dest_addr parameter in the Transport header.
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 120]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+17.4.28. 464 Data Transport Not Ready Yet
+
+ The data transmission channel to the media destination is not yet
+ ready for carrying data. However, the responding agent still expects
+ that the data transmission channel will be established at some point
+ in time. Note, however, that this may result in a permanent failure
+ like 462 (Destination Unreachable).
+
+ An example of when this error may occur is in the case in which a
+ client sends a PLAY request to a server prior to ensuring that the
+ TCP connections negotiated for carrying media data were successfully
+ established (in violation of this specification). The server would
+ use this error code to indicate that the requested action could not
+ be performed due to the failure of completing the connection
+ establishment.
+
+17.4.29. 465 Notification Reason Unknown
+
+ This indicates that the client has received a PLAY_NOTIFY
+ (Section 13.5) with a Notify-Reason header (Section 18.32) unknown to
+ the client.
+
+17.4.30. 466 Key Management Error
+
+ This indicates that there has been an error in a Key Management
+ function used in conjunction with a request. For example, usage of
+ Multimedia Internet KEYing (MIKEY) [RFC3830] according to
+ Appendix C.1.4.1 may result in this error.
+
+17.4.31. 470 Connection Authorization Required
+
+ The secured connection attempt needs user or client authorization
+ before proceeding. The next hop's certificate is included in this
+ response in the Accept-Credentials header.
+
+17.4.32. 471 Connection Credentials Not Accepted
+
+ When performing a secure connection over multiple connections, an
+ intermediary has refused to connect to the next hop and carry out the
+ request due to unacceptable credentials for the used policy.
+
+17.4.33. 472 Failure to Establish Secure Connection
+
+ A proxy fails to establish a secure connection to the next-hop RTSP
+ agent. This is primarily caused by a fatal failure at the TLS
+ handshake, for example, due to the agent not accepting any cipher
+ suites.
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 121]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+17.5. Server Error 5xx
+
+ Response status codes beginning with the digit "5" indicate cases in
+ which the server is aware that it has erred or is incapable of
+ performing the request. The server SHOULD include a message body
+ containing an explanation of the error situation and whether it is a
+ temporary or permanent condition. User agents SHOULD display any
+ included message body to the user. These response codes are
+ applicable to any request method.
+
+17.5.1. 500 Internal Server Error
+
+ The agent encountered an unexpected condition that prevented it from
+ fulfilling the request.
+
+17.5.2. 501 Not Implemented
+
+ The agent does not support the functionality required to fulfill the
+ request. This is the appropriate response when the agent does not
+ recognize the request method and is not capable of supporting it for
+ any resource.
+
+17.5.3. 502 Bad Gateway
+
+ The agent, while acting as a gateway or proxy, received an invalid
+ response from the upstream agent it accessed in attempting to fulfill
+ the request.
+
+17.5.4. 503 Service Unavailable
+
+ The server is currently unable to handle the request due to a
+ temporary overloading or maintenance of the server. The implication
+ is that this is a temporary condition that will be alleviated after
+ some delay. If known, the length of the delay MAY be indicated in a
+ Retry-After header. If no Retry-After is given, the agent SHOULD
+ handle the response as it would for a 500 response. The agent MUST
+ honor the length, if given, in the Retry-After header.
+
+ Note: The existence of the 503 status code does not imply that
+ a server must use it when becoming overloaded. Some servers
+ may wish to simply refuse the transport connection.
+
+ The response scope is dependent on the request. If the request was
+ in relation to an existing RTSP session, the scope of the overload
+ response is to this individual RTSP session. If the request was not
+ session specific or intended to form an RTSP session, it applies to
+ the RTSP server identified by the hostname in the Request-URI.
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 122]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+17.5.5. 504 Gateway Timeout
+
+ The agent, while acting as a proxy, did not receive a timely response
+ from the upstream agent specified by the URI or some other auxiliary
+ server (e.g., DNS) that it needed to access in attempting to complete
+ the request.
+
+17.5.6. 505 RTSP Version Not Supported
+
+ The agent does not support, or refuses to support, the RTSP version
+ that was used in the request message. The agent is indicating that
+ it is unable or unwilling to complete the request using the same
+ major version as the agent other than with this error message. The
+ response SHOULD contain a message body describing why that version is
+ not supported and what other protocols are supported by that agent.
+
+17.5.7. 551 Option Not Supported
+
+ A feature tag given in the Require or the Proxy-Require fields was
+ not supported. The Unsupported header MUST be returned stating the
+ feature for which there is no support.
+
+17.5.8. 553 Proxy Unavailable
+
+ The proxy is currently unable to handle the request due to a
+ temporary overloading or maintenance of the proxy. The implication
+ is that this is a temporary condition that will be alleviated after
+ some delay. If known, the length of the delay MAY be indicated in a
+ Retry-After header. If no Retry-After is given, the agent SHOULD
+ handle the response as it would for a 500 response. The agent MUST
+ honor the length, if given in the Retry-After header.
+
+ Note: The existence of the 553 status code does not imply that
+ a proxy must use it when becoming overloaded. Some proxies may
+ wish to simply refuse the connection.
+
+ The response scope is dependent on the Request. If the request was
+ in relation to an existing RTSP session, the scope of the overload
+ response is to this individual RTSP session. If the request was non-
+ session specific or intended to form an RTSP session, it applies to
+ all such requests to this proxy.
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 123]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+18. Header Field Definitions
+
+ +---------------+----------------+--------+---------+------+
+ | method | direction | object | acronym | Body |
+ +---------------+----------------+--------+---------+------+
+ | DESCRIBE | C -> S | P,S | DES | r |
+ | | | | | |
+ | GET_PARAMETER | C -> S, S -> C | P,S | GPR | R,r |
+ | | | | | |
+ | OPTIONS | C -> S, S -> C | P,S | OPT | |
+ | | | | | |
+ | PAUSE | C -> S | P,S | PSE | |
+ | | | | | |
+ | PLAY | C -> S | P,S | PLY | |
+ | | | | | |
+ | PLAY_NOTIFY | S -> C | P,S | PNY | R |
+ | | | | | |
+ | REDIRECT | S -> C | P,S | RDR | |
+ | | | | | |
+ | SETUP | C -> S | S | STP | |
+ | | | | | |
+ | SET_PARAMETER | C -> S, S -> C | P,S | SPR | R,r |
+ | | | | | |
+ | TEARDOWN | C -> S | P,S | TRD | |
+ | | | | | |
+ | | S -> C | P | TRD | |
+ +---------------+----------------+--------+---------+------+
+
+ This table is an overview of RTSP methods, their direction, and what
+ objects (P: presentation, S: stream) they operate on. "Body" denotes
+ if a method is allowed to carry body and in which direction; R =
+ request, r=response. Note: All error messages for statuses 4xx and
+ 5xx are allowed to carry a body.
+
+ Table 8: Overview of RTSP Methods
+
+ The general syntax for header fields is covered in Section 5.2. This
+ section lists the full set of header fields along with notes on
+ meaning and usage. The syntax definitions for header fields are
+ present in Section 20.2.3. Examples of each header field are given.
+
+ Information about header fields in relation to methods and proxy
+ processing is summarized in Figures 2, 3, 4, and 5.
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 124]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ The "where" column describes the request and response types in which
+ the header field can be used. Values in this column are:
+
+ R: header field may only appear in requests;
+
+ r: header field may only appear in responses;
+
+ 2xx, 4xx, etc.: numerical value or range indicates response codes
+ with which the header field can be used;
+
+ c: header field is copied from the request to the
+ response.
+
+ G: header field is a general-header and may be present
+ in both requests and responses.
+
+ Note: General headers do not always use the "G" value in the "where"
+ column. This is due to differences when the header may be applied in
+ requests compared to responses. When such differences exist, they
+ are expressed using two different rows: one with "where" being "R"
+ and one with it being "r".
+
+ The "proxy" column describes the operations a proxy may perform on a
+ header field. An empty proxy column indicates that the proxy MUST
+ NOT make any changes to that header, all allowed operations are
+ explicitly stated:
+
+ a: A proxy can add or concatenate the header field if not present.
+
+ m: A proxy can modify an existing header field value.
+
+ d: A proxy can delete a header field-value.
+
+ r: A proxy needs to be able to read the header field; thus, this
+ header field cannot be encrypted.
+
+ The rest of the columns relate to the presence of a header field in a
+ method. The method names when abbreviated, are according to Table 8:
+
+ c: Conditional; requirements on the header field depend on the
+ context of the message.
+
+ m: The header field is mandatory.
+
+ m*: The header field SHOULD be sent, but agents need to be prepared
+ to receive messages without that header field.
+
+ o: The header field is optional.
+
+
+
+Schulzrinne, et al. Standards Track [Page 125]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ *: The header field MUST be present if the message body is not
+ empty. See Sections 18.17, 18.19 and 5.3 for details.
+
+ -: The header field is not applicable.
+
+ "Optional" means that an agent MAY include the header field in a
+ request or response. The agent behavior when receiving such headers
+ varies; for some, it may ignore the header field. In other cases, it
+ is a request to process the header. This is regulated by the method
+ and header descriptions. Examples of headers that require processing
+ are the Require and Proxy-Require header fields discussed in Sections
+ 18.43 and 18.37. A "mandatory" header field MUST be present in a
+ request, and it MUST be understood by the agent receiving the
+ request. A mandatory response-header field MUST be present in the
+ response, and the header field MUST be understood by the processing
+ the response. "Not applicable" means that the header field MUST NOT
+ be present in a request. If one is placed in a request by mistake,
+ it MUST be ignored by the agent receiving the request. Similarly, a
+ header field labeled "not applicable" for a response means that the
+ agent MUST NOT place the header field in the response, and the agent
+ MUST ignore the header field in the response.
+
+ An RTSP agent MUST ignore extension headers that are not understood.
+
+ The From and Location header fields contain a URI. If the URI
+ contains a comma (') or semicolon (;), the URI MUST be enclosed in
+ double quotes ("). Any URI parameters are contained within these
+ quotes. If the URI is not enclosed in double quotes, any semicolon-
+ delimited parameters are header-parameters, not URI parameters.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 126]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ +-------------------+------+------+----+----+-----+-----+-----+-----+
+ | Header |Where |Proxy |DES | OPT| STP | PLY | PSE | TRD |
+ +-------------------+------+------+----+----+-----+-----+-----+-----+
+ | Accept | R | | o | - | - | - | - | - |
+ | Accept- | R | rm | o | o | o | o | o | o |
+ | Credentials | | | | | | | | |
+ | Accept-Encoding | R | r | o | - | - | - | - | - |
+ | Accept-Language | R | r | o | - | - | - | - | - |
+ | Accept-Ranges | G | r | - | - | m | - | - | - |
+ | Accept-Ranges | 456 | r | - | - | - | m | - | - |
+ | Allow | r | am | c | c | c | - | - | - |
+ | Allow | 405 | am | m | m | m | m | m | m |
+ | Authentication- | r | | o | o | o | o | o | o/- |
+ | Info | | | | | | | | |
+ | Authorization | R | | o | o | o | o | o | o/- |
+ | Bandwidth | R | | o | o | o | o | - | - |
+ | Blocksize | R | | o | - | o | o | - | - |
+ | Cache-Control | G | r | o | - | o | - | - | - |
+ | Connection | G | ad | o | o | o | o | o | o |
+ | Connection- | 470, | ar | o | o | o | o | o | o |
+ | Credentials | 407 | | | | | | | |
+ | Content-Base | r | | o | - | - | - | - | - |
+ | Content-Base | 4xx, | | o | o | o | o | o | o |
+ | | 5xx | | | | | | | |
+ | Content-Encoding | R | r | - | - | - | - | - | - |
+ | Content-Encoding | r | r | o | - | - | - | - | - |
+ | Content-Encoding | 4xx, | r | o | o | o | o | o | o |
+ | | 5xx | | | | | | | |
+ | Content-Language | R | r | - | - | - | - | - | - |
+ | Content-Language | r | r | o | - | - | - | - | - |
+ | Content-Language | 4xx, | r | o | o | o | o | o | o |
+ | | 5xx | | | | | | | |
+ | Content-Length | r | r | * | - | - | - | - | - |
+ | Content-Length | 4xx, | r | * | * | * | * | * | * |
+ | | 5xx | | | | | | | |
+ | Content-Location | r | r | o | - | - | - | - | - |
+ | Content-Location | 4xx, | r | o | o | o | o | o | o |
+ | | 5xx | | | | | | | |
+ | Content-Type | r | r | * | - | - | - | - | - |
+ | Content-Type | 4xx, | ar | * | * | * | * | * | * |
+ | | 5xx | | | | | | | |
+ | CSeq | Gc | rm | m | m | m | m | m | m |
+ | Date | G | am | o/*| o/*| o/* | o/* | o/* | o/* |
+ | Expires | r | r | o | - | o | - | - | - |
+ | From | R | r | o | o | o | o | o | o |
+ | If-Match | R | r | - | - | o | - | - | - |
+ | If-Modified-Since | R | r | o | - | o | - | - | - |
+ | If-None-Match | R | r | o | - | o | - | - | - |
+
+
+
+Schulzrinne, et al. Standards Track [Page 127]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ | Last-Modified | r | r | o | - | o | - | - | - |
+ | Location | 3rr | | m | m | m | m | m | m |
+ +-------------------+------+------+----+----+-----+-----+-----+-----+
+ | Header |Where |Proxy |DES | OPT| STP | PLY | PSE | TRD |
+ +-------------------+------+------+----+----+-----+-----+-----+-----+
+
+ Figure 2: Overview of RTSP Header Fields (A-L) Related to Methods
+ DESCRIBE, OPTIONS, SETUP, PLAY, PAUSE, and TEARDOWN
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 128]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ +------------------+---------+-----+----+----+----+-----+-----+-----+
+ | Header | Where |Proxy|DES |OPT |STP | PLY | PSE | TRD |
+ +------------------+---------+-----+----+----+----+-----+-----+-----+
+ | Media-Properties | r | | - | - | m | o | o | - |
+ | Media-Range | r | | - | - | c | c | c | - |
+ | MTag | r | r | o | - | o | - | - | - |
+ | Pipelined- | G | amd | - | o | o | o | o | o |
+ | Requests | | r | | | | | | |
+ | Proxy- | 407 | amr | m | m | m | m | m | m |
+ | Authenticate | | | | | | | | |
+ | Proxy- | r | amd | o | o | o | o | o | o/- |
+ | Authentication- | | r | | | | | | |
+ | Info | | | | | | | | |
+ | Proxy- | R | rd | o | o | o | o | o | o |
+ | Authorization | | | | | | | | |
+ | Proxy-Require | R | ar | o | o | o | o | o | o |
+ | Proxy-Require | r | r | c | c | c | c | c | c |
+ | Proxy-Supported | R | amr | c | c | c | c | c | c |
+ | Proxy-Supported | r | | c | c | c | c | c | c |
+ | Public | r | amr | - | m | - | - | - | - |
+ | Public | 501 | amr | m | m | m | m | m | m |
+ | Range | R | | - | - | - | o | - | - |
+ | Range | r | | - | - | c | m | m | - |
+ | Referrer | R | | o | o | o | o | o | o |
+ | Request-Status | R | | - | - | - | - | - | - |
+ | Require | R | | o | o | o | o | o | o |
+ | Retry-After | 3rr,503 | | o | o | o | o | o | - |
+ | | ,553 | | | | | | | |
+ | Retry-After | 413 | | o | - | - | - | - | - |
+ | RTP-Info | r | | - | - | c | c | - | - |
+ | Scale | R | r | - | - | - | o | - | - |
+ | Scale | r | amr | - | - | c | c | c | - |
+ | Seek-Style | R | | - | - | - | o | - | - |
+ | Seek-Style | r | | - | - | - | m | - | - |
+ | Server | R | r | - | o | - | - | - | o |
+ | Server | r | r | o | o | o | o | o | o |
+ | Session | R | r | - | o | o | m | m | m |
+ | Session | r | r | - | c | m | m | m | o |
+ | Speed | R | admr| - | - | - | o | - | - |
+ | Speed | r | admr| - | - | - | c | - | - |
+ | Supported | R | r | o | o | o | o | o | o |
+ | Supported | r | r | c | c | c | c | c | c |
+ | Terminate-Reason | R | r | - | - | - | - | - | -/o |
+ | Timestamp | R | admr| o | o | o | o | o | o |
+ | Timestamp | c | admr| m | m | m | m | m | m |
+ | Transport | G | mr | - | - | m | - | - | - |
+ | Unsupported | r | | c | c | c | c | c | c |
+ | User-Agent | R | | m* | m* | m* | m* | m* | m* |
+
+
+
+Schulzrinne, et al. Standards Track [Page 129]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ | Via | R | amr | c | c | c | c | c | c |
+ | Via | r | amr | c | c | c | c | c | c |
+ | WWW-Authenticate | 401 | | m | m | m | m | m | m |
+ +------------------+---------+-----+----+----+----+-----+-----+-----+
+ | Header | Where |Proxy|DES |OPT |STP | PLY | PSE | TRD |
+ +------------------+---------+-----+----+----+----+-----+-----+-----+
+
+ Figure 3: Overview of RTSP Header Fields (M-W) Related to Methods
+ DESCRIBE, OPTIONS, SETUP, PLAY, PAUSE, and TEARDOWN
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 130]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ +---------------------------+-------+-------+-----+-----+-----+-----+
+ | Header | Where | Proxy | GPR | SPR | RDR | PNY |
+ +---------------------------+-------+-------+-----+-----+-----+-----+
+ | Accept-Credentials | R | rm | o | o | o | - |
+ | Accept-Encoding | R | r | o | o | o | - |
+ | Accept-Language | R | r | o | o | o | - |
+ | Accept-Ranges | G | rm | o | - | - | - |
+ | Allow | 405 | amr | m | m | m | m |
+ | Authentication-Info | r | | o/- | o/- | - | - |
+ | Authorization | R | | o | o | o | - |
+ | Bandwidth | R | | - | o | - | - |
+ | Blocksize | R | | - | o | - | - |
+ | Cache-Control | G | r | o | o | - | - |
+ | Connection | G | | o | o | o | o |
+ | Connection-Credentials | 470, | ar | o | o | o | - |
+ | | 407 | | | | | |
+ | Content-Base | R | | o | o | - | o |
+ | Content-Base | r | | o | o | - | - |
+ | Content-Base | 4xx, | | o | o | o | o |
+ | | 5xx | | | | | |
+ | Content-Encoding | R | r | o | o | - | o |
+ | Content-Encoding | r | r | o | o | - | - |
+ | Content-Encoding | 4xx, | r | o | o | o | o |
+ | | 5xx | | | | | |
+ | Content-Language | R | r | o | o | - | o |
+ | Content-Language | r | r | o | o | - | - |
+ | Content-Language | 4xx, | r | o | o | o | o |
+ | | 5xx | | | | | |
+ | Content-Length | R | r | * | * | - | * |
+ | Content-Length | r | r | * | * | - | - |
+ | Content-Length | 4xx, | r | * | * | * | * |
+ | | 5xx | | | | | |
+ | Content-Location | R | | o | o | - | o |
+ | Content-Location | r | | o | o | - | - |
+ | Content-Location | 4xx, | | o | o | o | o |
+ | | 5xx | | | | | |
+ | Content-Type | R | | * | * | - | * |
+ | Content-Type | r | | * | * | - | - |
+ | Content-Type | 4xx, | | * | * | * | * |
+ | | 5xx | | | | | |
+ | CSeq | R,c | mr | m | m | m | m |
+ | Date | R | a | o/* | o/* | m | o/* |
+ | Date | r | am | o/* | o/* | o/* | o/* |
+ | Expires | r | r | - | - | - | - |
+ | From | R | r | o | o | o | - |
+ | If-Match | R | r | - | - | - | - |
+ | If-Modified-Since | R | am | o | - | - | - |
+ | If-None-Match | R | am | o | - | - | - |
+
+
+
+Schulzrinne, et al. Standards Track [Page 131]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ | Last-Modified | R | r | - | - | - | - |
+ | Last-Modified | r | r | o | - | - | - |
+ | Location | 3rr | | m | m | m | - |
+ | Location | R | | - | - | m | - |
+ +---------------------------+-------+-------+-----+-----+-----+-----+
+ | Header | Where | Proxy | GPR | SPR | RDR | PNY |
+ +---------------------------+-------+-------+-----+-----+-----+-----+
+
+ Figure 4: Overview of RTSP Header Fields (A-L) Related to Methods
+ GET_PARAMETER, SET_PARAMETER, REDIRECT, and PLAY_NOTIFY
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 132]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ +---------------------------+---------+-------+-----+-----+-----+-----+
+ | Header | Where | Proxy | GPR | SPR | RDR | PNY |
+ +---------------------------+---------+-------+-----+-----+-----+-----+
+ | Media-Properties | R | amr | o | - | - | c |
+ | Media-Properties | r | mr | c | - | - | - |
+ | Media-Range | R | | o | - | - | c |
+ | Media-Range | r | | c | - | - | - |
+ | MTag | r | r | o | - | - | - |
+ | Notify-Reason | R | | - | - | - | m |
+ | Pipelined-Requests | R | amdr | o | o | - | - |
+ | Proxy-Authenticate | 407 | amdr | m | m | m | - |
+ | Proxy-Authentication-Info | r | amdr | o/- | o/- | - | - |
+ | Proxy-Authorization | R | amdr | o | o | o | - |
+ | Proxy-Require | R | ar | o | o | o | - |
+ | Proxy-Supported | R | amr | c | c | c | - |
+ | Proxy-Supported | r | | c | c | c | - |
+ | Public | 501 | admr | m | m | m | - |
+ | Range | R | | o | - | - | m |
+ | Range | r | | c | - | - | - |
+ | Referrer | R | | o | o | o | - |
+ | Request-Status | R | mr | - | - | - | c |
+ | Require | R | r | o | o | o | o |
+ | Retry-After | 3rr,503,| | o | o | - | - |
+ | | 553 | | | | | |
+ | Retry-After | 413 | | o | o | - | - |
+ | RTP-Info | R | r | o | - | - | C |
+ | RTP-Info | r | r | c | - | - | - |
+ | Scale | G | | c | - | c | c |
+ | Seek-Style | G | | - | - | - | - |
+ | Server | R | r | o | o | o | o |
+ | Server | r | r | o | o | - | - |
+ | Session | R | r | o | o | o | m |
+ | Session | r | r | c | c | o | m |
+ | Speed | G | | - | - | - | - |
+ | Supported | R | r | o | o | o | - |
+ | Supported | r | r | c | c | c | - |
+ | Terminate-Reason | R | r | - | - | m | - |
+ | Timestamp | R | adrm | o | o | o | o |
+ | Timestamp | c | adrm | m | m | m | m |
+ | Transport | G | mr | - | - | - | - |
+ | Unsupported | r | arm | c | c | c | c |
+ | User-Agent | R | r | m* | m* | - | - |
+ | User-Agent | r | r | m* | m* | m* | m* |
+ | Via | R | amr | c | c | c | c |
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 133]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ | Via | r | amr | c | c | c | c |
+ | WWW-Authenticate | 401 | | m | m | m | - |
+ +---------------------------+---------+-------+-----+-----+-----+-----+
+ | Header | Where | Proxy | GPR | SPR | RDR | PNY |
+ +---------------------------+---------+-------+-----+-----+-----+-----+
+
+ Figure 5: Overview of RTSP Header Fields (M-W) Related to Methods
+ GET_PARAMETER, SET_PARAMETER, REDIRECT, and PLAY_NOTIFY
+
+18.1. Accept
+
+ The Accept request-header field can be used to specify certain
+ presentation description and parameter media types [RFC6838] that are
+ acceptable for the response to the DESCRIBE request.
+
+ See Section 20.2.3 for the syntax.
+
+ The asterisk "*" character is used to group media types into ranges,
+ with "*/*" indicating all media types and "type/*" indicating all
+ subtypes of that type. The range MAY include media type parameters
+ that are generally applicable to that range.
+
+ Each media type or range MAY be followed by one or more accept-
+ params, beginning with the "q" parameter to indicate a relative
+ quality factor. The first "q" parameter (if any) separates the media
+ type or range's parameters from the accept-params. Quality factors
+ allow the user or user agent to indicate the relative degree of
+ preference for that media type, using the qvalue scale from 0 to 1
+ (Section 5.3.1 of [RFC7231]). The default value is q=1.
+
+ Example of use:
+
+ Accept: application/example ;q=0.7, application/sdp
+
+ Indicates that the requesting agent prefers the media type
+ application/sdp through the default 1.0 rating but also accepts the
+ application/example media type with a 0.7 quality rating.
+
+ If no Accept header field is present, then it is assumed that the
+ client accepts all media types. If an Accept header field is
+ present, and if the server cannot send a response that is acceptable
+ according to the combined Accept field-value, then the server SHOULD
+ send a 406 (Not Acceptable) response.
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 134]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+18.2. Accept-Credentials
+
+ The Accept-Credentials header is a request-header used to indicate to
+ any trusted intermediary how to handle further secured connections to
+ proxies or servers. It MUST NOT be included in server-to-client
+ requests. See Section 19 for the usage of this header
+
+ In a request, the header MUST contain the method (User, Proxy, or
+ Any) for approving credentials selected by the requester. The method
+ MUST NOT be changed by any proxy, unless it is "Proxy" when a proxy
+ MAY change it to "user" to take the role of user approving each
+ further hop. If the method is "User", the header contains zero or
+ more of the credentials that the client accepts. The header may
+ contain zero credentials in the first RTSP request to an RTSP server
+ via a proxy when using the "User" method. This is because the client
+ has not yet received any credentials to accept. Each credential MUST
+ consist of one URI identifying the proxy or server, the hash
+ algorithm identifier, and the hash over that agent's ASN.1 DER-
+ encoded certificate [RFC5280] in Base64, according to Section 4 of
+ [RFC4648] and where the padding bits are set to zero. All RTSP
+ clients and proxies MUST implement the SHA-256 [FIPS180-4] algorithm
+ for computation of the hash of the DER-encoded certificate. The
+ SHA-256 algorithm is identified by the token "sha-256".
+
+ The intention of allowing for other hash algorithms is to enable the
+ future retirement of algorithms that are not implemented somewhere
+ other than here. Thus, the definition of future algorithms for this
+ purpose is intended to be extremely limited. A feature tag can be
+ used to ensure that support for the replacement algorithm exists.
+
+ Example:
+
+ Accept-Credentials:User
+ "rtsps://proxy2.example.com/";sha-256;exaIl9VMbQMOFGClx5rXnPJKVNI=,
+ "rtsps://server.example.com/";sha-256;lurbjj5khhB0NhIuOXtt4bBRH1M=
+
+18.3. Accept-Encoding
+
+ The Accept-Encoding request-header field is similar to Accept, but it
+ restricts the content-codings (see Section 18.15), i.e.,
+ transformation codings of the message body, such as gzip compression,
+ that are acceptable in the response.
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 135]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ A server tests whether a content-coding is acceptable, according to
+ an Accept-Encoding field, using these rules:
+
+ 1. If the content-coding is one of the content-codings listed in the
+ Accept-Encoding field, then it is acceptable, unless it is
+ accompanied by a qvalue of 0. (As defined in Section 5.3.1 of
+ [RFC7231], a qvalue of 0 means "not acceptable.")
+
+ 2. The special "*" symbol in an Accept-Encoding field matches any
+ available content-coding not explicitly listed in the header
+ field.
+
+ 3. If multiple content-codings are acceptable, then the acceptable
+ content-coding with the highest non-zero qvalue is preferred.
+
+ 4. The "identity" content-coding is always acceptable, i.e., no
+ transformation at all, unless specifically refused because the
+ Accept-Encoding field includes "identity;q=0" or because the
+ field includes "*;q=0" and does not explicitly include the
+ "identity" content-coding. If the Accept-Encoding field-value is
+ empty, then only the "identity" encoding is acceptable.
+
+ If an Accept-Encoding field is present in a request, and if the
+ server cannot send a response that is acceptable according to the
+ Accept-Encoding header, then the server SHOULD send an error response
+ with the 406 (Not Acceptable) status code.
+
+ If no Accept-Encoding field is present in a request, the server MAY
+ assume that the client will accept any content-coding. In this case,
+ if "identity" is one of the available content-codings, then the
+ server SHOULD use the "identity" content-coding, unless it has
+ additional information that a different content-coding is meaningful
+ to the client.
+
+18.4. Accept-Language
+
+ The Accept-Language request-header field is similar to Accept, but
+ restricts the set of natural languages that are preferred as a
+ response to the request. Note that the language specified applies to
+ the presentation description (response message body) and any reason
+ phrases, but not the media content.
+
+ A language tag identifies a natural language spoken, written, or
+ otherwise conveyed by human beings for communication of information
+ to other human beings. Computer languages are explicitly excluded.
+ The syntax and registry of RTSP 2.0 language tags are the same as
+ those defined by [RFC5646].
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 136]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Each language-range MAY be given an associated quality value that
+ represents an estimate of the user's preference for the languages
+ specified by that range. The quality value defaults to "q=1". For
+ example:
+
+ Accept-Language: da, en-gb;q=0.8, en;q=0.7
+
+ would mean: "I prefer Danish, but will accept British English and
+ other types of English." A language-range matches a language tag if
+ it exactly equals the full tag or if it exactly equals a prefix of
+ the tag, i.e., the primary-tag in the ABNF, such that the character
+ following primary-tag is "-". The special range "*", if present in
+ the Accept-Language field, matches every tag not matched by any other
+ range present in the Accept-Language field.
+
+ Note: This use of a prefix matching rule does not imply that
+ language tags are assigned to languages in such a way that it is
+ always true that if a user understands a language with a certain
+ tag, then this user will also understand all languages with tags
+ for which this tag is a prefix. The prefix rule simply allows the
+ use of prefix tags if this is the case.
+
+ In the process of selecting a language, each language tag is assigned
+ a qualification factor, i.e., if a language being supported by the
+ client is actually supported by the server and what "preference"
+ level the language achieves. The quality value (q-value) of the
+ longest language-range in the field that matches the language tag is
+ assigned as the qualification factor for a particular language tag.
+ If no language-range in the field matches the tag, the language
+ qualification factor assigned is 0. If no Accept-Language header is
+ present in the request, the server SHOULD assume that all languages
+ are equally acceptable. If an Accept-Language header is present,
+ then all languages that are assigned a qualification factor greater
+ than 0 are acceptable.
+
+18.5. Accept-Ranges
+
+ The Accept-Ranges general-header field allows indication of the
+ format supported in the Range header. The client MUST include the
+ header in SETUP requests to indicate which formats are acceptable
+ when received in PLAY and PAUSE responses and REDIRECT requests. The
+ server MUST include the header in SETUP responses and 456 (Header
+ Field Not Valid for Resource) error responses to indicate the formats
+ supported for the resource indicated by the Request-URI. The header
+ MAY be included in GET_PARAMETER request and response pairs. The
+ GET_PARAMETER request MUST contain a Session header to identify the
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 137]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ session context the request is related to. The requester and
+ responder will indicate their capabilities regarding Range formats
+ respectively.
+
+ Accept-Ranges: npt, smpte, clock
+
+ The syntax is defined in Section 20.2.3.
+
+18.6. Allow
+
+ The Allow message body header field lists the methods supported by
+ the resource identified by the Request-URI. The purpose of this
+ field is to inform the recipient of the complete set of valid methods
+ associated with the resource. An Allow header field MUST be present
+ in a 405 (Method Not Allowed) response. The Allow header MUST also
+ be present in all OPTIONS responses where the content of the header
+ will not include exactly the same methods as listed in the Public
+ header.
+
+ The Allow message body header MUST also be included in SETUP and
+ DESCRIBE responses, if the methods allowed for the resource are
+ different from the complete set of methods defined in this memo.
+
+ Example of use:
+
+ Allow: SETUP, PLAY, SET_PARAMETER, DESCRIBE
+
+18.7. Authentication-Info
+
+ The Authentication-Info response-header is used by the server to
+ communicate some information regarding the successful HTTP
+ authentication [RFC7235] in the response message. The definition of
+ the header is in [RFC7615], and any applicable HTTP authentication
+ schemes appear in other RFCs, such as Digest [RFC7616]. This header
+ MUST only be used in response messages related to client to server
+ requests.
+
+18.8. Authorization
+
+ An RTSP client that wishes to authenticate itself with a server using
+ the authentication mechanism from HTTP [RFC7235], usually (but not
+ necessarily) after receiving a 401 response, does so by including an
+ Authorization request-header field with the request. The
+ Authorization field-value consists of credentials containing the
+ authentication information of the user agent for the realm of the
+ resource being requested. The definition of the header is in
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 138]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ [RFC7235], and any applicable HTTP authentication schemes appear in
+ other RFCs, such as Digest [RFC7616] and Basic [RFC7617]. This
+ header MUST only be used in client-to-server requests.
+
+ If a request is authenticated and a realm specified, the same
+ credentials SHOULD be valid for all other requests within this realm
+ (assuming that the authentication scheme itself does not require
+ otherwise, such as credentials that vary according to a challenge
+ value or using synchronized clocks). Each client-to-server request
+ MUST be individually authorized by including the Authorization header
+ with the information.
+
+ When a shared cache (see Section 16) receives a request containing an
+ Authorization field, it MUST NOT return the corresponding response as
+ a reply to any other request, unless one of the following specific
+ exceptions holds:
+
+ 1. If the response includes the "max-age" cache directive, the cache
+ MAY use that response in replying to a subsequent request. But
+ (if the specified maximum age has passed) a proxy cache MUST
+ first revalidate it with the origin server, using the request-
+ headers from the new request to allow the origin server to
+ authenticate the new request. (This is the defined behavior for
+ max-age.) If the response includes "max-age=0", the proxy MUST
+ always revalidate it before reusing it.
+
+ 2. If the response includes the "must-revalidate" cache-control
+ directive, the cache MAY use that response in replying to a
+ subsequent request. But if the response is stale, all caches
+ MUST first revalidate it with the origin server, using the
+ request-headers from the new request to allow the origin server
+ to authenticate the new request.
+
+ 3. If the response includes the "public" cache directive, it MAY be
+ returned in reply to any subsequent request.
+
+18.9. Bandwidth
+
+ The Bandwidth request-header field describes the estimated bandwidth
+ available to the client, expressed as a positive integer and measured
+ in kilobits per second. The bandwidth available to the client may
+ change during an RTSP session, e.g., due to mobility, congestion,
+ etc.
+
+ Clients may not be able to accurately determine the available
+ bandwidth, for example, because the first hop is not a bottleneck.
+ Such a case is when the local area network (LAN) is not the
+ bottleneck, instead the LAN's Internet access link is, if the server
+
+
+
+Schulzrinne, et al. Standards Track [Page 139]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ is not in the same LAN. Thus, link speeds of WLAN or Ethernet
+ networks are normally not a basis for estimating the available
+ bandwidth. Cellular devices or other devices directly connected to a
+ modem or connection-enabling device may more accurately estimate the
+ bottleneck bandwidth and what is a reasonable share of it for RTSP-
+ controlled media. The client will also need to take into account
+ other traffic sharing the bottleneck. For example, by only assigning
+ a certain fraction to RTSP and its media streams. It is RECOMMENDED
+ that only clients that have accurate and explicit information about
+ bandwidth bottlenecks use this header.
+
+ This header is not a substitute for proper congestion control. It is
+ only a method providing an initial estimate and coarsely determines
+ if the selected content can be delivered at all.
+
+ Example:
+
+ Bandwidth: 62360
+
+18.10. Blocksize
+
+ The Blocksize request-header field is sent from the client to the
+ media server asking the server for a particular media packet size.
+ This packet size does not include lower-layer headers such as IP,
+ UDP, or RTP. The server is free to use a blocksize that is lower
+ than the one requested. The server MAY truncate this packet size to
+ the closest multiple of the minimum, media-specific block size or
+ override it with the media-specific size, if necessary. The block
+ size MUST be a positive decimal number measured in octets. The
+ server only returns an error (4xx) if the value is syntactically
+ invalid.
+
+18.11. Cache-Control
+
+ The Cache-Control general-header field is used to specify directives
+ that MUST be obeyed by all caching mechanisms along the request/
+ response chain.
+
+ Cache directives MUST be passed through by a proxy or gateway
+ application, regardless of their significance to that application,
+ since the directives may be applicable to all recipients along the
+ request/response chain. It is not possible to specify a cache-
+ directive for a specific cache.
+
+ Cache-Control should only be specified in a DESCRIBE, GET_PARAMETER,
+ SET_PARAMETER, and SETUP request and its response. Note: Cache-
+ Control does not govern only the caching of responses for the RTSP
+ messages, instead it also applies to the media stream identified by
+
+
+
+Schulzrinne, et al. Standards Track [Page 140]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ the SETUP request. The RTSP requests are generally not cacheable;
+ for further information, see Section 16. Below are the descriptions
+ of the cache directives that can be included in the Cache-Control
+ header.
+
+ no-cache: Indicates that the media stream or RTSP response MUST NOT
+ be cached anywhere. This allows an origin server to prevent
+ caching even by caches that have been configured to return
+ stale responses to client requests. Note: there is no security
+ function preventing the caching of content.
+
+ public: Indicates that the media stream or RTSP response is
+ cacheable by any cache.
+
+ private: Indicates that the media stream or RTSP response is
+ intended for a single user and MUST NOT be cached by a shared
+ cache. A private (non-shared) cache may cache the media
+ streams.
+
+ no-transform: An intermediate cache (proxy) may find it useful to
+ convert the media type of a certain stream. A proxy might, for
+ example, convert between video formats to save cache space or
+ to reduce the amount of traffic on a slow link. Serious
+ operational problems may occur, however, when these
+ transformations have been applied to streams intended for
+ certain kinds of applications. For example, applications for
+ medical imaging, scientific data analysis and those using end-
+ to-end authentication all depend on receiving a stream that is
+ bit-for-bit identical to the original media stream or RTSP
+ response. Therefore, if a response includes the no-transform
+ directive, an intermediate cache or proxy MUST NOT change the
+ encoding of the stream or response. Unlike HTTP, RTSP does not
+ provide for partial transformation at this point, e.g.,
+ allowing translation into a different language.
+
+ only-if-cached: In some cases, such as times of extremely poor
+ network connectivity, a client may want a cache to return only
+ those media streams or RTSP responses that it currently has
+ stored and not to receive these from the origin server. To do
+ this, the client may include the only-if-cached directive in a
+ request. If the cache receives this directive, it SHOULD
+ either respond using a cached media stream or response that is
+ consistent with the other constraints of the request or respond
+ with a 504 (Gateway Timeout) status. However, if a group of
+ caches is being operated as a unified system with good internal
+ connectivity, such a request MAY be forwarded within that group
+ of caches.
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 141]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ max-stale: Indicates that the client is willing to accept a media
+ stream or RTSP response that has exceeded its expiration time.
+ If max-stale is assigned a value, then the client is willing to
+ accept a response that has exceeded its expiration time by no
+ more than the specified number of seconds. If no value is
+ assigned to max-stale, then the client is willing to accept a
+ stale response of any age.
+
+ min-fresh: Indicates that the client is willing to accept a media
+ stream or RTSP response whose freshness lifetime is no less
+ than its current age plus the specified time in seconds. That
+ is, the client wants a response that will still be fresh for at
+ least the specified number of seconds.
+
+ must-revalidate: When the must-revalidate directive is present in a
+ SETUP response received by a cache, that cache MUST NOT use the
+ cache entry after it becomes stale to respond to a subsequent
+ request without first revalidating it with the origin server.
+ That is, the cache is required to do an end-to-end revalidation
+ every time, if, based solely on the origin server's Expires,
+ the cached response is stale.
+
+ proxy-revalidate: The proxy-revalidate directive has the same
+ meaning as the must-revalidate directive, except that it does
+ not apply to non-shared user agent caches. It can be used on a
+ response to an authenticated request to permit the user's cache
+ to store and later return the response without needing to
+ revalidate it (since it has already been authenticated once by
+ that user), while still requiring proxies that service many
+ users to revalidate each time (in order to make sure that each
+ user has been authenticated). Note that such authenticated
+ responses also need the "public" cache directive in order to
+ allow them to be cached at all.
+
+ max-age: When an intermediate cache is forced, by means of a max-
+ age=0 directive, to revalidate its own cache entry, and the
+ client has supplied its own validator in the request, the
+ supplied validator might differ from the validator currently
+ stored with the cache entry. In this case, the cache MAY use
+ either validator in making its own request without affecting
+ semantic transparency.
+
+ However, the choice of validator might affect performance. The
+ best approach is for the intermediate cache to use its own
+ validator when making its request. If the server replies with
+ 304 (Not Modified), then the cache can return its now validated
+ copy to the client with a 200 (OK) response. If the server
+ replies with a new message body and cache validator, however,
+
+
+
+Schulzrinne, et al. Standards Track [Page 142]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ the intermediate cache can compare the returned validator with
+ the one provided in the client's request, using the strong
+ comparison function. If the client's validator is equal to the
+ origin server's, then the intermediate cache simply returns 304
+ (Not Modified). Otherwise, it returns the new message body
+ with a 200 (OK) response.
+
+18.12. Connection
+
+ The Connection general-header field allows the sender to specify
+ options that are desired for that particular connection. It MUST NOT
+ be communicated by proxies over further connections.
+
+ RTSP 2.0 proxies MUST parse the Connection header field before a
+ message is forwarded and, for each connection-token in this field,
+ remove any header field(s) from the message with the same name as the
+ connection-token. Connection options are signaled by the presence of
+ a connection-token in the Connection header field, not by any
+ corresponding additional header field(s), since the additional header
+ field may not be sent if there are no parameters associated with that
+ connection option.
+
+ Message headers listed in the Connection header MUST NOT include end-
+ to-end headers, such as Cache-Control.
+
+ RTSP 2.0 defines the "close" connection option for the sender to
+ signal that the connection will be closed after completion of the
+ response. For example, "Connection: close in either the request or
+ the response-header fields" indicates that the connection SHOULD NOT
+ be considered "persistent" (Section 10.2) after the current request/
+ response is complete.
+
+ The use of the connection option "close" in RTSP messages SHOULD be
+ limited to error messages when the server is unable to recover and
+ therefore sees it necessary to close the connection. The reason
+ being that the client has the choice of continuing using a connection
+ indefinitely, as long as it sends valid messages.
+
+18.13. Connection-Credentials
+
+ The Connection-Credentials response-header is used to carry the chain
+ of credentials for any next hop that needs to be approved by the
+ requester. It MUST only be used in server-to-client responses.
+
+ The Connection-Credentials header in an RTSP response MUST, if
+ included, contain the credential information (in the form of a list
+ of certificates providing the chain of certification) of the next hop
+ to which an intermediary needs to securely connect. The header MUST
+
+
+
+Schulzrinne, et al. Standards Track [Page 143]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ include the URI of the next hop (proxy or server) and a
+ Base64-encoded (according to Section 4 of [RFC4648] and where the
+ padding bits are set to zero) binary structure containing a sequence
+ of DER-encoded X.509v3 certificates [RFC5280].
+
+ The binary structure starts with the number of certificates
+ (NR_CERTS) included as a 16-bit unsigned integer. This is followed
+ by an NR_CERTS number of 16-bit unsigned integers providing the size,
+ in octets, of each DER-encoded certificate. This is followed by an
+ NR_CERTS number of DER-encoded X.509v3 certificates in a sequence
+ (chain). This format is exemplified in Figure 6. The certificate of
+ the proxy or server must come first in the structure. Each following
+ certificate must directly certify the one preceding it. Because
+ certificate validation requires that root keys be distributed
+ independently, the self-signed certificate that specifies the root
+ certificate authority may optionally be omitted from the chain, under
+ the assumption that the remote end must already possess it in order
+ to validate it in any case.
+
+ Example:
+
+ Connection-Credentials:"rtsps://proxy2.example.com/";MIIDNTCC...
+
+ Where MIIDNTCC... is a Base64 encoding of the following structure:
+
+ 0 1 2 3
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Number of certificates | Size of certificate #1 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Size of certificate #2 | Size of certificate #3 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ : DER Encoding of Certificate #1 :
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ : DER Encoding of Certificate #2 :
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ : DER Encoding of Certificate #3 :
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Figure 6: Format Example of Connection-Credentials Header Certificate
+
+18.14. Content-Base
+
+ The Content-Base message body header field may be used to specify the
+ base URI for resolving relative URIs within the message body.
+
+ Content-Base: rtsp://media.example.com/movie/twister/
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 144]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ If no Content-Base field is present, the base URI of a message body
+ is defined by either its Content-Location (if that Content-Location
+ URI is an absolute URI) or the URI used to initiate the request, in
+ that order of precedence. Note, however, that the base URI of the
+ contents within the message body may be redefined within that message
+ body.
+
+18.15. Content-Encoding
+
+ The Content-Encoding message body header field is used as a modifier
+ of the media-type. When present, its value indicates what additional
+ content-codings have been applied to the message body, and thus what
+ decoding mechanisms must be applied in order to obtain the media-type
+ referenced by the Content-Type header field. Content-Encoding is
+ primarily used to allow a document to be compressed without losing
+ the identity of its underlying media type.
+
+ The content-coding is a characteristic of the message body identified
+ by the Request-URI. Typically, the message body is stored with this
+ encoding and is only decoded before rendering or analogous usage.
+ However, an RTSP proxy MAY modify the content-coding if the new
+ coding is known to be acceptable to the recipient, unless the "no-
+ transform" cache directive is present in the message.
+
+ If the content-coding of a message body is not "identity", then the
+ message MUST include a Content-Encoding message body header that
+ lists the non-identity content-coding(s) used.
+
+ If the content-coding of a message body in a request message is not
+ acceptable to the origin server, the server SHOULD respond with a
+ status code of 415 (Unsupported Media Type).
+
+ If multiple encodings have been applied to a message body, the
+ content-codings MUST be listed in the order in which they were
+ applied, first to last from left to right. Additional information
+ about the encoding parameters MAY be provided by other header fields
+ not defined by this specification.
+
+18.16. Content-Language
+
+ The Content-Language message body header field describes the natural
+ language(s) of the intended audience for the enclosed message body.
+ Note that this might not be equivalent to all the languages used
+ within the message body.
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 145]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Language tags are mentioned in Section 18.4. The primary purpose of
+ Content-Language is to allow a user to identify and differentiate
+ entities according to the user's own preferred language. Thus, if
+ the body content is intended only for a Danish-literate audience, the
+ appropriate field is
+
+ Content-Language: da
+
+ If no Content-Language is specified, the default is that the content
+ is intended for all language audiences. This might mean that the
+ sender does not consider it to be specific to any natural language or
+ that the sender does not know for which language it is intended.
+
+ Multiple languages MAY be listed for content that is intended for
+ multiple audiences. For example, a rendition of the "Treaty of
+ Waitangi", presented simultaneously in the original Maori and English
+ versions, would call for
+
+ Content-Language: mi, en
+
+ However, just because multiple languages are present within a message
+ body does not mean that it is intended for multiple linguistic
+ audiences. An example would be a beginner's language primer, such as
+ "A First Lesson in Latin", which is clearly intended to be used by an
+ English-literate audience. In this case, the Content-Language would
+ properly only include "en".
+
+ Content-Language MAY be applied to any media type -- it is not
+ limited to textual documents.
+
+18.17. Content-Length
+
+ The Content-Length message body header field contains the length of
+ the message body of the RTSP message (i.e., after the double CRLF
+ following the last header) in octets of bits. Unlike HTTP, it MUST
+ be included in all messages that carry a message body beyond the
+ header portion of the RTSP message. If it is missing, a default
+ value of zero is assumed. Any Content-Length greater than or equal
+ to zero is a valid value.
+
+18.18. Content-Location
+
+ The Content-Location message body header field MAY be used to supply
+ the resource location for the message body enclosed in the message
+ when that body is accessible from a location separate from the
+ requested resource's URI. A server SHOULD provide a Content-Location
+ for the variant corresponding to the response message body;
+ especially in the case where a resource has multiple variants
+
+
+
+Schulzrinne, et al. Standards Track [Page 146]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ associated with it, and those entities actually have separate
+ locations by which they might be individually accessed, the server
+ SHOULD provide a Content-Location for the particular variant that is
+ returned.
+
+ As an example, if an RTSP client performs a DESCRIBE request on a
+ given resource, e.g., "rtsp://a.example.com/movie/
+ Plan9FromOuterSpace", then the server may use additional information,
+ such as the User-Agent header, to determine the capabilities of the
+ agent. The server will then return a media description tailored to
+ that class of RTSP agents. To indicate which specific description
+ the agent receives, the resource identifier
+ ("rtsp://a.example.com/movie/Plan9FromOuterSpace/FullHD.sdp") is
+ provided in Content-Location, while the description is still a valid
+ response for the generic resource identifier, thus enabling both
+ debugging and cache operation as discussed below.
+
+ The Content-Location value is not a replacement for the original
+ requested URI; it is only a statement of the location of the resource
+ corresponding to this particular variant at the time of the request.
+ Future requests MAY specify the Content-Location URI as the Request-
+ URI if the desire is to identify the source of that particular
+ variant. This is useful if the RTSP agent desires to verify if the
+ resource variant is current through a conditional request.
+
+ A cache cannot assume that a message body with a Content-Location
+ different from the URI used to retrieve it can be used to respond to
+ later requests on that Content-Location URI. However, the Content-
+ Location can be used to differentiate between multiple variants
+ retrieved from a single requested resource.
+
+ If the Content-Location is a relative URI, the relative URI is
+ interpreted relative to the Request-URI.
+
+ Note that Content-Location can be used in some cases to derive the
+ base-URI for relative URI(s) present in session description formats.
+ This needs to be taken into account when Content-Location is used.
+ The easiest way to avoid needing to consider that issue is to include
+ the Content-Base whenever the Content-Location is included.
+
+ Note also, when using Media Tags in conjunction with Content-
+ Location, it is important that the different versions have different
+ MTags, even if provided under different Content-Location URIs. This
+ is because the different content variants still have been provided in
+ response to the same request URI.
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 147]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Note also, as in most cases, the URIs used in the DESCRIBE and the
+ SETUP requests are different: the URI provided in a DESCRIBE Content-
+ Location response can't directly be used in a SETUP request.
+ Instead, the steps of deriving the media resource URIs are necessary.
+ This commonly involves combing the media description's relative URIs,
+ e.g., from the SDP's a=control attribute, with the base-URI to create
+ the absolute URIs needed in the SETUP request.
+
+18.19. Content-Type
+
+ The Content-Type message body header indicates the media type of the
+ message body sent to the recipient. Note that the content types
+ suitable for RTSP are likely to be restricted in practice to
+ presentation descriptions and parameter-value types.
+
+18.20. CSeq
+
+ The CSeq general-header field specifies the sequence number (integer)
+ for an RTSP request/response pair. This field MUST be present in all
+ requests and responses. RTSP agents maintain a sequence number
+ series for each responder to which they have an open message
+ transport channel. For each new RTSP request an agent originates on
+ a particular RTSP message transport, the CSeq value MUST be
+ incremented by one. The initial sequence number can be any number;
+ however, it is RECOMMENDED to start at 0. Each sequence number
+ series is unique between each requester and responder, i.e., the
+ client has one series for its requests to a server and the server has
+ another when sending requests to the client. Each requester and
+ responder is identified by its socket address (IP address and port
+ number), i.e., per direction of a TCP connection. Any retransmitted
+ request MUST contain the same sequence number as the original, i.e.,
+ the sequence number is not incremented for retransmissions of the
+ same request. The RTSP agent receiving requests MUST process the
+ requests arriving on a particular transport in the order of the
+ sequence numbers. Responses are sent in the order that they are
+ generated. The RTSP response MUST have the same sequence number as
+ was present in the corresponding request. An RTSP agent receiving a
+ response MAY receive the responses out of order compared to the order
+ of the requests it sent. Thus, the agent MUST use the sequence
+ number in the response to pair it with the corresponding request.
+
+ The main purpose of the sequence number is to map responses to
+ requests.
+
+ The requirement to use a sequence-number increment of one for each
+ new request is to support any future specification of RTSP message
+ transport over a protocol that does not provide in-order delivery
+ or is unreliable.
+
+
+
+Schulzrinne, et al. Standards Track [Page 148]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ The above rules relating to the initial sequence number may appear
+ unnecessarily loose. The reason for this is to cater to some
+ common behavior of existing implementations: when using multiple
+ reliable connections in sequence, it may still be easiest to use a
+ single sequence-number series for a client connecting with a
+ particular server. Thus, the initial sequence number may be
+ arbitrary depending on the number of previous requests. For any
+ unreliable transport, a stricter definition or other solution will
+ be required to enable detection of any loss of the first request.
+
+ When using multiple sequential transport connections, there is no
+ protocol mechanism to ensure in-order processing as the sequence
+ number is scoped on the individual transport connection and its
+ five tuple. Thus, there are potential issues with opening a new
+ transport connection to the same host for which there already
+ exists a transport connection with outstanding requests and
+ previously dispatched requests related to the same RTSP session.
+
+ RTSP Proxies also need to follow the above rules. This implies that
+ proxies that aggregate requests from multiple clients onto a single
+ transport towards a server or a next-hop proxy need to renumber these
+ requests to form a unified sequence on that transport, fulfilling the
+ above rules. A proxy capable of fulfilling some agent's request
+ without emitting its own request (e.g., a caching proxy that fulfills
+ a request from its cache) also causes a need to renumber as the
+ number of received requests with a particular target may not be the
+ same as the number of emitted requests towards that target agent. A
+ proxy that needs to renumber needs to perform the corresponding
+ renumbering back to the original sequence number for any received
+ response before forwarding it back to the originator of the request.
+
+ A client connected to a proxy, and using that transport to send
+ requests to multiple servers, creates a situation where it is
+ quite likely to receive the responses out of order. This is
+ because the proxy will establish separate transports from the
+ proxy to the servers on which to forward the client's requests.
+ When the responses arrive from the different servers, they will be
+ forwarded to the client in the order they arrive at the proxy and
+ can be processed, not the order of the client's original sequence
+ numbers. This is intentional to avoid some session's requests
+ being blocked by another server's slow processing of requests.
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 149]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+18.21. Date
+
+ The Date general-header field represents the date and time at which
+ the message was originated. The inclusion of the Date header in an
+ RTSP message follows these rules:
+
+ o An RTSP message, sent by either the client or the server,
+ containing a body MUST include a Date header, if the sending host
+ has a clock;
+
+ o Clients and servers are RECOMMENDED to include a Date header in
+ all other RTSP messages, if the sending host has a clock;
+
+ o If the server does not have a clock that can provide a reasonable
+ approximation of the current time, its responses MUST NOT include
+ a Date header field. In this case, this rule MUST be followed:
+ some origin-server implementations might not have a clock
+ available. An origin server without a clock MUST NOT assign
+ Expires or Last-Modified values to a response, unless these values
+ were associated with the resource by a system or user with a
+ reliable clock. It MAY assign an Expires value that is known, at
+ or before server-configuration time, to be in the past (this
+ allows "pre-expiration" of responses without storing separate
+ Expires values for each resource).
+
+ A received message that does not have a Date header field MUST be
+ assigned one by the recipient if the message will be cached by that
+ recipient. An RTSP implementation without a clock MUST NOT cache
+ responses without revalidating them on every use. An RTSP cache,
+ especially a shared cache, SHOULD use a mechanism, such as the
+ Network Time Protocol (NTP) [RFC5905], to synchronize its clock with
+ a reliable external standard.
+
+ The RTSP-date, a full date as specified by Section 3.3 of [RFC5322],
+ sent in a Date header SHOULD NOT represent a date and time subsequent
+ to the generation of the message. It SHOULD represent the best
+ available approximation of the date and time of message generation,
+ unless the implementation has no means of generating a reasonably
+ accurate date and time. In theory, the date ought to represent the
+ moment just before the message body is generated. In practice, the
+ date can be generated at any time during the message origination
+ without affecting its semantic value.
+
+ Note: The RTSP 2.0 date format is defined to be the full-date
+ format in RFC 5322. This format is more flexible than the date
+ format in RFC 1123 used by RTSP 1.0. Thus, implementations should
+ use single spaces as separators, as recommended by RFC 5322, and
+ support receiving the obsolete format.
+
+
+
+Schulzrinne, et al. Standards Track [Page 150]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Further, note that the syntax allows for a comment to be added at
+ the end of the date.
+
+18.22. Expires
+
+ The Expires message body header field gives a date and time after
+ which the description or media-stream should be considered stale.
+ The interpretation depends on the method:
+
+ DESCRIBE response: The Expires header indicates a date and time
+ after which the presentation description (body) SHOULD be
+ considered stale.
+
+ SETUP response: The Expires header indicates a date and time after
+ which the media stream SHOULD be considered stale.
+
+ A stale cache entry should not be returned by a cache (either a proxy
+ cache or a user agent cache) unless it is first validated with the
+ origin server (or with an intermediate cache that has a fresh copy of
+ the message body). See Section 16 for further discussion of the
+ expiration model.
+
+ The presence of an Expires field does not imply that the original
+ resource will change or cease to exist at, before, or after that
+ time.
+
+ The format is an absolute date and time as defined by RTSP-date. An
+ example of its use is
+
+ Expires: Wed, 23 Jan 2013 15:36:52 +0000
+
+ RTSP 2.0 clients and caches MUST treat other invalid date formats,
+ especially those including the value "0", as having occurred in the
+ past (i.e., already expired).
+
+ To mark a response as "already expired," an origin server should use
+ an Expires date that is equal to the Date header value. To mark a
+ response as "never expires", an origin server SHOULD use an Expires
+ date approximately one year from the time the response is sent. RTSP
+ 2.0 servers SHOULD NOT send Expires dates that are more than one year
+ in the future.
+
+18.23. From
+
+ The From request-header field, if given, SHOULD contain an Internet
+ email address for the human user who controls the requesting user
+ agent. The address SHOULD be machine usable, as defined by "mailbox"
+ in [RFC1123].
+
+
+
+Schulzrinne, et al. Standards Track [Page 151]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ This header field MAY be used for logging purposes and as a means for
+ identifying the source of invalid or unwanted requests. It SHOULD
+ NOT be used as an insecure form of access protection. The
+ interpretation of this field is that the request is being performed
+ on behalf of the person given, who accepts responsibility for the
+ method performed. In particular, robot agents SHOULD include this
+ header so that the person responsible for running the robot can be
+ contacted if problems occur on the receiving end.
+
+ The Internet email address in this field MAY be separate from the
+ Internet host that issued the request. For example, when a request
+ is passed through a proxy, the original issuer's address SHOULD be
+ used.
+
+ The client SHOULD NOT send the From header field without the user's
+ approval, as it might conflict with the user's privacy interests or
+ their site's security policy. It is strongly recommended that the
+ user be able to disable, enable, and modify the value of this field
+ at any time prior to a request.
+
+18.24. If-Match
+
+ The If-Match request-header field is especially useful for ensuring
+ the integrity of the presentation description, independent of how the
+ presentation description was received. The presentation description
+ can be fetched via means external to RTSP (such as HTTP) or via the
+ DESCRIBE message. In the case of retrieving the presentation
+ description via RTSP, the server implementation is guaranteeing the
+ integrity of the description between the time of the DESCRIBE message
+ and the SETUP message. By including the MTag given in or with the
+ session description in an If-Match header part of the SETUP request,
+ the client ensures that resources set up are matching the
+ description. A SETUP request with the If-Match header for which the
+ MTag validation check fails MUST generate a response using 412
+ (Precondition Failed).
+
+ This validation check is also very useful if a session has been
+ redirected from one server to another.
+
+18.25. If-Modified-Since
+
+ The If-Modified-Since request-header field is used with the DESCRIBE
+ and SETUP methods to make them conditional. If the requested variant
+ has not been modified since the time specified in this field, a
+ description will not be returned from the server (DESCRIBE) or a
+ stream will not be set up (SETUP). Instead, a 304 (Not Modified)
+ response MUST be returned without any message body.
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 152]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ An example of the field is:
+
+ If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT
+
+18.26. If-None-Match
+
+ This request-header can be used with one or several message body tags
+ to make DESCRIBE requests conditional. A client that has one or more
+ message bodies previously obtained from the resource can verify that
+ none of those entities is current by including a list of their
+ associated message body tags in the If-None-Match header field. The
+ purpose of this feature is to allow efficient updates of cached
+ information with a minimum amount of transaction overhead. As a
+ special case, the value "*" matches any current entity of the
+ resource.
+
+ If any of the message body tags match the message body tag of the
+ message body that would have been returned in the response to a
+ similar DESCRIBE request (without the If-None-Match header) on that
+ resource, or if "*" is given and any current entity exists for that
+ resource, then the server MUST NOT perform the requested method,
+ unless required to do so because the resource's modification date
+ fails to match that supplied in an If-Modified-Since header field in
+ the request. Instead, if the request method was DESCRIBE, the server
+ SHOULD respond with a 304 (Not Modified) response, including the
+ cache-related header fields (particularly MTag) of one of the message
+ bodies that matched. For all other request methods, the server MUST
+ respond with a status of 412 (Precondition Failed).
+
+ See Section 16.1.3 for rules on how to determine if two message body
+ tags match.
+
+ If none of the message body tags match, then the server MAY perform
+ the requested method as if the If-None-Match header field did not
+ exist, but MUST also ignore any If-Modified-Since header field(s) in
+ the request. That is, if no message body tags match, then the server
+ MUST NOT return a 304 (Not Modified) response.
+
+ If the request would, without the If-None-Match header field, result
+ in anything other than a 2xx or 304 status, then the If-None-Match
+ header MUST be ignored. (See Section 16.1.4 for a discussion of
+ server behavior when both If-Modified-Since and If-None-Match appear
+ in the same request.)
+
+ The result of a request having both an If-None-Match header field and
+ an If-Match header field is unspecified and MUST be considered an
+ illegal request.
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 153]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+18.27. Last-Modified
+
+ The Last-Modified message body header field indicates the date and
+ time at which the origin server believes the presentation description
+ or media stream was last modified. For the DESCRIBE method, the
+ header field indicates the last modification date and time of the
+ description, for the SETUP of the media stream.
+
+ An origin server MUST NOT send a Last-Modified date that is later
+ than the server's time of message origination. In such cases, where
+ the resource's last modification would indicate some time in the
+ future, the server MUST replace that date with the message
+ origination date.
+
+ An origin server SHOULD obtain the Last-Modified value of the message
+ body as close as possible to the time that it generates the Date
+ value of its response. This allows a recipient to make an accurate
+ assessment of the message body's modification time, especially if the
+ message body changes near the time that the response is generated.
+
+ RTSP servers SHOULD send Last-Modified whenever feasible.
+
+18.28. Location
+
+ The Location response-header field is used to redirect the recipient
+ to a location other than the Request-URI for completion of the
+ request or identification of a new resource. For 3rr responses, the
+ location SHOULD indicate the server's preferred URI for automatic
+ redirection to the resource. The field-value consists of a single
+ absolute URI.
+
+ Note: The Content-Location header field (Section 18.18) differs from
+ Location in that the Content-Location identifies the original
+ location of the message body enclosed in the request. Therefore, it
+ is possible for a response to contain header fields for both Location
+ and Content-Location. Also, see Section 16.2 for cache requirements
+ of some methods.
+
+18.29. Media-Properties
+
+ This general-header is used in SETUP responses or PLAY_NOTIFY
+ requests to indicate the media's properties that currently are
+ applicable to the RTSP session. PLAY_NOTIFY MAY be used to modify
+ these properties at any point. However, the client SHOULD have
+ received the update prior to any action related to the new media
+ properties taking effect. For aggregated sessions, the Media-
+ Properties header will be returned in each SETUP response. The
+ header received in the latest response is the one that applies on the
+
+
+
+Schulzrinne, et al. Standards Track [Page 154]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ whole session from this point until any future update. The header
+ MAY be included without value in GET_PARAMETER requests to the server
+ with a Session header included to query the current Media-Properties
+ for the session. The responder MUST include the current session's
+ media properties.
+
+ The media properties expressed by this header are the ones applicable
+ to all media in the RTSP session. For aggregated sessions, the
+ header expressed the combined media-properties. As a result,
+ aggregation of media MAY result in a change of the media properties
+ and, thus, the content of the Media-Properties header contained in
+ subsequent SETUP responses.
+
+ The header contains a list of property values that are applicable to
+ the currently setup media or aggregate of media as indicated by the
+ RTSP URI in the request. No ordering is enforced within the header.
+ Property values should be placed into a single group that handles a
+ particular orthogonal property. Values or groups that express
+ multiple properties SHOULD NOT be used. The list of properties that
+ can be expressed MAY be extended at any time. Unknown property
+ values MUST be ignored.
+
+ This specification defines the following four groups and their
+ property values:
+
+ Random Access:
+
+ Random-Access: Indicates that random access is possible. May
+ optionally include a floating-point value in seconds indicating
+ the longest duration between any two random access points in
+ the media.
+
+ Beginning-Only: Seeking is limited to the beginning only.
+
+ No-Seeking: No seeking is possible.
+
+ Content Modifications:
+
+ Immutable: The content will not be changed during the lifetime of
+ the RTSP session.
+
+ Dynamic: The content may be changed based on external methods or
+ triggers.
+
+ Time-Progressing: The media accessible progresses as wallclock
+ time progresses.
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 155]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Retention:
+
+ Unlimited: Content will be retained for the duration of the
+ lifetime of the RTSP session.
+
+ Time-Limited: Content will be retained at least until the
+ specified wallclock time. The time must be provided in the
+ absolute time format specified in Section 4.4.3.
+
+ Time-Duration: Each individual media unit is retained for at
+ least the specified Time-Duration. This definition allows for
+ retaining data with a time-based sliding window. The time
+ duration is expressed as floating-point number in seconds. The
+ value 0.0 is a valid as this indicates that no data is retained
+ in a time-progressing session.
+
+ Supported Scale:
+
+ Scales: A quoted comma-separated list of one or more decimal
+ values or ranges of scale values supported by the content in
+ arbitrary order. A range has a start and stop value separated
+ by a colon. A range indicates that the content supports a
+ fine-grained selection of scale values. Fine-graining allows
+ for steps at least as small as one tenth of a scale value.
+ Content is considered to support fine-grained selection when
+ the server in response to a given scale value can produce
+ content with an actual scale that is less than one tenth of
+ scale unit, i.e., 0.1, from the requested value. Negative
+ values are supported. The value 0 has no meaning and MUST NOT
+ be used.
+
+ Examples of this header for on-demand content and a live stream
+ without recording are:
+
+ On-demand:
+ Media-Properties: Random-Access=2.5, Unlimited, Immutable,
+ Scales="-20, -10, -4, 0.5:1.5, 4, 8, 10, 15, 20"
+
+ Live stream without recording/timeshifting:
+ Media-Properties: No-Seeking, Time-Progressing, Time-Duration=0.0
+
+18.30. Media-Range
+
+ The Media-Range general-header is used to give the range of the media
+ at the time of sending the RTSP message. This header MUST be
+ included in the SETUP response, PLAY and PAUSE responses for media
+ that are time-progressing, PLAY and PAUSE responses after any change
+ for media that are Dynamic, and in PLAY_NOTIFY requests that are sent
+
+
+
+Schulzrinne, et al. Standards Track [Page 156]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ due to Media-Property-Update. A Media-Range header without any range
+ specifications MAY be included in GET_PARAMETER requests to the
+ server to request the current range. In this case, the server MUST
+ include the current range at the time of sending the response.
+
+ The header MUST include range specifications for all time formats
+ supported for the media, as indicated in Accept-Ranges header
+ (Section 18.5) when setting up the media. The server MAY include
+ more than one range specification of any given time format to
+ indicate media that has non-continuous range. The range
+ specifications SHALL be ordered with the range with the lowest value
+ or earliest start time first, followed by ranges with increasingly
+ higher values or later start time.
+
+ For media that has the time-progressing property, the Media-Range
+ header values will only be valid for the particular point in time
+ when it was issued. As the wallclock progresses, so will the media
+ range. However, it shall be assumed that media time progresses in
+ direct relationship to wallclock time (with the exception of clock
+ skew) so that a reasonably accurate estimation of the media range can
+ be calculated.
+
+18.31. MTag
+
+ The MTag response-header MAY be included in DESCRIBE, GET_PARAMETER,
+ or SETUP responses. The message body tags (Section 4.6) returned in
+ a DESCRIBE response and the one in SETUP refer to the presentation,
+ i.e., both the returned session description and the media stream.
+ This allows for verification that one has the right session
+ description to a media resource at the time of the SETUP request.
+ However, it has the disadvantage that a change in any of the parts
+ results in invalidation of all the parts.
+
+ If the MTag is provided both inside the message body, e.g., within
+ the "a=mtag" attribute in SDP, and in the response message, then both
+ tags MUST be identical. It is RECOMMENDED that the MTag be primarily
+ given in the RTSP response message, to ensure that caches can use the
+ MTag without requiring content inspection. However, for session
+ descriptions that are distributed outside of RTSP, for example, using
+ HTTP, etc., it will be necessary to include the message body tag in
+ the session description as specified in Appendix D.1.9.
+
+ SETUP and DESCRIBE requests can be made conditional upon the MTag
+ using the headers If-Match (Section 18.24) and If-None-Match
+ (Section 18.26).
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 157]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+18.32. Notify-Reason
+
+ The Notify-Reason response-header is solely used in the PLAY_NOTIFY
+ method. It indicates the reason why the server has sent the
+ asynchronous PLAY_NOTIFY request (see Section 13.5).
+
+18.33. Pipelined-Requests
+
+ The Pipelined-Requests general-header is used to indicate that a
+ request is to be executed in the context created by a previous
+ request(s). The primary usage of this header is to allow pipelining
+ of SETUP requests so that any additional SETUP request after the
+ first one does not need to wait for the session ID to be sent back to
+ the requesting agent. The header contains a unique identifier that
+ is scoped by the persistent connection used to send the requests.
+
+ Upon receiving a request with the Pipelined-Requests, the responding
+ agent MUST look up if there exists a binding between this Pipelined-
+ Requests identifier for the current persistent connection and an RTSP
+ session ID. If the binding exists, then the received request is
+ processed the same way as if it contained the Session header with the
+ found session ID. If there does not exist a mapping and no Session
+ header is included in the request, the responding agent MUST create a
+ binding upon the successful completion of a session creating request,
+ i.e., SETUP. A binding MUST NOT be created, if the request failed to
+ create an RTSP session. In case the request contains both a Session
+ header and the Pipelined-Requests header, the Pipelined-Requests
+ header MUST be ignored.
+
+ Note: Based on the above definition, at least the first request
+ containing a new unique Pipelined-Requests header will be required to
+ be a SETUP request (unless the protocol is extended with new methods
+ of creating a session). After that first one, additional SETUP
+ requests or requests of any type using the RTSP session context may
+ include the Pipelined-Requests header.
+
+ When responding to any request that contained the Pipelined-Requests
+ header, the server MUST also include the Session header when a
+ binding to a session context exists. An RTSP agent that knows the
+ session identifier SHOULD NOT use the Pipelined-Requests header in
+ any request and only use the Session header. This as the Session
+ identifier is persistent across transport contexts, like TCP
+ connections, which the Pipelined-Requests identifier is not.
+
+ The RTSP agent sending the request with a Pipelined-Requests header
+ has the responsibility for using a unique and previously unused
+ identifier within the transport context. Currently, only a TCP
+ connection is defined as such a transport context. A server MUST
+
+
+
+Schulzrinne, et al. Standards Track [Page 158]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ delete the Pipelined-Requests identifier and its binding to a session
+ upon the termination of that session. Despite the previous mandate,
+ RTSP agents are RECOMMENDED not to reuse identifiers to allow for
+ better error handling and logging.
+
+ RTSP Proxies may need to translate Pipelined-Requests identifier
+ values from incoming requests to outgoing to allow for aggregation of
+ requests onto a persistent connection.
+
+18.34. Proxy-Authenticate
+
+ The Proxy-Authenticate response-header field MUST be included as part
+ of a 407 (Proxy Authentication Required) response. The field-value
+ consists of a challenge that indicates the authentication scheme and
+ parameters applicable to the proxy for this Request-URI. The
+ definition of the header is in [RFC7235], and any applicable HTTP
+ authentication schemes appear in other RFCs, such as Digest [RFC7616]
+ and Basic [RFC7617].
+
+ The HTTP access authentication process is described in [RFC7235].
+ This header MUST only be used in response messages related to client-
+ to-server requests.
+
+18.35. Proxy-Authentication-Info
+
+ The Proxy-Authentication-Info response-header is used by the proxy to
+ communicate some information regarding the successful authentication
+ to the proxy in the message response in some authentication schemes,
+ such as the Digest scheme [RFC7616]. The definition of the header is
+ in [RFC7615], and any applicable HTTP authentication schemes appear
+ in other RFCs. This header MUST only be used in response messages
+ related to client-to-server requests. This header has hop-by-hop
+ scope.
+
+18.36. Proxy-Authorization
+
+ The Proxy-Authorization request-header field allows the client to
+ identify itself (or its user) to a proxy that requires
+ authentication. The Proxy-Authorization field-value consists of
+ credentials containing the authentication information of the user
+ agent for the proxy or realm of the resource being requested. The
+ definition of the header is in [RFC7235], and any applicable HTTP
+ authentication schemes appear in other RFCs, such as Digest [RFC7616]
+ and Basic [RFC7617].
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 159]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ The HTTP access authentication process is described in [RFC7235].
+ Unlike Authorization, the Proxy-Authorization header field applies
+ only to the next-hop proxy. This header MUST only be used in client-
+ to-server requests.
+
+18.37. Proxy-Require
+
+ The Proxy-Require request-header field is used to indicate proxy-
+ sensitive features that MUST be supported by the proxy. Any Proxy-
+ Require header features that are not supported by the proxy MUST be
+ negatively acknowledged by the proxy to the client using the
+ Unsupported header. The proxy MUST use the 551 (Option Not
+ Supported) status code in the response. Any feature tag included in
+ the Proxy-Require does not apply to the endpoint (server or client).
+ To ensure that a feature is supported by both proxies and servers,
+ the tag needs to be included in also a Require header.
+
+ See Section 18.43 for more details on the mechanics of this message
+ and a usage example. See discussion in the proxies section
+ (Section 15.1) about when to consider that a feature requires proxy
+ support.
+
+ Example of use:
+
+ Proxy-Require: play.basic
+
+18.38. Proxy-Supported
+
+ The Proxy-Supported general-header field enumerates all the
+ extensions supported by the proxy using feature tags. The header
+ carries the intersection of extensions supported by the forwarding
+ proxies. The Proxy-Supported header MAY be included in any request
+ by a proxy. It MUST be added by any proxy if the Supported header is
+ present in a request. When present in a request, the receiver MUST
+ copy the received Proxy-Supported header in the response.
+
+ The Proxy-Supported header field contains a list of feature tags
+ applicable to proxies, as described in Section 4.5. The list is the
+ intersection of all feature tags understood by the proxies. To
+ achieve an intersection, the proxy adding the Proxy-Supported header
+ includes all proxy feature tags it understands. Any proxy receiving
+ a request with the header MUST check the list and remove any feature
+ tag(s) it does not support. A Proxy-Supported header present in the
+ response MUST NOT be modified by the proxies. These feature tags are
+ the ones the proxy chains support in general and are not specific to
+ the request resource.
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 160]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Example:
+
+ C->P1: OPTIONS rtsp://example.com/ RTSP/2.0
+ Supported: foo, bar, blech
+ User-Agent: PhonyClient/1.2
+
+ P1->P2: OPTIONS rtsp://example.com/ RTSP/2.0
+ Supported: foo, bar, blech
+ Proxy-Supported: proxy-foo, proxy-bar, proxy-blech
+ Via: 2.0 pro.example.com
+
+ P2->S: OPTIONS rtsp://example.com/ RTSP/2.0
+ Supported: foo, bar, blech
+ Proxy-Supported: proxy-foo, proxy-blech
+ Via: 2.0 pro.example.com, 2.0 prox2.example.com
+
+ S->C: RTSP/2.0 200 OK
+ Supported: foo, bar, baz
+ Proxy-Supported: proxy-foo, proxy-blech
+ Public: OPTIONS, SETUP, PLAY, PAUSE, TEARDOWN
+ Via: 2.0 pro.example.com, 2.0 prox2.example.com
+
+18.39. Public
+
+ The Public response-header field lists the set of methods supported
+ by the response sender. This header applies to the general
+ capabilities of the sender, and its only purpose is to indicate the
+ sender's capabilities to the recipient. The methods listed may or
+ may not be applicable to the Request-URI; the Allow header field
+ (Section 18.6) MAY be used to indicate methods allowed for a
+ particular URI.
+
+ Example of use:
+
+ Public: OPTIONS, SETUP, PLAY, PAUSE, TEARDOWN
+
+ In the event that there are proxies between the sender and the
+ recipient of a response, each intervening proxy MUST modify the
+ Public header field to remove any methods that are not supported via
+ that proxy. The resulting Public header field will contain an
+ intersection of the sender's methods and the methods allowed through
+ by the intervening proxies.
+
+ In general, proxies should allow all methods to transparently pass
+ through from the sending RTSP agent to the receiving RTSP agent,
+ but there may be cases where this is not desirable for a given
+ proxy. Modification of the Public response-header field by the
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 161]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ intervening proxies ensures that the request sender gets an
+ accurate response indicating the methods that can be used on the
+ target agent via the proxy chain.
+
+18.40. Range
+
+ The Range general-header specifies a time range in PLAY
+ (Section 13.4), PAUSE (Section 13.6), SETUP (Section 13.3), and
+ PLAY_NOTIFY (Section 13.5) requests and responses. It MAY be
+ included in GET_PARAMETER requests from the client to the server with
+ only a Range format and no value to request the current media
+ position, whether the session is in Play or Ready state in the
+ included format. The server SHALL, if supporting the range format,
+ respond with the current playing point or pause point as the start of
+ the range. If an explicit stop point was used in the previous PLAY
+ request, then that value shall be included as stop point. Note that
+ if the server is currently under any type of media playback
+ manipulation affecting the interpretation of the Range header, like
+ scale value other than 1, that fact is also required to be included
+ in any GET_PARAMETER response by including the Scale header to
+ provide complete information.
+
+ The range can be specified in a number of units. This specification
+ defines smpte (Section 4.4.1), npt (Section 4.4.2), and clock
+ (Section 4.4.3) range units. While octet ranges (Byte Ranges) (see
+ Section 2.1 of [RFC7233]) and other extended units MAY be used, their
+ behavior is unspecified since they are not normally meaningful in
+ RTSP. Servers supporting the Range header MUST understand the NPT
+ range format and SHOULD understand the SMPTE range format. If the
+ Range header is sent in a time format that is not understood, the
+ recipient SHOULD return 456 (Header Field Not Valid for Resource) and
+ include an Accept-Ranges header indicating the supported time formats
+ for the given resource.
+
+ Example:
+
+ Range: clock=19960213T143205Z-
+
+ The Range header contains a range of one single range format. A
+ range is a half-open interval with a start and an end point,
+ including the start point but excluding the end point. A range may
+ either be fully specified with explicit values for start point and
+ end point or have either the start or end point be implicit. An
+ implicit start point indicates the session's pause point, and if no
+ pause point is set, the start of the content. An implicit end point
+ indicates the end of the content. The usage of both implicit start
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 162]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ and end points is not allowed in the same Range header; however, the
+ omission of the Range header has that meaning, i.e., from pause point
+ (or start) until end of content.
+
+ As noted, Range headers define half-open intervals. A range of
+ A-B starts exactly at time A, but ends just before B. Only the
+ start time of a media unit such as a video or audio frame is
+ relevant. For example, assume that video frames are generated
+ every 40 ms. A range of 10.0-10.1 would include a video frame
+ starting at 10.0 or later time and would include a video frame
+ starting at 10.08, even though it lasted beyond the interval. A
+ range of 10.0-10.08, on the other hand, would exclude the frame at
+ 10.08.
+
+ Please note the difference between NPT timescales' "now" and an
+ implicit start value. Implicit values reference the current
+ pause-point, while "now" is the current time. In a time-
+ progressing session with recording (retention for some or full
+ time), the pause point may be 2 min into the session while now
+ could be 1 hour into the session.
+
+ By default, range intervals increase, where the second point is
+ larger than the first point.
+
+ Example:
+
+ Range: npt=10-15
+
+ However, range intervals can also decrease if the Scale header (see
+ Section 18.46) indicates a negative scale value. For example, this
+ would be the case when a playback in reverse is desired.
+
+ Example:
+
+ Scale: -1
+ Range: npt=15-10
+
+ Decreasing ranges are still half-open intervals as described above.
+ Thus, for range A-B, A is closed and B is open. In the above
+ example, 15 is closed and 10 is open. An exception to this rule is
+ the case when B=0 is in a decreasing range. In this case, the range
+ is closed on both ends, as otherwise there would be no way to reach 0
+ on a reverse playback for formats that have such a notion, like NPT
+ and SMPTE.
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 163]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Example:
+
+ Scale: -1
+ Range: npt=15-0
+
+ In this range, both 15 and 0 are closed.
+
+ A decreasing range interval without a corresponding negative value in
+ the Scale header is not valid.
+
+18.41. Referrer
+
+ The Referrer request-header field allows the client to specify, for
+ the server's benefit, the address (URI) of the resource from which
+ the Request-URI was obtained. The URI refers to that of the
+ presentation description, typically retrieved via HTTP. The Referrer
+ request-header allows a server to generate lists of back-links to
+ resources for interest, logging, optimized caching, etc. It also
+ allows obsolete or mistyped links to be traced for maintenance. The
+ Referrer field MUST NOT be sent if the Request-URI was obtained from
+ a source that does not have its own URI, such as input from the user
+ keyboard.
+
+ If the field-value is a relative URI, it SHOULD be interpreted
+ relative to the Request-URI. The URI MUST NOT include a fragment
+ identifier.
+
+ Because the source of a link might be private information or might
+ reveal an otherwise private information source, it is strongly
+ recommended that the user be able to select whether or not the
+ Referrer field is sent. For example, a streaming client could have a
+ toggle switch for openly/anonymously, which would respectively
+ enable/disable the sending of Referrer and From information.
+
+ Clients SHOULD NOT include a Referrer header field in an (non-secure)
+ RTSP request if the referring page was transferred with a secure
+ protocol.
+
+18.42. Request-Status
+
+ This request-header is used to indicate the end result for requests
+ that take time to complete, such as PLAY (Section 13.4). It is sent
+ in PLAY_NOTIFY (Section 13.5) with the end-of-stream reason to report
+ how the PLAY request concluded, either in success or in failure. The
+ header carries a reference to the request it reports on using the
+ CSeq number and the Session ID used in the request reported on. This
+ is not ensured to be unambiguous due to the fact that the CSeq number
+ is scoped by the transport connection. Agents originating requests
+
+
+
+Schulzrinne, et al. Standards Track [Page 164]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ can reduce the issue by using a monotonically increasing counter
+ across all sequential transports used. The header provides both a
+ numerical status code (according to Section 8.1.1) and a human-
+ readable reason phrase.
+
+ Example:
+ Request-Status: cseq=63 status=500 reason="Media data unavailable"
+
+ Proxies that renumber the CSeq header need to perform corresponding
+ remapping of the cseq parameter in this header when forwarding the
+ request to the next-hop agent.
+
+18.43. Require
+
+ The Require request-header field is used by agents to ensure that the
+ other endpoint supports features that are required in respect to this
+ request. It can also be used to query if the other endpoint supports
+ certain features; however, the use of the Supported general-header
+ (Section 18.51) is much more effective in this purpose. In case any
+ of the feature tags listed by the Require header are not supported by
+ the server or client receiving the request, it MUST respond to the
+ request using the error code 551 (Option Not Supported) and include
+ the Unsupported header listing those feature tags that are NOT
+ supported. This header does not apply to proxies; for the same
+ functionality with respect to proxies, see the Proxy-Require header
+ (Section 18.37) with the exception of media-modifying proxies.
+ Media-modifying proxies, due to their nature of handling media in a
+ way that is very similar to a server, do need to understand also the
+ server's features to correctly serve the client.
+
+ This is to make sure that the client-server interaction will
+ proceed without delay when all features are understood by both
+ sides and only slow down if features are not understood (as in the
+ example below). For a well-matched client-server pair, the
+ interaction proceeds quickly, saving a round trip often required
+ by negotiation mechanisms. In addition, it also removes state
+ ambiguity when the client requires features that the server does
+ not understand.
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 165]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Example (Not complete):
+
+ C->S: SETUP rtsp://server.com/foo/bar/baz.rm RTSP/2.0
+ CSeq: 302
+ Require: funky-feature
+ Funky-Parameter: funkystuff
+
+ S->C: RTSP/2.0 551 Option not supported
+ CSeq: 302
+ Unsupported: funky-feature
+
+ In this example, "funky-feature" is the feature tag that indicates to
+ the client that the fictional Funky-Parameter field is required. The
+ relationship between "funky-feature" and Funky-Parameter is not
+ communicated via the RTSP exchange, since that relationship is an
+ immutable property of "funky-feature" and thus should not be
+ transmitted with every exchange.
+
+ Proxies and other intermediary devices MUST ignore this header. If a
+ particular extension requires that intermediate devices support it,
+ the extension should be tagged in the Proxy-Require field instead
+ (see Section 18.37). See discussion in the proxies section
+ (Section 15.1) about when to consider that a feature requires proxy
+ support.
+
+18.44. Retry-After
+
+ The Retry-After response-header field can be used with a 503 (Service
+ Unavailable) or 553 (Proxy Unavailable) response to indicate how long
+ the service is expected to be unavailable to the requesting client.
+ This field MAY also be used with any 3rr (Redirection) response to
+ indicate the minimum time the user agent is asked to wait before
+ issuing the redirected request. A response using 413 (Request
+ Message Body Too Large) when the restriction is temporary MAY also
+ include the Retry-After header. The value of this field can be
+ either an RTSP-date or an integer number of seconds (in decimal)
+ after the time of the response.
+
+ Example:
+
+ Retry-After: Fri, 31 Dec 1999 23:59:59 GMT
+ Retry-After: 120
+
+ In the latter example, the delay is 2 minutes.
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 166]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+18.45. RTP-Info
+
+ The RTP-Info general-header field is used to set RTP-specific
+ parameters in the PLAY and GET_PARAMETER responses or PLAY_NOTIFY and
+ GET_PARAMETER requests. For streams using RTP as transport protocol,
+ the RTP-Info header SHOULD be part of a 200 response to PLAY.
+
+ The exclusion of the RTP-Info in a PLAY response for RTP-
+ transported media will result in a client needing to synchronize
+ the media streams using RTCP. This may have negative impact as
+ the RTCP can be lost and does not need to be particularly timely
+ in its arrival. Also, functionality that informs the client from
+ which packet a seek has occurred is affected.
+
+ The RTP-Info MAY be included in SETUP responses to provide
+ synchronization information when changing transport parameters, see
+ Section 13.3. The RTP-Info header and the Range header MAY be
+ included in a GET_PARAMETER request from client to server without any
+ values to request the current playback point and corresponding RTP
+ synchronization information. When the RTP-Info header is included in
+ a Request, the Range header MUST also be included. The server
+ response SHALL include both the Range header and the RTP-Info header.
+ If the session is in Play state, then the value of the Range header
+ SHALL be filled in with the current playback point and with the
+ corresponding RTP-Info values. If the server is in another state, no
+ values are included in the RTP-Info header. The header is included
+ in PLAY_NOTIFY requests with the Notify-Reason of the end of stream
+ to provide RTP information about the end of the stream.
+
+ The header can carry the following parameters:
+
+ url: Indicates the stream URI for which the following RTP parameters
+ correspond; this URI MUST be the same as used in the SETUP
+ request for this media stream. Any relative URI MUST use the
+ Request-URI as base URI. This parameter MUST be present.
+
+ ssrc: The SSRC to which the RTP timestamp and sequence number
+ provided applies. This parameter MUST be present.
+
+ seq: Indicates the sequence number of the first packet of the stream
+ that is direct result of the request. This allows clients to
+ gracefully deal with packets when seeking. The client uses
+ this value to differentiate packets that originated before the
+ seek from packets that originated after the seek. Note that a
+ client may not receive the packet with the expressed sequence
+ number and instead may receive packets with a higher sequence
+ number due to packet loss or reordering. This parameter is
+ RECOMMENDED to be present.
+
+
+
+Schulzrinne, et al. Standards Track [Page 167]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ rtptime: MUST indicate the RTP timestamp value corresponding to the
+ start time value in the Range response-header or, if not
+ explicitly given, the implied start point. The client uses
+ this value to calculate the mapping of RTP time to NPT or other
+ media timescale. This parameter SHOULD be present to ensure
+ inter-media synchronization is achieved. There exists no
+ requirement that any received RTP packet will have the same RTP
+ timestamp value as the one in the parameter used to establish
+ synchronization.
+
+ A mapping from RTP timestamps to NTP format timestamps (wallclock)
+ is available via RTCP. However, this information is not
+ sufficient to generate a mapping from RTP timestamps to media
+ clock time (NPT, etc.). Furthermore, in order to ensure that this
+ information is available at the necessary time (immediately at
+ startup or after a seek), and that it is delivered reliably, this
+ mapping is placed in the RTSP control channel.
+
+ In order to compensate for drift for long, uninterrupted
+ presentations, RTSP clients should additionally map NPT to NTP,
+ using initial RTCP sender reports to do the mapping, and later
+ reports to check drift against the mapping.
+
+ Example:
+
+ Range:npt=3.25-15
+ RTP-Info:url="rtsp://example.com/foo/audio" ssrc=0A13C760:seq=45102;
+ rtptime=12345678,url="rtsp://example.com/foo/video"
+ ssrc=9A9DE123:seq=30211;rtptime=29567112
+
+ Lets assume that Audio uses a 16 kHz RTP timestamp clock and Video
+ a 90 kHz RTP timestamp clock. Then, the media synchronization is
+ depicted in the following way.
+
+ NPT 3.0---3.1---3.2-X-3.3---3.4---3.5---3.6
+ Audio PA A
+ Video V PV
+
+ X: NPT time value = 3.25, from Range header.
+ A: RTP timestamp value for Audio from RTP-Info header (12345678).
+ V: RTP timestamp value for Video from RTP-Info header (29567112).
+ PA: RTP audio packet carrying an RTP timestamp of 12344878, which
+ corresponds to NPT = (12344878 - A) / 16000 + 3.25 = 3.2
+ PV: RTP video packet carrying an RTP timestamp of 29573412, which
+ corresponds to NPT = (29573412 - V) / 90000 + 3.25 = 3.32
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 168]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+18.46. Scale
+
+ The Scale general-header indicates the requested or used view rate
+ for the media resource being played back. A scale value of 1
+ indicates normal play at the normal forward viewing rate. If not 1,
+ the value corresponds to the rate with respect to normal viewing
+ rate. For example, a value of 2 indicates twice the normal viewing
+ rate ("fast forward") and a value of 0.5 indicates half the normal
+ viewing rate. In other words, a value of 2 has content time increase
+ at twice the playback time. For every second of elapsed (wallclock)
+ time, 2 seconds of content time will be delivered. A negative value
+ indicates reverse direction. For certain media transports, this may
+ require certain considerations to work consistently; see Appendix C.1
+ for description on how RTP handles this.
+
+ The transmitted-data rate SHOULD NOT be changed by selection of a
+ different scale value. The resulting bitrate should be reasonably
+ close to the nominal bitrate of the content for scale = 1. The
+ server has to actively manipulate the data when needed to meet the
+ bitrate constraints. Implementation of scale changes depends on the
+ server and media type. For video, a server may, for example, deliver
+ only key frames or selected frames. For audio, it may time-scale the
+ audio while preserving pitch or, less desirably, deliver fragments of
+ audio, or completely mute the audio.
+
+ The server and content may restrict the range of scale values that it
+ supports. The supported values are indicated by the Media-Properties
+ header (Section 18.29). The client SHOULD only indicate request
+ values to be supported. However, as the values may change as the
+ content progresses, a requested value may no longer be valid when the
+ request arrives. Thus, a non-supported value in a request does not
+ generate an error, it only forces the server to choose the closest
+ value. The response MUST always contain the actual scale value
+ chosen by the server.
+
+ If the server does not implement the possibility to scale, it will
+ not return a Scale header. A server supporting scale operations for
+ PLAY MUST indicate this with the use of the "play.scale" feature tag.
+
+ When indicating a negative scale for a reverse playback, the Range
+ header MUST indicate a decreasing range as described in
+ Section 18.40.
+
+ Example of playing in reverse at 3.5 times normal rate:
+
+ Scale: -3.5
+ Range: npt=15-10
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 169]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+18.47. Seek-Style
+
+ When a client sends a PLAY request with a Range header to perform a
+ random access to the media, the client does not know if the server
+ will pick the first media samples or the first random access point
+ prior to the request range. Depending on the use case, the client
+ may have a strong preference. To express this preference and provide
+ the client with information on how the server actually acted on that
+ preference, the Seek-Style general-header is defined.
+
+ Seek-Style is a general-header that MAY be included in any PLAY
+ request to indicate the client's preference for any media stream that
+ has the random access properties. The server MUST always include the
+ header in any PLAY response for media with random access properties
+ to indicate what policy was applied. A server that receives an
+ unknown Seek-Style policy MUST ignore it and select the server
+ default policy. A client receiving an unknown policy MUST ignore it
+ and use the Range header and any media synchronization information as
+ basis to determine what the server did.
+
+ This specification defines the following seek policies that may be
+ requested (see also Section 4.7.1):
+
+ RAP: Random Access Point (RAP) is the behavior of requesting the
+ server to locate the closest previous random access point that
+ exists in the media aggregate and deliver from that. By
+ requesting a RAP, media quality will be the best possible as all
+ media will be delivered from a point where full media state can be
+ established in the media decoder.
+
+ CoRAP: Conditional Random Access Point (CoRAP) is a variant of the
+ above RAP behavior. This policy is primarily intended for cases
+ where there is larger distance between the random access points in
+ the media. CoRAP uses the RAP policy if the condition that there
+ is a Random Access Point closer to the requested start point than
+ to the current pause point is fulfilled. Otherwise, no seeking is
+ performed and playback will continue from the current pause point.
+ This policy assumes that the media state existing prior to the
+ pause is usable if delivery is continued. If the client or server
+ knows that this is not the fact, the RAP policy should be used.
+ In other words, in most cases when the client requests a start
+ point prior to the current pause point, a valid decoding
+ dependency chain from the media delivered prior to the pause and
+ to the requested media unit will not exist. If the server
+ searched to a random access point, the server MUST return the
+ CoRAP policy in the Seek-Style header and adjust the Range header
+ to reflect the position of the selected RAP. In case the random
+ access point is farther away and the server chooses to continue
+
+
+
+Schulzrinne, et al. Standards Track [Page 170]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ from the current pause point, it MUST include the "Next" policy in
+ the Seek-Style header and adjust the Range header start point to
+ the current pause point.
+
+ First-Prior: The first-prior policy will start delivery with the
+ media unit that has a playout time first prior to the requested
+ time. For discrete media, that would only include media units
+ that would still be rendered at the request time. For continuous
+ media, that is media that will be rendered during the requested
+ start time of the range.
+
+ Next: The next media units after the provided start time of the
+ range: for continuous framed media, that would mean the first next
+ frame after the provided time and for discrete media, the first
+ unit that is to be rendered after the provided time. The main
+ usage for this case is when the client knows it has all media up
+ to a certain point and would like to continue delivery so that a
+ complete uninterrupted media playback can be achieved. An example
+ of such a scenario would be switching from a broadcast/multicast
+ delivery to a unicast-based delivery. This policy MUST only be
+ used on the client's explicit request.
+
+ Please note that these expressed preferences exist for optimizing the
+ startup time or the media quality. The "Next" policy breaks the
+ normal definition of the Range header to enable a client to request
+ media with minimal overlap, although some may still occur for
+ aggregated sessions. RAP and First-Prior both fulfill the
+ requirement of providing media from the requested range and forward.
+ However, unless RAP is used, the media quality for many media codecs
+ using predictive methods can be severely degraded unless additional
+ data is available as, for example, already buffered, or through other
+ side channels.
+
+18.48. Server
+
+ The Server general-header field contains information about the
+ software used by the origin server to create or handle the request.
+ This field can contain multiple product tokens and comments
+ identifying the server and any significant subproducts. The product
+ tokens are listed in order of their significance for identifying the
+ application.
+
+ Example:
+
+ Server: PhonyServer/1.0
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 171]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ If the response is being forwarded through a proxy, the proxy
+ application MUST NOT modify the Server response-header. Instead, it
+ SHOULD include a Via field (Section 18.57). If the response is
+ generated by the proxy, the proxy application MUST return the Server
+ response-header as previously returned by the server.
+
+18.49. Session
+
+ The Session general-header field identifies an RTSP session. An RTSP
+ session is created by the server as a result of a successful SETUP
+ request, and in the response, the session identifier is given to the
+ client. The RTSP session exists until destroyed by a TEARDOWN or a
+ REDIRECT or is timed out by the server.
+
+ The session identifier is chosen by the server (see Section 4.3) and
+ MUST be returned in the SETUP response. Once a client receives a
+ session identifier, it MUST be included in any request related to
+ that session. This means that the Session header MUST be included in
+ a request, using the following methods: PLAY, PAUSE, PLAY_NOTIFY and
+ TEARDOWN. It MAY be included in SETUP, OPTIONS, SET_PARAMETER,
+ GET_PARAMETER, and REDIRECT. It MUST NOT be included in DESCRIBE.
+ The Session header MUST NOT be included in the following methods, if
+ these requests are pipelined and if the session identifier is not yet
+ known: PLAY, PAUSE, TEARDOWN, SETUP, OPTIONS SET_PARAMETER, and
+ GET_PARAMETER.
+
+ In an RTSP response, the session header MUST be included in methods,
+ SETUP, PLAY, PAUSE, and PLAY_NOTIFY, and it MAY be included in
+ methods TEARDOWN and REDIRECT. If included in the request of the
+ following methods it MUST also be included in the response: OPTIONS,
+ GET_PARAMETER, and SET_PARAMETER. It MUST NOT be included in
+ DESCRIBE responses.
+
+ Note that a session identifier identifies an RTSP session across
+ transport sessions or connections. RTSP requests for a given session
+ can use different URIs (Presentation and media URIs). Note, that
+ there are restrictions depending on the session as to which URIs are
+ acceptable for a given method. However, multiple "user" sessions for
+ the same URI from the same client will require use of different
+ session identifiers.
+
+ The session identifier is needed to distinguish several delivery
+ requests for the same URI coming from the same client.
+
+ The response 454 (Session Not Found) MUST be returned if the session
+ identifier is invalid.
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 172]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ The header MAY include a parameter for session timeout period. If
+ not explicitly provided, this value is set to 60 seconds. As this
+ affects how often session keep-alives are needed, values smaller than
+ 30 seconds are not recommended. However, larger-than-default values
+ can be useful in applications of RTSP that have inactive but
+ established sessions for longer time periods.
+
+ The 60-second value was chosen as the session timeout value as it
+ results in keep-alive messages that are not too frequent and low
+ sensitivity to variations in request/response timing. If one
+ reduces the timeout value to below 30 seconds, the corresponding
+ request/response timeout becomes a significant part of the session
+ timeout. The 60-second value also allows for reasonably rapid
+ recovery of committed server resources in case of client failure.
+
+18.50. Speed
+
+ The Speed general-header field requests the server to deliver
+ specific amounts of nominal media time per unit of delivery time,
+ contingent on the server's ability and desire to serve the media
+ stream at the given speed. The client requests the delivery speed to
+ be within a given range with a lower and upper bound. The server
+ SHALL deliver at the highest possible speed within the range, but not
+ faster than the upper bound, for which the underlying network path
+ can support the resulting transport data rates. As long as any speed
+ value within the given range can be provided, the server SHALL NOT
+ modify the media quality. Only if the server is unable to deliver
+ media at the speed value provided by the lower bound shall it reduce
+ the media quality.
+
+ Implementation of the Speed functionality by the server is OPTIONAL.
+ The server can indicate its support through a feature tag,
+ play.speed. The lack of a Speed header in the response is an
+ indication of lack of support of this functionality.
+
+ The speed parameter values are expressed as a positive decimal value,
+ e.g., a value of 2.0 indicates that data is to be delivered twice as
+ fast as normal. A speed value of zero is invalid. The range is
+ specified in the form "lower bound - upper bound". The lower-bound
+ value may be smaller or equal to the upper bound. All speeds may not
+ be possible to support. Therefore, the server MAY modify the
+ requested values to the closest supported. The actual supported
+ speed MUST be included in the response. However, note that the use
+ cases may vary and that Speed value ranges such as 0.7-0.8, 0.3-2.0,
+ 1.0-2.5, and 2.5-2.5 all have their usages.
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 173]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Example:
+
+ Speed: 1.0-2.5
+
+ Use of this header changes the bandwidth used for data delivery. It
+ is meant for use in specific circumstances where delivery of the
+ presentation at a higher or lower rate is desired. The main use
+ cases are buffer operations or local scale operations. Implementers
+ should keep in mind that bandwidth for the session may be negotiated
+ beforehand (by means other than RTSP) and, therefore, renegotiation
+ may be necessary. To perform Speed operations, the server needs to
+ ensure that the network path can support the resulting bitrate.
+ Thus, the media transport needs to support feedback so that the
+ server can react and adapt to the available bitrate.
+
+18.51. Supported
+
+ The Supported general-header enumerates all the extensions supported
+ by the client or server using feature tags. The header carries the
+ extensions supported by the message-sending client or server. The
+ Supported header MAY be included in any request. When present in a
+ request, the receiver MUST respond with its corresponding Supported
+ header. Note that the Supported header is also included in 4xx and
+ 5xx responses.
+
+ The Supported header contains a list of feature tags, described in
+ Section 4.5, that are understood by the client or server. These
+ feature tags are the ones the server or client supports in general
+ and are not specific to the request resource.
+
+ Example:
+
+ C->S: OPTIONS rtsp://example.com/ RTSP/2.0
+ Supported: foo, bar, blech
+ User-Agent: PhonyClient/1.2
+
+ S->C: RTSP/2.0 200 OK
+ Supported: bar, blech, baz
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 174]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+18.52. Terminate-Reason
+
+ The Terminate-Reason request-header allows the server, when sending a
+ REDIRECT or TEARDOWN request, to provide a reason for the session
+ termination and any additional information. This specification
+ identifies three reasons for Redirections and may be extended in the
+ future:
+
+ Server-Admin: The server needs to be shut down for some
+ administrative reason.
+
+ Session-Timeout: A client's session has been kept alive for extended
+ periods of time and the server has determined that it needs to
+ reclaim the resources associated with this session.
+
+ Internal-Error An internal error that is impossible to recover from
+ has occurred, forcing the server to terminate the session.
+
+ The Server may provide additional parameters containing information
+ around the redirect. This specification defines the following ones.
+
+ time: Provides a wallclock time when the server will stop providing
+ any service.
+
+ user-msg: A UTF-8 text string with a message from the server to the
+ user. This message SHOULD be displayed to the user.
+
+18.53. Timestamp
+
+ The Timestamp general-header describes when the agent sent the
+ request. The value of the timestamp is of significance only to the
+ agent and may use any timescale. The responding agent MUST echo the
+ exact same value and MAY, if it has accurate information about this,
+ add a floating-point number indicating the number of seconds that has
+ elapsed since it has received the request. The timestamp can be used
+ by the agent to compute the round-trip time to the responding agent
+ so that it can adjust the timeout value for retransmissions when
+ running over an unreliable protocol. It also resolves retransmission
+ ambiguities for unreliable transport of RTSP.
+
+ Note that the present specification provides only for reliable
+ transport of RTSP messages. The Timestamp general-header is
+ specified in case the protocol is extended in the future to use
+ unreliable transport.
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 175]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+18.54. Transport
+
+ The Transport general-header indicates which transport protocol is to
+ be used and configures its parameters such as destination address,
+ compression, multicast time-to-live and destination port for a single
+ stream. It sets those values not already determined by a
+ presentation description.
+
+ A Transport request-header MAY contain a list of transport options
+ acceptable to the client, in the form of multiple transport
+ specification entries. Transport specifications are comma separated
+ and listed in decreasing order of preference. Each transport
+ specification consists of a transport protocol identifier, followed
+ by any number of parameters separated by semicolons. A Transport
+ request-header MAY contain multiple transport specifications using
+ the same transport protocol identifier. The server MUST return a
+ Transport response-header in the response to indicate the values
+ actually chosen, if any. If no transport specification is supported,
+ no transport header is returned and the response MUST use the status
+ code 461 (Unsupported Transport) (Section 17.4.25). In case more
+ than one transport specification was present in the request, the
+ server MUST return the single transport specification (transport-
+ spec) that was actually chosen, if any. The number of transport-spec
+ entries is expected to be limited as the client will receive guidance
+ on what configurations are possible from the presentation
+ description.
+
+ The Transport header MAY also be used in subsequent SETUP requests to
+ change transport parameters. A server MAY refuse to change
+ parameters of an existing stream.
+
+ The transport protocol identifier defines, for each transport
+ specification, which transport protocol to use and any related rules.
+ Each transport protocol identifier defines the parameters that are
+ required to occur; additional optional parameters MAY occur. This
+ flexibility is provided as parameters may be different and provide
+ different options to the RTSP agent. A transport specification may
+ only contain one of any given parameter within it. A parameter
+ consists of a name and optionally a value string. Parameters MAY be
+ given in any order. Additionally, a transport specification may only
+ contain either the unicast or the multicast transport type parameter.
+ The transport protocol identifier, and all parameters, need to be
+ understood in a transport specification; if not, the transport
+ specification MUST be ignored. An RTSP proxy of any type that uses
+ or modifies the transport specification, e.g., access proxy or
+ security proxy, MUST remove specifications with unknown parameters
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 176]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ before forwarding the RTSP message. If that results in no remaining
+ transport specification, the proxy SHALL send a 461 (Unsupported
+ Transport) (Section 17.4.25) response without any Transport header.
+
+ The Transport header is restricted to describing a single media
+ stream. (RTSP can also control multiple streams as a single
+ entity.) Making it part of RTSP rather than relying on a
+ multitude of session description formats greatly simplifies
+ designs of firewalls.
+
+ The general syntax for the transport protocol identifier is a list of
+ slash-separated tokens:
+
+ Value1/Value2/Value3...
+
+ Which, for RTP transports, takes the form:
+
+ RTP/profile/lower-transport.
+
+ The default value for the "lower-transport" parameters is specific to
+ the profile. For RTP/AVP, the default is UDP.
+
+ There are two different methods for how to specify where the media
+ should be delivered for unicast transport:
+
+ dest_addr: The presence of this parameter and its values indicates
+ the destination address or addresses (host address and port
+ pairs for IP flows) necessary for the media transport.
+
+ No dest_addr: The lack of the dest_addr parameter indicates that the
+ server MUST send media to the same address from which the RTSP
+ messages originates.
+
+ The choice of method for indicating where the media is to be
+ delivered depends on the use case. In some cases, the only allowed
+ method will be to use no explicit address indication and have the
+ server deliver media to the source of the RTSP messages.
+
+ For multicast, there are several methods for specifying addresses,
+ but they are different in how they work compared with unicast:
+
+ dest_addr with client picked address: The address and relevant
+ parameters, like TTL (scope), for the actual multicast group to
+ deliver the media to. There are security implications
+ (Section 21) with this method that need to be addressed because
+ an RTSP server can be used as a DoS attacker on an existing
+ multicast group.
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 177]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ dest_addr using Session Description Information: The information
+ included in the transport header can all be coming from the
+ session description, e.g., the SDP "c=" and "m=" lines. This
+ mitigates some of the security issues of the previous methods
+ as it is the session provider that picks the multicast group
+ and scope. The client MUST include the information if it is
+ available in the session description.
+
+ No dest_addr: The behavior when no explicit multicast group is
+ present in a request is not defined.
+
+ An RTSP proxy will need to take care. If the media is not desired to
+ be routed through the proxy, the proxy will need to introduce the
+ destination indication.
+
+ Below are the configuration parameters associated with transport:
+
+ General parameters:
+
+ unicast / multicast: This parameter is a mutually exclusive
+ indication of whether unicast or multicast delivery will be
+ attempted. One of the two values MUST be specified. Clients
+ that are capable of handling both unicast and multicast
+ transmission need to indicate such capability by including two
+ full transport-specs with separate parameters for each.
+
+ layers: The number of multicast layers to be used for this media
+ stream. The layers are sent to consecutive addresses starting
+ at the dest_addr address. If the parameter is not included, it
+ defaults to a single layer.
+
+ dest_addr: A general destination address parameter that can contain
+ one or more address specifications. Each combination of
+ protocol/profile/lower transport needs to have the format and
+ interpretation of its address specification defined. For
+ RTP/AVP/UDP and RTP/AVP/TCP, the address specification is a
+ tuple containing a host address and port. Note, only a single
+ destination parameter per transport spec is intended. The
+ usage of multiple destinations to distribute a single media to
+ multiple entities is unspecified.
+
+ The client originating the RTSP request MAY specify the
+ destination address of the stream recipient with the host
+ address as part of the tuple. When the destination address is
+ specified, the recipient may be a different party than the
+ originator of the request. To avoid becoming the unwitting
+ perpetrator of a remote-controlled DoS attack, a server MUST
+ perform security checks (see Section 21.2.1) and SHOULD log
+
+
+
+Schulzrinne, et al. Standards Track [Page 178]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ such attempts before allowing the client to direct a media
+ stream to a recipient address not chosen by the server.
+ Implementations cannot rely on TCP as a reliable means of
+ client identification. If the server does not allow the host
+ address part of the tuple to be set, it MUST return 463
+ (Destination Prohibited).
+
+ The host address part of the tuple MAY be empty, for example
+ ":58044", in cases when it is desired to specify only the
+ destination port. Responses to requests including the
+ Transport header with a dest_addr parameter SHOULD include the
+ full destination address that is actually used by the server.
+ The server MUST NOT remove address information that is already
+ present in the request when responding, unless the protocol
+ requires it.
+
+ src_addr: A general source address parameter that can contain one or
+ more address specifications. Each combination of
+ protocol/profile/lower transport needs to have the format and
+ interpretation of its address specification defined. For
+ RTP/AVP/UDP and RTP/AVP/TCP, the address specification is a
+ tuple containing a host address and port.
+
+ This parameter MUST be specified by the server if it transmits
+ media packets from an address other than the one RTSP messages
+ are sent to. This will allow the client to verify the source
+ address and give it a destination address for its RTCP feedback
+ packets, if RTP is used. The address or addresses indicated in
+ the src_addr parameter SHOULD be used both for the sending and
+ receiving of the media stream's data packets. The main reasons
+ are threefold: First, indicating the port and source address(s)
+ lets the receiver know where from the packets is expected to
+ originate. Second, traversal of NATs is greatly simplified
+ when traffic is flowing symmetrically over a NAT binding.
+ Third, certain NAT traversal mechanisms need to know to which
+ address and port to send so-called "binding packets" from the
+ receiver to the sender, thus creating an address binding in the
+ NAT that the sender-to-receiver packet flow can use.
+
+ This information may also be available through SDP.
+ However, since this is more a feature of transport than
+ media initialization, the authoritative source for this
+ information should be in the SETUP response.
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 179]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ mode: The mode parameter indicates the methods to be supported for
+ this session. The currently defined valid value is "PLAY". If
+ not provided, the default is "PLAY". The "RECORD" value was
+ defined in RFC 2326; in this specification, it is unspecified
+ but reserved. RECORD and other values may be specified in the
+ future.
+
+ interleaved: The interleaved parameter implies mixing the media
+ stream with the control stream in whatever protocol is being
+ used by the control stream, using the mechanism defined in
+ Section 14. The argument provides the channel number to be
+ used in the $ block (see Section 14) and MUST be present. This
+ parameter MAY be specified as an interval, e.g.,
+ interleaved=4-5 in cases where the transport choice for the
+ media stream requires it, e.g., for RTP with RTCP. The channel
+ number given in the request is only a guidance from the client
+ to the server on what channel number(s) to use. The server MAY
+ set any valid channel number in the response. The declared
+ channels are bidirectional, so both end parties MAY send data
+ on the given channel. One example of such usage is the second
+ channel used for RTCP, where both server and client send RTCP
+ packets on the same channel.
+
+ This allows RTP/RTCP to be handled similarly to the way that
+ it is done with UDP, i.e., one channel for RTP and the other
+ for RTCP.
+
+ MIKEY: This parameter is used in conjunction with transport
+ specifications that can utilize MIKEY [RFC3830] for security
+ context establishment. So far, only the SRTP-based RTP
+ profiles SAVP and SAVPF can utilize MIKEY, and this is defined
+ in Appendix C.1.4.1. This parameter can be included both in
+ request and response messages. The binary MIKEY message SHALL
+ be Base64-encoded [RFC4648] before being included in the value
+ part of the parameter, where the encoding adheres to the
+ definition in Section 4 of RFC 4648 and where the padding bits
+ are set to zero.
+
+ Multicast-specific:
+
+ ttl: multicast time-to-live for IPv4. When included in requests,
+ the value indicates the TTL value that the client requests the
+ server to use. In a response, the value actually being used by
+ the server is returned. A server will need to consider what
+ values that are reasonable and also the authority of the user
+ to set this value. Corresponding functions are not needed for
+ IPv6 as the scoping is part of the IPv6 multicast address
+ [RFC4291].
+
+
+
+Schulzrinne, et al. Standards Track [Page 180]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ RTP-specific:
+
+ These parameters MAY only be used if the media-transport protocol is
+ RTP.
+
+ ssrc: The ssrc parameter, if included in a SETUP response, indicates
+ the RTP SSRC [RFC3550] value(s) that will be used by the media
+ server for RTP packets within the stream. The values are
+ expressed as a slash-separated sequence of SSRC values, each
+ SSRC expressed as an eight-digit hexadecimal value.
+
+ The ssrc parameter MUST NOT be specified in requests. The
+ functionality of specifying the ssrc parameter in a SETUP
+ request is deprecated as it is incompatible with the
+ specification of RTP [RFC3550]. If the parameter is included
+ in the Transport header of a SETUP request, the server SHOULD
+ ignore it, and choose appropriate SSRCs for the stream. The
+ server SHOULD set the ssrc parameter in the Transport header of
+ the response.
+
+ RTCP-mux: Used to negotiate the usage of RTP and RTCP multiplexing
+ [RFC5761] on a single underlying transport stream/flow. The
+ presence of this parameter in a SETUP request indicates the
+ client's support and requires the server to use RTP and RTCP
+ multiplexing. The client SHALL only include one transport
+ stream in the Transport header specification. To provide the
+ server with a choice between using RTP/RTCP multiplexing or
+ not, two different transport header specifications must be
+ included.
+
+ The parameter setup and connection defined below MAY only be used if
+ the media-transport protocol of the lower-level transport is
+ connection oriented (such as TCP). However, these parameters MUST
+ NOT be used when interleaving data over the RTSP connection.
+
+ setup: Clients use the setup parameter on the Transport line in a
+ SETUP request to indicate the roles it wishes to play in a TCP
+ connection. This parameter is adapted from [RFC4145]. The use
+ of this parameter in RTP/AVP/TCP non-interleaved transport is
+ discussed in Appendix C.2.2; the discussion below is limited to
+ syntactic issues. Clients may specify the following values for
+ the setup parameter:
+
+ active: The client will initiate an outgoing connection.
+
+ passive: The client will accept an incoming connection.
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 181]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ actpass: The client is willing to accept an incoming
+ connection or to initiate an outgoing connection.
+
+ If a client does not specify a setup value, the "active" value
+ is assumed.
+
+ In response to a client SETUP request where the setup parameter
+ is set to "active", a server's 2xx reply MUST assign the setup
+ parameter to "passive" on the Transport header line.
+
+ In response to a client SETUP request where the setup parameter
+ is set to "passive", a server's 2xx reply MUST assign the setup
+ parameter to "active" on the Transport header line.
+
+ In response to a client SETUP request where the setup parameter
+ is set to "actpass", a server's 2xx reply MUST assign the setup
+ parameter to "active" or "passive" on the Transport header
+ line.
+
+ Note that the "holdconn" value for setup is not defined for
+ RTSP use, and MUST NOT appear on a Transport line.
+
+ connection: Clients use the connection parameter in a transport
+ specification part of the Transport header in a SETUP request
+ to indicate the client's preference for either reusing an
+ existing connection between client and server (in which case
+ the client sets the "connection" parameter to "existing") or
+ requesting the creation of a new connection between client and
+ server (in which cast the client sets the "connection"
+ parameter to "new"). Typically, clients use the "new" value
+ for the first SETUP request for a URL, and "existing" for
+ subsequent SETUP requests for a URL.
+
+ If a client SETUP request assigns the "new" value to
+ "connection", the server response MUST also assign the "new"
+ value to "connection" on the Transport line.
+
+ If a client SETUP request assigns the "existing" value to
+ "connection", the server response MUST assign a value of
+ "existing" or "new" to "connection" on the Transport line, at
+ its discretion.
+
+ The default value of "connection" is "existing", for all SETUP
+ requests (initial and subsequent).
+
+ The combination of transport protocol, profile and lower transport
+ needs to be defined. A number of combinations are defined in the
+ Appendix C.
+
+
+
+Schulzrinne, et al. Standards Track [Page 182]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Below is a usage example, showing a client advertising the capability
+ to handle multicast or unicast, preferring multicast. Since this is
+ a unicast-only stream, the server responds with the proper transport
+ parameters for unicast.
+
+ C->S: SETUP rtsp://example.com/foo/bar/baz.rm RTSP/2.0
+ CSeq: 302
+ Transport: RTP/AVP;multicast;mode="PLAY",
+ RTP/AVP;unicast;dest_addr="192.0.2.5:3456"/
+ "192.0.2.5:3457";mode="PLAY"
+ Accept-Ranges: npt, smpte, clock
+ User-Agent: PhonyClient/1.2
+
+ S->C: RTSP/2.0 200 OK
+ CSeq: 302
+ Date: Fri, 20 Dec 2013 10:20:32 +0000
+ Session: rQi1hBrGlFdiYld241FxUO
+ Transport: RTP/AVP;unicast;dest_addr="192.0.2.5:3456"/
+ "192.0.2.5:3457";src_addr="192.0.2.224:6256"/
+ "192.0.2.224:6257";mode="PLAY"
+ Accept-Ranges: npt
+ Media-Properties: Random-Access=0.6, Dynamic,
+ Time-Limited=20081128T165900
+
+18.55. Unsupported
+
+ The Unsupported response-header lists the features not supported by
+ the responding RTSP agent. In the case where the feature was
+ specified via the Proxy-Require field (Section 18.37), if there is a
+ proxy on the path between the client and the server, the proxy MUST
+ send a response message with a status code of 551 (Option Not
+ Supported). The request MUST NOT be forwarded.
+
+ See Section 18.43 for a usage example.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 183]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+18.56. User-Agent
+
+ The User-Agent general-header field contains information about the
+ user agent originating the request or producing a response. This is
+ for statistical purposes, the tracing of protocol violations, and
+ automated recognition of user agents for the sake of tailoring
+ responses to avoid particular user agent limitations. User agents
+ SHOULD include this field with requests. The field can contain
+ multiple product tokens and comments identifying the agent and any
+ subproducts which form a significant part of the user agent. By
+ convention, the product tokens are listed in order of their
+ significance for identifying the application.
+
+ Example:
+
+ User-Agent: PhonyClient/1.2
+
+18.57. Via
+
+ The Via general-header field MUST be used by proxies to indicate the
+ intermediate protocols and recipients between the user agent and the
+ server on requests and between the origin server and the client on
+ responses. The field is intended to be used for tracking message
+ forwards, avoiding request loops, and identifying the protocol
+ capabilities of all senders along the request/response chain.
+
+ Each of multiple values in the Via field represents each proxy that
+ has forwarded the message. Each recipient MUST append its
+ information such that the end result is ordered according to the
+ sequence of forwarding applications. So messages originating with
+ the client or server do not include the Via header. The first proxy
+ or other intermediate adds the header and its information into the
+ field. Any additional intermediate adds additional field-values.
+ Resulting in the server seeing the chains of intermediates in a
+ client-to-server request and the client seeing the full chain in the
+ response message.
+
+ Proxies (e.g., Access Proxy or Translator Proxy) SHOULD NOT, by
+ default, forward the names and ports of hosts within the private/
+ protected region. This information SHOULD only be propagated if
+ explicitly enabled. If not enabled, the via-received of any host
+ behind the firewall/NAT SHOULD be replaced by an appropriate
+ pseudonym for that host.
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 184]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ For organizations that have strong privacy requirements for hiding
+ internal structures, a proxy MAY combine an ordered subsequence of
+ Via header field entries with identical sent-protocol values into a
+ single such entry. Applications MUST NOT combine entries that have
+ different received-protocol values.
+
+18.58. WWW-Authenticate
+
+ The WWW-Authenticate header is specified in [RFC7235]; its usage
+ depends on the used authentication schemes, such as Digest [RFC7616]
+ and Basic [RFC7617]. The WWW-Authenticate response-header field MUST
+ be included in 401 (Unauthorized) response messages. The field-value
+ consists of at least one challenge that indicates the authentication
+ scheme(s) and parameters applicable to the Request-URI. This header
+ MUST only be used in response messages related to client to server
+ requests.
+
+ The HTTP access authentication process is described in [RFC7235] with
+ some clarification in Section 19.1. User agents are advised to take
+ special care in parsing the WWW-Authenticate field-value as it might
+ contain more than one challenge, or if more than one WWW-Authenticate
+ header field is provided, the contents of a challenge itself can
+ contain a comma-separated list of authentication parameters.
+
+19. Security Framework
+
+ The RTSP security framework consists of two high-level components:
+ the pure authentication mechanisms based on HTTP authentication and
+ the message transport protection based on TLS, which is independent
+ of RTSP. Because of the similarity in syntax and usage between RTSP
+ servers and HTTP servers, the security for HTTP is reused to a large
+ extent.
+
+19.1. RTSP and HTTP Authentication
+
+ RTSP and HTTP share common authentication schemes; thus, they follow
+ the same framework as specified in [RFC7235]. RTSP uses the
+ corresponding RTSP error codes (401 and 407) and headers (WWW-
+ Authenticate, Authorization, Proxy-Authenticate, Proxy-Authorization)
+ by importing the definitions from [RFC7235]. Servers SHOULD
+ implement both the Basic [RFC7617] and the Digest [RFC7616]
+ authentication schemes. Clients MUST implement both the Basic and
+ the Digest authentication schemes so that a server that requires the
+ client to authenticate can trust that the capability is present. If
+ implementing the Digest authentication scheme, then the additional
+ considerations specified below in Section 19.1.1 MUST be followed.
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 185]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ It should be stressed that using the HTTP authentication alone does
+ not provide full RTSP message security. Therefore, TLS SHOULD be
+ used; see Section 19.2. Any RTSP message containing an Authorization
+ header using the Basic authentication scheme MUST be using a TLS
+ connection with confidentiality protection enabled, i.e., no NULL
+ encryption.
+
+ In cases where there is a chain of proxies between the client and the
+ server, each proxy may individually request the client or previous
+ proxy to authenticate itself. This is done using the Proxy-
+ Authenticate (Section 18.34), the Proxy-Authorization
+ (Section 18.36), and the Proxy-Authentication-Info (Section 18.35)
+ headers. These headers are hop-by-hop headers and are only scoped to
+ the current connection and hop. Thus, if a proxy chain exists, a
+ proxy connecting to another proxy will have to act as a client to
+ authorize itself towards the next proxy. The WWW-Authenticate
+ (Section 18.58), Authorization (Section 18.8), and Authentication-
+ Info (Section 18.7) headers are end-to-end and MUST NOT be modified
+ by proxies.
+
+ This authentication mechanism works only for client-to-server
+ requests as currently defined. This leaves server-to-client request
+ outside of the context of TLS-based communication more vulnerable to
+ message-injection attacks on the client. Based on the server-to-
+ client methods that exist, the potential risks are various: hijacking
+ (REDIRECT), denial of service (TEARDOWN and PLAY_NOTIFY), or attacks
+ with uncertain results (SET_PARAMETER).
+
+19.1.1. Digest Authentication
+
+ This section describes the modifications and clarifications required
+ to apply the HTTP Digest authentication scheme to RTSP. The RTSP
+ scheme usage is almost completely identical to that for HTTP
+ [RFC7616]. These modifications are based on the procedures defined
+ for SIP 2.0 [RFC3261] (in Section 22.4) but updated to use RFC 7235,
+ RFC 7616 and RFC 7615 instead of RFC 2617.
+
+ Digest authentication uses two additional headers, Authentication-
+ Info and Proxy-Authentication-Info, that are defined as in [RFC7615].
+ The rules for Digest authentication follow those defined in
+ [RFC7616], with "HTTP/1.1" replaced by "RTSP/2.0" in addition to the
+ following differences:
+
+ 1. Use the ABNF specified in the referenced documents, with the
+ difference that the URI parameter uses the request URI format for
+ RTSP, i.e. the ABNF element: Request-URI (see Section 20.2.1).
+ The domain parameter uses the RTSP-URI-Ref element for absolute
+ and relative URIs.
+
+
+
+Schulzrinne, et al. Standards Track [Page 186]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ 2. If MTags are used, then the example procedure for choosing a
+ nonce based on ETag can work, based on replacing the ETag with
+ the MTag.
+
+ 3. As a clarification to the calculation of the A2 value for message
+ integrity assurance in the Digest authentication scheme,
+ implementers should assume, when the entity-body is empty (that
+ is, when the RTSP messages have no message body) that the hash of
+ the message body resolves to the hash of an empty string, or:
+ H(entity-body), example MD5("") =
+ "d41d8cd98f00b204e9800998ecf8427e".
+
+19.2. RTSP over TLS
+
+ RTSP agents MUST implement RTSP over TLS as defined in this section
+ and the next Section 19.3. RTSP MUST follow the same guidelines with
+ regard to TLS [RFC5246] usage as specified for HTTP; see [RFC2818].
+ RTSP over TLS is separated from unsecured RTSP both on the URI level
+ and the port level. Instead of using the "rtsp" scheme identifier in
+ the URI, the "rtsps" scheme identifier MUST be used to signal RTSP
+ over TLS. If no port is given in a URI with the "rtsps" scheme, port
+ 322 MUST be used for TLS over TCP/IP.
+
+ When a client tries to set up an insecure channel to the server
+ (using the "rtsp" URI), and the policy for the resource requires a
+ secure channel, the server MUST redirect the client to the secure
+ service by sending a 301 redirect response code together with the
+ correct Location URI (using the "rtsps" scheme). A user or client
+ MAY upgrade a non secured URI to a secured by changing the scheme
+ from "rtsp" to "rtsps". A server implementing support for "rtsps"
+ MUST allow this.
+
+ It should be noted that TLS allows for mutual authentication (when
+ using both server and client certificates). Still, one of the more
+ common ways TLS is used is to provide only server-side authentication
+ (often to avoid client certificates). TLS is then used in addition
+ to HTTP authentication, providing transport security and server
+ authentication, while HTTP Authentication is used to authenticate the
+ client.
+
+ RTSP includes the possibility to keep a TCP session up between the
+ client and server, throughout the RTSP session lifetime. It may be
+ convenient to keep the TCP session, not only to save the extra setup
+ time for TCP, but also the extra setup time for TLS (even if TLS uses
+ the resume function, there will be almost two extra round trips).
+ Still, when TLS is used, such behavior introduces extra active state
+ in the server, not only for TCP and RTSP, but also for TLS. This may
+ increase the vulnerability to DoS attacks.
+
+
+
+Schulzrinne, et al. Standards Track [Page 187]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ There exists a potential security vulnerability when reusing TCP and
+ TLS state for different resources (URIs). If two different hostnames
+ point at the same IP address, it can be desirable to reuse the TCP/
+ TLS connection to that server. In that case, the RTSP agent having
+ the TCP/TLS connection MUST verify that the server certificate
+ associated with the connection has a SubjectAltName matching the
+ hostname present in the URI for the resource an RTSP request is to be
+ issued.
+
+ In addition to these recommendations, Section 19.3 gives further
+ recommendations of TLS usage with proxies.
+
+19.3. Security and Proxies
+
+ The nature of a proxy is often to act as a "man in the middle", while
+ security is often about preventing the existence of one. This
+ section provides clients with the possibility to use proxies even
+ when applying secure transports (TLS) between the RTSP agents. The
+ TLS proxy mechanism allows for server and proxy identification using
+ certificates. However, the client cannot be identified based on
+ certificates. The client needs to select between using the procedure
+ specified below or using a TLS connection directly (bypassing any
+ proxies) to the server. The choice may be dependent on policies.
+
+ In general, there are two categories of proxies: the transparent
+ proxies (of which the client is not aware) and the non-transparent
+ proxies (of which the client is aware). This memo specifies only
+ non-transparent RTSP proxies, i.e., proxies visible to the RTSP
+ client and RTSP server. An infrastructure based on proxies requires
+ that the trust model be such that both client and server can trust
+ the proxies to handle the RTSP messages correctly. To be able to
+ trust a proxy, the client and server also need to be aware of the
+ proxy. Hence, transparent proxies cannot generally be seen as
+ trusted and will not work well with security (unless they work only
+ at the transport layer). In the rest of this section, any reference
+ to "proxy" will be to a non-transparent proxy, which inspects or
+ manipulates the RTSP messages.
+
+ HTTP Authentication is built on the assumption of proxies and can
+ provide user-proxy authentication and proxy-proxy/server
+ authentication in addition to the client-server authentication.
+
+ When TLS is applied and a proxy is used, the client will connect to
+ the proxy's address when connecting to any RTSP server. This implies
+ that for TLS, the client will authenticate the proxy server and not
+ the end server. Note that when the client checks the server
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 188]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ certificate in TLS, it MUST check the proxy's identity (URI or
+ possibly other known identity) against the proxy's identity as
+ presented in the proxy's Certificate message.
+
+ The problem is that for a proxy accepted by the client, the proxy
+ needs to be provided information on which grounds it should accept
+ the next-hop certificate. Both the proxy and the user may have rules
+ for this, and the user should have the possibility to select the
+ desired behavior. To handle this case, the Accept-Credentials header
+ (see Section 18.2) is used, where the client can request the proxy or
+ proxies to relay back the chain of certificates used to authenticate
+ any intermediate proxies as well as the server. The assumption that
+ the proxies are viewed as trusted gives the user a possibility to
+ enforce policies on each trusted proxy of whether it should accept
+ the next agent in the chain. However, it should be noted that not
+ all deployments will return the chain of certificates used to
+ authenticate any intermediate proxies as well as the server. An
+ operator of such a deployment may want to hide its topology from the
+ client. It should be noted well that the client does not have any
+ insight into the proxy's operation. Even if the proxy is trusted, it
+ can still return an incomplete chain of certificates.
+
+ A proxy MUST use TLS for the next hop if the RTSP request includes an
+ "rtsps" URI. TLS MAY be applied on intermediate links (e.g., between
+ client and proxy or between proxy and proxy) even if the resource and
+ the end server are not required to use it. The chain of proxies used
+ by a client to reach a server and its TLS sessions MUST have
+ commensurate security. Therefore, a proxy MUST, when initiating the
+ next-hop TLS connection, use the incoming TLS connections cipher-
+ suite list, only modified by removing any cipher suites that the
+ proxy does not support. In case a proxy fails to establish a TLS
+ connection due to cipher-suite mismatch between proxy and next-hop
+ proxy or server, this is indicated using error code 472 (Failure to
+ Establish Secure Connection).
+
+19.3.1. Accept-Credentials
+
+ The Accept-Credentials header can be used by the client to distribute
+ simple authorization policies to intermediate proxies. The client
+ includes the Accept-Credentials header to dictate how the proxy
+ treats the server / next proxy certificate. There are currently
+ three methods defined:
+
+ Any: With "any", the proxy (or proxies) MUST accept whatever
+ certificate is presented. Of course, this is not a recommended
+ option to use, but it may be useful in certain circumstances
+ (such as testing).
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 189]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Proxy: For the "proxy" method, the proxy (or proxies) MUST use its
+ own policies to validate the certificate and decide whether or
+ not to accept it. This is convenient in cases where the user
+ has a strong trust relation with the proxy. Reasons why a
+ strong trust relation may exist are personal/company proxy or
+ the proxy has an out-of-band policy configuration mechanism.
+
+ User: For the "user" method, the proxy (or proxies) MUST send
+ credential information about the next hop to the client for
+ authorization. The client can then decide whether or not the
+ proxy should accept the certificate. See Section 19.3.2 for
+ further details.
+
+ If the Accept-Credentials header is not included in the RTSP request
+ from the client, then the "Proxy" method MUST be used as default. If
+ a method other than the "Proxy" is to be used, then the Accept-
+ Credentials header MUST be included in all of the RTSP requests from
+ the client. This is because it cannot be assumed that the proxy
+ always keeps the TLS state or the user's previous preference between
+ different RTSP messages (in particular, if the time interval between
+ the messages is long).
+
+ With the "Any" and "Proxy" methods, the proxy will apply the policy
+ as defined for each method. If the policy does not accept the
+ credentials of the next hop, the proxy MUST respond with a message
+ using status code 471 (Connection Credentials Not Accepted).
+
+ An RTSP request in the direction server to client MUST NOT include
+ the Accept-Credentials header. As for the non-secured communication,
+ the possibility for these requests depends on the presence of a
+ client established connection. However, if the server-to-client
+ request is in relation to a session established over a TLS secured
+ channel, it MUST be sent in a TLS secured connection. That secured
+ connection MUST also be the one used by the last client-to-server
+ request. If no such transport connection exists at the time when the
+ server desires to send the request, the server MUST discard the
+ message.
+
+ Further policies MAY be defined and registered, but this should be
+ done with caution.
+
+19.3.2. User-Approved TLS Procedure
+
+ For the "User" method, each proxy MUST perform the following
+ procedure for each RTSP request:
+
+ o Set up the TLS session to the next hop if not already present
+ (i.e., run the TLS handshake, but do not send the RTSP request).
+
+
+
+Schulzrinne, et al. Standards Track [Page 190]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ o Extract the peer certificate chain for the TLS session.
+
+ o Check if a matching identity and hash of the peer certificate are
+ present in the Accept-Credentials header. If present, send the
+ message to the next hop and conclude these procedures. If not, go
+ to the next step.
+
+ o The proxy responds to the RTSP request with a 470 or 407 response
+ code. The 407 response code MAY be used when the proxy requires
+ both user and connection authorization from user or client. In
+ this message the proxy MUST include a Connection-Credentials
+ header, see Section 18.13, with the next hop's identity and
+ certificate.
+
+ The client MUST upon receiving a 470 (Connection Authorization
+ Required) or 407 (Proxy Authentication Required) response with
+ Connection-Credentials header take the decision on whether or not to
+ accept the certificate (if it cannot do so, the user SHOULD be
+ consulted). Using IP addresses in the next-hop URI and certificates
+ rather than domain names makes it very difficult for a user to
+ determine whether or not it should approve the next hop. Proxies are
+ RECOMMENDED to use domain names to identify themselves in URIs and in
+ the certificates. If the certificate is accepted, the client has to
+ again send the RTSP request. In that request, the client has to
+ include the Accept-Credentials header including the hash over the
+ DER-encoded certificate for all trusted proxies in the chain.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 191]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Example:
+
+ C->P: SETUP rtsps://test.example.org/secret/audio RTSP/2.0
+ CSeq: 2
+ Transport: RTP/AVP;unicast;dest_addr="192.0.2.5:4588"/
+ "192.0.2.5:4589"
+ Accept-Ranges: npt, smpte, clock
+ Accept-Credentials: User
+
+ P->C: RTSP/2.0 470 Connection Authorization Required
+ CSeq: 2
+ Connection-Credentials: "rtsps://test.example.org";
+ MIIDNTCCAp...
+
+ C->P: SETUP rtsps://test.example.org/secret/audio RTSP/2.0
+ CSeq: 3
+ Transport: RTP/AVP;unicast;dest_addr="192.0.2.5:4588"/
+ "192.0.2.5:4589"
+ Accept-Credentials: User "rtsps://test.example.org";sha-256;
+ dPYD7txpoGTbAqZZQJ+vaeOkyH4=
+ Accept-Ranges: npt, smpte, clock
+
+ P->S: SETUP rtsps://test.example.org/secret/audio RTSP/2.0
+ CSeq: 3
+ Transport: RTP/AVP;unicast;dest_addr="192.0.2.5:4588"/
+ "192.0.2.5:4589"
+ Via: RTSP/2.0 proxy.example.org
+ Accept-Credentials: User "rtsps://test.example.org";sha-256;
+ dPYD7txpoGTbAqZZQJ+vaeOkyH4=
+ Accept-Ranges: npt, smpte, clock
+
+ One implication of this process is that the connection for secured
+ RTSP messages may take significantly more round-trip times for the
+ first message. A complete extra message exchange between the proxy
+ connecting to the next hop and the client results because of the
+ process for approval for each hop. However, if each message contains
+ the chain of proxies that the requester accepts, the remaining
+ message exchange should not be delayed. The procedure of including
+ the credentials in each request rather than building state in each
+ proxy avoids the need for revocation procedures.
+
+20. Syntax
+
+ The RTSP syntax is described in an Augmented Backus-Naur Form (ABNF)
+ as defined in RFC 5234 [RFC5234]. It uses the basic definitions
+ present in RFC 5234.
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 192]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Please note that ABNF strings, e.g., "Accept", are case insensitive
+ as specified in Section 2.3 of RFC 5234.
+
+ The RTSP syntax makes use of the ISO 10646 character set in UTF-8
+ encoding [RFC3629].
+
+20.1. Base Syntax
+
+ RTSP header values can be folded onto multiple lines if the
+ continuation line begins with a space or horizontal tab. All linear
+ whitespace, including folding, has the same semantics as SP. A
+ recipient MAY replace any linear whitespace with a single SP before
+ interpreting the field-value or forwarding the message downstream.
+ The SWS construct is used when linear whitespace is optional,
+ generally between tokens and separators.
+
+ To separate the header name from the rest of value, a colon is used,
+ which, by the above rule, allows whitespace before, but no line
+ break, and whitespace after, including a line break. The HCOLON
+ defines this construct.
+
+ OCTET = %x00-FF ; any 8-bit sequence of data
+ CHAR = %x01-7F ; any US-ASCII character (octets 1 - 127)
+ UPALPHA = %x41-5A ; any US-ASCII uppercase letter "A".."Z"
+ LOALPHA = %x61-7A ; any US-ASCII lowercase letter "a".."z"
+ ALPHA = UPALPHA / LOALPHA
+ DIGIT = %x30-39 ; any US-ASCII digit "0".."9"
+ CTL = %x00-1F / %x7F ; any US-ASCII control character
+ ; (octets 0 - 31) and DEL (127)
+ CR = %x0D ; US-ASCII CR, carriage return (13)
+ LF = %x0A ; US-ASCII LF, linefeed (10)
+ SP = %x20 ; US-ASCII SP, space (32)
+ HT = %x09 ; US-ASCII HT, horizontal-tab (9)
+ BACKSLASH = %x5C ; US-ASCII backslash (92)
+ CRLF = CR LF
+ LWS = [CRLF] 1*( SP / HT ) ; Line-breaking whitespace
+ SWS = [LWS] ; Separating whitespace
+ HCOLON = *( SP / HT ) ":" SWS
+ TEXT = %x20-7E / %x80-FF ; any OCTET except CTLs
+ tspecials = "(" / ")" / "<" / ">" / "@"
+ / "," / ";" / ":" / BACKSLASH / DQUOTE
+ / "/" / "[" / "]" / "?" / "="
+ / "{" / "}" / SP / HT
+ token = 1*(%x21 / %x23-27 / %x2A-2B / %x2D-2E / %x30-39
+ / %x41-5A / %x5E-7A / %x7C / %x7E)
+ ; 1*<any CHAR except CTLs or tspecials>
+ quoted-string = ( DQUOTE *qdtext DQUOTE )
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 193]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ qdtext = %x20-21 / %x23-5B / %x5D-7E / quoted-pair
+ / UTF8-NONASCII
+ ; No DQUOTE and no "\"
+ quoted-pair = "\\" / ( "\" DQUOTE )
+ ctext = %x20-27 / %x2A-7E
+ / %x80-FF ; any OCTET except CTLs, "(" and ")"
+ generic-param = token [ EQUAL gen-value ]
+ gen-value = token / host / quoted-string
+
+ safe = "$" / "-" / "_" / "." / "+"
+ extra = "!" / "*" / "'" / "(" / ")" / ","
+ rtsp-extra = "!" / "*" / "'" / "(" / ")"
+
+ HEX = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
+ / "a" / "b" / "c" / "d" / "e" / "f"
+ LHEX = DIGIT / "a" / "b" / "c" / "d" / "e" / "f"
+ ; lowercase "a-f" Hex
+ reserved = ";" / "/" / "?" / ":" / "@" / "&" / "="
+
+ unreserved = ALPHA / DIGIT / safe / extra
+ rtsp-unreserved = ALPHA / DIGIT / safe / rtsp-extra
+
+ base64 = *base64-unit [base64-pad]
+ base64-unit = 4base64-char
+ base64-pad = (2base64-char "==") / (3base64-char "=")
+ base64-char = ALPHA / DIGIT / "+" / "/"
+ SLASH = SWS "/" SWS ; slash
+ EQUAL = SWS "=" SWS ; equal
+ LPAREN = SWS "(" SWS ; left parenthesis
+ RPAREN = SWS ")" SWS ; right parenthesis
+ COMMA = SWS "," SWS ; comma
+ SEMI = SWS ";" SWS ; semicolon
+ COLON = SWS ":" SWS ; colon
+ MINUS = SWS "-" SWS ; minus/dash
+ LDQUOT = SWS DQUOTE ; open double quotation mark
+ RDQUOT = DQUOTE SWS ; close double quotation mark
+ RAQUOT = ">" SWS ; right angle quote
+ LAQUOT = SWS "<" ; left angle quote
+
+ TEXT-UTF8char = %x21-7E / UTF8-NONASCII
+ UTF8-NONASCII = UTF8-2 / UTF8-3 / UTF8-4
+ UTF8-1 = <As defined in RFC 3629>
+ UTF8-2 = <As defined in RFC 3629>
+ UTF8-3 = <As defined in RFC 3629>
+ UTF8-4 = <As defined in RFC 3629>
+ UTF8-tail = <As defined in RFC 3629>
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 194]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ POS-FLOAT = 1*12DIGIT ["." 1*9DIGIT]
+ FLOAT = ["-"] POS-FLOAT
+
+20.2. RTSP Protocol Definition
+
+20.2.1. Generic Protocol Elements
+
+ RTSP-IRI = schemes ":" IRI-rest
+ IRI-rest = ihier-part [ "?" iquery ]
+ ihier-part = "//" iauthority ipath-abempty
+ RTSP-IRI-ref = RTSP-IRI / irelative-ref
+ irelative-ref = irelative-part [ "?" iquery ]
+ irelative-part = "//" iauthority ipath-abempty
+ / ipath-absolute
+ / ipath-noscheme
+ / ipath-empty
+
+ iauthority = < As defined in RFC 3987>
+ ipath = ipath-abempty ; begins with "/" or is empty
+ / ipath-absolute ; begins with "/" but not "//"
+ / ipath-noscheme ; begins with a non-colon segment
+ / ipath-rootless ; begins with a segment
+ / ipath-empty ; zero characters
+
+ ipath-abempty = *( "/" isegment )
+ ipath-absolute = "/" [ isegment-nz *( "/" isegment ) ]
+ ipath-noscheme = isegment-nz-nc *( "/" isegment )
+ ipath-rootless = isegment-nz *( "/" isegment )
+ ipath-empty = 0<ipchar>
+
+ isegment = *ipchar [";" *ipchar]
+ isegment-nz = 1*ipchar [";" *ipchar]
+ / ";" *ipchar
+ isegment-nz-nc = (1*ipchar-nc [";" *ipchar-nc])
+ / ";" *ipchar-nc
+ ; non-zero-length segment without any colon ":"
+ ; No parameter (; delimited) inside path.
+
+ ipchar = iunreserved / pct-encoded / sub-delims / ":" / "@"
+ ipchar-nc = iunreserved / pct-encoded / sub-delims / "@"
+ ; sub-delims is different from RFC 3987
+ ; not including ";"
+
+ iquery = < As defined in RFC 3987>
+ iunreserved = < As defined in RFC 3987>
+ pct-encoded = < As defined in RFC 3987>
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 195]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ RTSP-URI = schemes ":" URI-rest
+ RTSP-REQ-URI = schemes ":" URI-req-rest
+ RTSP-URI-Ref = RTSP-URI / RTSP-Relative
+ RTSP-REQ-Ref = RTSP-REQ-URI / RTSP-REQ-Rel
+ schemes = "rtsp" / "rtsps" / scheme
+ scheme = < As defined in RFC 3986>
+ URI-rest = hier-part [ "?" query ]
+ URI-req-rest = hier-part [ "?" query ]
+ ; Note fragment part not allowed in requests
+ hier-part = "//" authority path-abempty
+
+ RTSP-Relative = relative-part [ "?" query ]
+ RTSP-REQ-Rel = relative-part [ "?" query ]
+ relative-part = "//" authority path-abempty
+ / path-absolute
+ / path-noscheme
+ / path-empty
+
+ authority = < As defined in RFC 3986>
+ query = < As defined in RFC 3986>
+
+ path = path-abempty ; begins with "/" or is empty
+ / path-absolute ; begins with "/" but not "//"
+ / path-noscheme ; begins with a non-colon segment
+ / path-rootless ; begins with a segment
+ / path-empty ; zero characters
+
+ path-abempty = *( "/" segment )
+ path-absolute = "/" [ segment-nz *( "/" segment ) ]
+ path-noscheme = segment-nz-nc *( "/" segment )
+ path-rootless = segment-nz *( "/" segment )
+ path-empty = 0<pchar>
+
+ segment = *pchar [";" *pchar]
+ segment-nz = ( 1*pchar [";" *pchar]) / (";" *pchar)
+ segment-nz-nc = ( 1*pchar-nc [";" *pchar-nc]) / (";" *pchar-nc)
+ ; non-zero-length segment without any colon ":"
+ ; No parameter (; delimited) inside path.
+
+ pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
+ pchar-nc = unreserved / pct-encoded / sub-delims / "@"
+
+ sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
+ / "*" / "+" / "," / "="
+ ; sub-delims is different from RFC 3986/3987
+ ; not including ";"
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 196]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ smpte-range = smpte-type [EQUAL smpte-range-spec]
+ ; See section 4.4
+ smpte-range-spec = ( smpte-time "-" [ smpte-time ] )
+ / ( "-" smpte-time )
+ smpte-type = "smpte" / "smpte-30-drop"
+ / "smpte-25" / smpte-type-extension
+ ; other timecodes may be added
+ smpte-type-extension = "smpte" token
+ smpte-time = 1*2DIGIT ":" 1*2DIGIT ":" 1*2DIGIT
+ [ ":" 1*2DIGIT [ "." 1*2DIGIT ] ]
+
+ npt-range = "npt" [EQUAL npt-range-spec]
+ npt-range-spec = ( npt-time "-" [ npt-time ] ) / ( "-" npt-time )
+ npt-time = "now" / npt-sec / npt-hhmmss / npt-hhmmss-comp
+ npt-sec = 1*19DIGIT [ "." 1*9DIGIT ]
+ npt-hhmmss = npt-hh ":" npt-mm ":" npt-ss [ "." 1*9DIGIT ]
+ npt-hh = 2*19DIGIT ; any positive number
+ npt-mm = 2*2DIGIT ; 0-59
+ npt-ss = 2*2DIGIT ; 0-59
+ npt-hhmmss-comp = npt-hh-comp ":" npt-mm-comp ":" npt-ss-comp
+ [ "." 1*9DIGIT ] ; Compatibility format
+ npt-hh-comp = 1*19DIGIT ; any positive number
+ npt-mm-comp = 1*2DIGIT ; 0-59
+ npt-ss-comp = 1*2DIGIT ; 0-59
+
+ utc-range = "clock" [EQUAL utc-range-spec]
+ utc-range-spec = ( utc-time "-" [ utc-time ] ) / ( "-" utc-time )
+ utc-time = utc-date "T" utc-clock "Z"
+ utc-date = 8DIGIT
+ utc-clock = 6DIGIT [ "." 1*9DIGIT ]
+
+ feature-tag = token
+
+ session-id = 1*256( ALPHA / DIGIT / safe )
+
+ extension-header = header-name HCOLON header-value
+ header-name = token
+ header-value = *(TEXT-UTF8char / LWS)
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 197]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+20.2.2. Message Syntax
+
+ RTSP-message = Request / Response ; RTSP/2.0 messages
+
+ Request = Request-Line
+ *((general-header
+ / request-header
+ / message-body-header) CRLF)
+ CRLF
+ [ message-body-data ]
+
+ Response = Status-Line
+ *((general-header
+ / response-header
+ / message-body-header) CRLF)
+ CRLF
+ [ message-body-data ]
+
+ Request-Line = Method SP Request-URI SP RTSP-Version CRLF
+
+ Status-Line = RTSP-Version SP Status-Code SP Reason-Phrase CRLF
+
+ Method = "DESCRIBE"
+ / "GET_PARAMETER"
+ / "OPTIONS"
+ / "PAUSE"
+ / "PLAY"
+ / "PLAY_NOTIFY"
+ / "REDIRECT"
+ / "SETUP"
+ / "SET_PARAMETER"
+ / "TEARDOWN"
+ / extension-method
+
+ extension-method = token
+
+ Request-URI = "*" / RTSP-REQ-URI
+ RTSP-Version = "RTSP/" 1*DIGIT "." 1*DIGIT
+
+ message-body-data = 1*OCTET
+
+ Status-Code = "100" ; Continue
+ / "200" ; OK
+ / "301" ; Moved Permanently
+ / "302" ; Found
+ / "303" ; See Other
+ / "304" ; Not Modified
+ / "305" ; Use Proxy
+
+
+
+Schulzrinne, et al. Standards Track [Page 198]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ / "400" ; Bad Request
+ / "401" ; Unauthorized
+ / "402" ; Payment Required
+ / "403" ; Forbidden
+ / "404" ; Not Found
+ / "405" ; Method Not Allowed
+ / "406" ; Not Acceptable
+ / "407" ; Proxy Authentication Required
+ / "408" ; Request Timeout
+ / "410" ; Gone
+ / "412" ; Precondition Failed
+ / "413" ; Request Message Body Too Large
+ / "414" ; Request-URI Too Long
+ / "415" ; Unsupported Media Type
+ / "451" ; Parameter Not Understood
+ / "452" ; reserved
+ / "453" ; Not Enough Bandwidth
+ / "454" ; Session Not Found
+ / "455" ; Method Not Valid In This State
+ / "456" ; Header Field Not Valid for Resource
+ / "457" ; Invalid Range
+ / "458" ; Parameter Is Read-Only
+ / "459" ; Aggregate Operation Not Allowed
+ / "460" ; Only Aggregate Operation Allowed
+ / "461" ; Unsupported Transport
+ / "462" ; Destination Unreachable
+ / "463" ; Destination Prohibited
+ / "464" ; Data Transport Not Ready Yet
+ / "465" ; Notification Reason Unknown
+ / "466" ; Key Management Error
+ / "470" ; Connection Authorization Required
+ / "471" ; Connection Credentials Not Accepted
+ / "472" ; Failure to Establish Secure Connection
+ / "500" ; Internal Server Error
+ / "501" ; Not Implemented
+ / "502" ; Bad Gateway
+ / "503" ; Service Unavailable
+ / "504" ; Gateway Timeout
+ / "505" ; RTSP Version Not Supported
+ / "551" ; Option Not Supported
+ / "553" ; Proxy Unavailable
+ / extension-code
+
+ extension-code = 3DIGIT
+
+ Reason-Phrase = 1*(TEXT-UTF8char / HT / SP)
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 199]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ rtsp-header = general-header
+ / request-header
+ / response-header
+ / message-body-header
+
+ general-header = Accept-Ranges
+ / Cache-Control
+ / Connection
+ / CSeq
+ / Date
+ / Media-Properties
+ / Media-Range
+ / Pipelined-Requests
+ / Proxy-Supported
+ / Range
+ / RTP-Info
+ / Scale
+ / Seek-Style
+ / Server
+ / Session
+ / Speed
+ / Supported
+ / Timestamp
+ / Transport
+ / User-Agent
+ / Via
+ / extension-header
+
+ request-header = Accept
+ / Accept-Credentials
+ / Accept-Encoding
+ / Accept-Language
+ / Authorization
+ / Bandwidth
+ / Blocksize
+ / From
+ / If-Match
+ / If-Modified-Since
+ / If-None-Match
+ / Notify-Reason
+ / Proxy-Authorization
+ / Proxy-Require
+ / Referrer
+ / Request-Status
+ / Require
+ / Terminate-Reason
+ / extension-header
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 200]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ response-header = Authentication-Info
+ / Connection-Credentials
+ / Location
+ / MTag
+ / Proxy-Authenticate
+ / Proxy-Authentication-Info
+ / Public
+ / Retry-After
+ / Unsupported
+ / WWW-Authenticate
+ / extension-header
+
+ message-body-header = Allow
+ / Content-Base
+ / Content-Encoding
+ / Content-Language
+ / Content-Length
+ / Content-Location
+ / Content-Type
+ / Expires
+ / Last-Modified
+ / extension-header
+
+20.2.3. Header Syntax
+
+ Accept = "Accept" HCOLON
+ [ accept-range *(COMMA accept-range) ]
+ accept-range = media-type-range [SEMI accept-params]
+ media-type-range = ( "*/*"
+ / ( m-type SLASH "*" )
+ / ( m-type SLASH m-subtype )
+ ) *( SEMI m-parameter )
+ accept-params = "q" EQUAL qvalue *(SEMI generic-param )
+ qvalue = ( "0" [ "." *3DIGIT ] )
+ / ( "1" [ "." *3("0") ] )
+ Accept-Credentials = "Accept-Credentials" HCOLON cred-decision
+ cred-decision = ("User" [LWS cred-info])
+ / "Proxy"
+ / "Any"
+ / (token [LWS 1*header-value])
+ ; For future extensions
+ cred-info = cred-info-data *(COMMA cred-info-data)
+
+ cred-info-data = DQUOTE RTSP-REQ-URI DQUOTE SEMI hash-alg
+ SEMI base64
+ hash-alg = "sha-256" / extension-alg
+ extension-alg = token
+ Accept-Encoding = "Accept-Encoding" HCOLON
+
+
+
+Schulzrinne, et al. Standards Track [Page 201]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ [ encoding *(COMMA encoding) ]
+ encoding = codings [SEMI accept-params]
+ codings = content-coding / "*"
+ content-coding = "identity" / token
+ Accept-Language = "Accept-Language" HCOLON
+ language *(COMMA language)
+ language = language-range [SEMI accept-params]
+ language-range = language-tag / "*"
+ language-tag = primary-tag *( "-" subtag )
+ primary-tag = 1*8ALPHA
+ subtag = 1*8ALPHA
+ Accept-Ranges = "Accept-Ranges" HCOLON acceptable-ranges
+ acceptable-ranges = (range-unit *(COMMA range-unit))
+ range-unit = "npt" / "smpte" / "smpte-30-drop" / "smpte-25"
+ / "clock" / extension-format
+ extension-format = token
+ Allow = "Allow" HCOLON Method *(COMMA Method)
+ Authentication-Info = "Authentication-Info" HCOLON auth-param-list
+ auth-param-list = <As the Authentication-Info element in RFC 7615>
+ Authorization = "Authorization" HCOLON credentials
+ credentials = <As defined by RFC 7235>
+
+ Bandwidth = "Bandwidth" HCOLON 1*19DIGIT
+
+ Blocksize = "Blocksize" HCOLON 1*9DIGIT
+
+ Cache-Control = "Cache-Control" HCOLON cache-directive
+ *(COMMA cache-directive)
+ cache-directive = cache-rqst-directive
+ / cache-rspns-directive
+
+ cache-rqst-directive = "no-cache"
+ / "max-stale" [EQUAL delta-seconds]
+ / "min-fresh" EQUAL delta-seconds
+ / "only-if-cached"
+ / cache-extension
+
+ cache-rspns-directive = "public"
+ / "private"
+ / "no-cache"
+ / "no-transform"
+ / "must-revalidate"
+ / "proxy-revalidate"
+ / "max-age" EQUAL delta-seconds
+ / cache-extension
+
+ cache-extension = token [EQUAL (token / quoted-string)]
+ delta-seconds = 1*19DIGIT
+
+
+
+Schulzrinne, et al. Standards Track [Page 202]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Connection = "Connection" HCOLON connection-token
+ *(COMMA connection-token)
+ connection-token = "close" / token
+
+ Connection-Credentials = "Connection-Credentials" HCOLON cred-chain
+ cred-chain = DQUOTE RTSP-REQ-URI DQUOTE SEMI base64
+
+ Content-Base = "Content-Base" HCOLON RTSP-URI
+ Content-Encoding = "Content-Encoding" HCOLON
+ content-coding *(COMMA content-coding)
+ Content-Language = "Content-Language" HCOLON
+ language-tag *(COMMA language-tag)
+ Content-Length = "Content-Length" HCOLON 1*19DIGIT
+ Content-Location = "Content-Location" HCOLON RTSP-REQ-Ref
+ Content-Type = "Content-Type" HCOLON media-type
+ media-type = m-type SLASH m-subtype *(SEMI m-parameter)
+ m-type = discrete-type / composite-type
+ discrete-type = "text" / "image" / "audio" / "video"
+ / "application" / extension-token
+ composite-type = "message" / "multipart" / extension-token
+ extension-token = ietf-token / x-token
+ ietf-token = token
+ x-token = "x-" token
+ m-subtype = extension-token / iana-token
+ iana-token = token
+ m-parameter = m-attribute EQUAL m-value
+ m-attribute = token
+ m-value = token / quoted-string
+
+ CSeq = "CSeq" HCOLON cseq-nr
+ cseq-nr = 1*9DIGIT
+ Date = "Date" HCOLON RTSP-date
+ RTSP-date = date-time ;
+ date-time = <As defined in RFC 5322>
+ Expires = "Expires" HCOLON RTSP-date
+ From = "From" HCOLON from-spec
+ from-spec = ( name-addr / addr-spec ) *( SEMI from-param )
+ name-addr = [ display-name ] LAQUOT addr-spec RAQUOT
+ addr-spec = RTSP-REQ-URI / absolute-URI
+ absolute-URI = < As defined in RFC 3986>
+ display-name = *(token LWS) / quoted-string
+ from-param = tag-param / generic-param
+ tag-param = "tag" EQUAL token
+ If-Match = "If-Match" HCOLON ("*" / message-tag-list)
+ message-tag-list = message-tag *(COMMA message-tag)
+ message-tag = [ weak ] opaque-tag
+ weak = "W/"
+ opaque-tag = quoted-string
+
+
+
+Schulzrinne, et al. Standards Track [Page 203]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ If-Modified-Since = "If-Modified-Since" HCOLON RTSP-date
+ If-None-Match = "If-None-Match" HCOLON ("*" / message-tag-list)
+ Last-Modified = "Last-Modified" HCOLON RTSP-date
+ Location = "Location" HCOLON RTSP-REQ-URI
+ Media-Properties = "Media-Properties" HCOLON [media-prop-list]
+ media-prop-list = media-prop-value *(COMMA media-prop-value)
+ media-prop-value = ("Random-Access" [EQUAL POS-FLOAT])
+ / "Beginning-Only"
+ / "No-Seeking"
+ / "Immutable"
+ / "Dynamic"
+ / "Time-Progressing"
+ / "Unlimited"
+ / ("Time-Limited" EQUAL utc-time)
+ / ("Time-Duration" EQUAL POS-FLOAT)
+ / ("Scales" EQUAL scale-value-list)
+ / media-prop-ext
+ media-prop-ext = token [EQUAL (1*rtsp-unreserved / quoted-string)]
+ scale-value-list = DQUOTE scale-entry *(COMMA scale-entry) DQUOTE
+ scale-entry = scale-value / (scale-value COLON scale-value)
+ scale-value = FLOAT
+ Media-Range = "Media-Range" HCOLON [ranges-list]
+ ranges-list = ranges-spec *(COMMA ranges-spec)
+ MTag = "MTag" HCOLON message-tag
+ Notify-Reason = "Notify-Reason" HCOLON Notify-Reas-val
+ Notify-Reas-val = "end-of-stream"
+ / "media-properties-update"
+ / "scale-change"
+ / Notify-Reason-extension
+ Notify-Reason-extension = token
+ Pipelined-Requests = "Pipelined-Requests" HCOLON startup-id
+ startup-id = 1*8DIGIT
+
+ Proxy-Authenticate = "Proxy-Authenticate" HCOLON challenge-list
+ challenge-list = <As defined by the WWW-Authenticate in RFC 7235>
+ Proxy-Authentication-Info = "Proxy-Authentication-Info" HCOLON
+ auth-param-list
+ Proxy-Authorization = "Proxy-Authorization" HCOLON credentials
+ Proxy-Require = "Proxy-Require" HCOLON feature-tag-list
+ feature-tag-list = feature-tag *(COMMA feature-tag)
+ Proxy-Supported = "Proxy-Supported" HCOLON [feature-tag-list]
+
+ Public = "Public" HCOLON Method *(COMMA Method)
+
+ Range = "Range" HCOLON ranges-spec
+
+ ranges-spec = npt-range / utc-range / smpte-range
+ / range-ext
+
+
+
+Schulzrinne, et al. Standards Track [Page 204]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ range-ext = extension-format [EQUAL range-value]
+ range-value = 1*(rtsp-unreserved / quoted-string / ":" )
+
+ Referrer = "Referrer" HCOLON (absolute-URI / RTSP-URI-Ref)
+ Request-Status = "Request-Status" HCOLON req-status-info
+ req-status-info = cseq-info LWS status-info LWS reason-info
+ cseq-info = "cseq" EQUAL cseq-nr
+ status-info = "status" EQUAL Status-Code
+ reason-info = "reason" EQUAL DQUOTE Reason-Phrase DQUOTE
+ Require = "Require" HCOLON feature-tag-list
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 205]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ RTP-Info = "RTP-Info" HCOLON [rtsp-info-spec
+ *(COMMA rtsp-info-spec)]
+ rtsp-info-spec = stream-url 1*ssrc-parameter
+ stream-url = "url" EQUAL DQUOTE RTSP-REQ-Ref DQUOTE
+ ssrc-parameter = LWS "ssrc" EQUAL ssrc HCOLON
+ ri-parameter *(SEMI ri-parameter)
+ ri-parameter = ("seq" EQUAL 1*5DIGIT)
+ / ("rtptime" EQUAL 1*10DIGIT)
+ / generic-param
+
+ Retry-After = "Retry-After" HCOLON (RTSP-date / delta-seconds)
+ Scale = "Scale" HCOLON scale-value
+ Seek-Style = "Seek-Style" HCOLON Seek-S-values
+ Seek-S-values = "RAP"
+ / "CoRAP"
+ / "First-Prior"
+ / "Next"
+ / Seek-S-value-ext
+ Seek-S-value-ext = token
+
+ Server = "Server" HCOLON ( product / comment )
+ *(LWS (product / comment))
+ product = token [SLASH product-version]
+ product-version = token
+ comment = LPAREN *( ctext / quoted-pair) RPAREN
+
+ Session = "Session" HCOLON session-id
+ [ SEMI "timeout" EQUAL delta-seconds ]
+
+ Speed = "Speed" HCOLON lower-bound MINUS upper-bound
+ lower-bound = POS-FLOAT
+ upper-bound = POS-FLOAT
+
+ Supported = "Supported" HCOLON [feature-tag-list]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 206]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Terminate-Reason = "Terminate-Reason" HCOLON TR-Info
+ TR-Info = TR-Reason *(SEMI TR-Parameter)
+ TR-Reason = "Session-Timeout"
+ / "Server-Admin"
+ / "Internal-Error"
+ / token
+ TR-Parameter = TR-time / TR-user-msg / generic-param
+ TR-time = "time" EQUAL utc-time
+ TR-user-msg = "user-msg" EQUAL quoted-string
+
+ Timestamp = "Timestamp" HCOLON timestamp-value [LWS delay]
+ timestamp-value = *19DIGIT [ "." *9DIGIT ]
+ delay = *9DIGIT [ "." *9DIGIT ]
+
+ Transport = "Transport" HCOLON transport-spec
+ *(COMMA transport-spec)
+ transport-spec = transport-id *trns-parameter
+ transport-id = trans-id-rtp / other-trans
+ trans-id-rtp = "RTP/" profile ["/" lower-transport]
+ ; no LWS is allowed inside transport-id
+ other-trans = token *("/" token)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 207]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ profile = "AVP" / "SAVP" / "AVPF" / "SAVPF" / token
+ lower-transport = "TCP" / "UDP" / token
+ trns-parameter = (SEMI ( "unicast" / "multicast" ))
+ / (SEMI "interleaved" EQUAL channel ["-" channel])
+ / (SEMI "ttl" EQUAL ttl)
+ / (SEMI "layers" EQUAL 1*DIGIT)
+ / (SEMI "ssrc" EQUAL ssrc *(SLASH ssrc))
+ / (SEMI "mode" EQUAL mode-spec)
+ / (SEMI "dest_addr" EQUAL addr-list)
+ / (SEMI "src_addr" EQUAL addr-list)
+ / (SEMI "setup" EQUAL contrans-setup)
+ / (SEMI "connection" EQUAL contrans-con)
+ / (SEMI "RTCP-mux")
+ / (SEMI "MIKEY" EQUAL MIKEY-Value)
+ / (SEMI trn-param-ext)
+ contrans-setup = "active" / "passive" / "actpass"
+ contrans-con = "new" / "existing"
+ trn-param-ext = par-name [EQUAL trn-par-value]
+ par-name = token
+ trn-par-value = *(rtsp-unreserved / quoted-string)
+ ttl = 1*3DIGIT ; 0 to 255
+ ssrc = 8HEX
+ channel = 1*3DIGIT ; 0 to 255
+ MIKEY-Value = base64
+ mode-spec = ( DQUOTE mode *(COMMA mode) DQUOTE )
+ mode = "PLAY" / token
+ addr-list = quoted-addr *(SLASH quoted-addr)
+ quoted-addr = DQUOTE (host-port / extension-addr) DQUOTE
+ host-port = ( host [":" port] )
+ / ( ":" port )
+ extension-addr = 1*qdtext
+ host = < As defined in RFC 3986>
+ port = < As defined in RFC 3986>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 208]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Unsupported = "Unsupported" HCOLON feature-tag-list
+ User-Agent = "User-Agent" HCOLON ( product / comment )
+ *(LWS (product / comment))
+ Via = "Via" HCOLON via-parm *(COMMA via-parm)
+ via-parm = sent-protocol LWS sent-by *( SEMI via-params )
+ via-params = via-ttl / via-maddr
+ / via-received / via-extension
+ via-ttl = "ttl" EQUAL ttl
+ via-maddr = "maddr" EQUAL host
+ via-received = "received" EQUAL (IPv4address / IPv6address)
+ IPv4address = < As defined in RFC 3986>
+ IPv6address = < As defined in RFC 3986>
+ via-extension = generic-param
+ sent-protocol = protocol-name SLASH protocol-version
+ SLASH transport-prot
+ protocol-name = "RTSP" / token
+ protocol-version = token
+ transport-prot = "UDP" / "TCP" / "TLS" / other-transport
+ other-transport = token
+ sent-by = host [ COLON port ]
+
+ WWW-Authenticate = "WWW-Authenticate" HCOLON challenge-list
+
+20.3. SDP Extension Syntax
+
+ This section defines in ABNF the SDP extensions defined for RTSP.
+ See Appendix D for the definition of the extensions in text.
+
+ control-attribute = "a=control:" *SP RTSP-REQ-Ref CRLF
+
+ a-range-def = "a=range:" ranges-spec CRLF
+
+ a-mtag-def = "a=mtag:" message-tag CRLF
+
+21. Security Considerations
+
+ The security considerations and threats around RTSP and its usage can
+ be divided into considerations around the signaling protocol itself
+ and the issues related to the media-stream delivery. However, when
+ it comes to mitigation of security threats, a threat depending on the
+ media-stream delivery may in fact be mitigated by a mechanism in the
+ signaling protocol.
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 209]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ There are several chapters and an appendix in this document that
+ define security solutions for the protocol. These sections will be
+ referenced when discussing the threats below. However, the reader
+ should take special notice of the Security Framework (Section 19) and
+ the specification of how to use SRTP and its key-management
+ (Appendix C.1.4) to achieve certain aspects of the media security.
+
+21.1. Signaling Protocol Threats
+
+ This section focuses on issues related to the signaling protocol.
+ Because of the similarity in syntax and usage between RTSP servers
+ and HTTP servers, the security considerations outlined in [RFC7230],
+ [RFC7231], [RFC7232], [RFC7233], [RFC7234], and [RFC7235] apply as
+ well.
+
+ Specifically, please note the following:
+
+ Abuse of Server Log Information: A server is in the position to save
+ personal data about a user's requests that might identify their
+ media consumption patterns or subjects of interest. This
+ information is clearly confidential in nature, and its handling
+ can be constrained by law in certain countries. Log
+ information needs to be securely stored and appropriate
+ guidelines followed for its analysis. See Section 9.8 of
+ [RFC7230] for additional guidelines.
+
+ Transfer of Sensitive Information: There is no reason to believe
+ that information transferred in RTSP message, such as the URI
+ and the content of headers, especially the Server, Via,
+ Referrer, and From headers, may be any less sensitive than when
+ used in HTTP. Therefore, all of the precautions regarding the
+ protection of data privacy and user privacy apply to
+ implementers of RTSP clients, servers, and proxies. See
+ Sections 9.3-9.6 of [RFC7231] for further details.
+
+ The RTSP methods defined in this document are primarily used to
+ establish and control the delivery of the media data
+ represented by the URI; thus, the RTSP message bodies are
+ generally less sensitive than the ones in HTTP. Where HTTP
+ bodies could contain, for example, your medical records, in
+ RTSP, the sensitive video of your medical operation would be in
+ the media stream over the media-transport protocol, not in the
+ RTSP message. Still, one has to take note of what potential
+ sensitive information is included in RTSP. The protection of
+ the media data is separate, can be applied directly between
+ client and server, and is dependent on the media-transport
+ protocol in use. See Section 21.2 for further discussion.
+ This possibility for separation of security between media-
+
+
+
+Schulzrinne, et al. Standards Track [Page 210]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ resource content and the signaling protocol mitigates the risk
+ of exposing the media content when using hop-by-hop security
+ for RTSP signaling using proxies (Section 19.3).
+
+ Attacks Based On File and Path Names: Though RTSP URIs are opaque
+ handles that do not necessarily have file-system semantics, it
+ is anticipated that many implementations will translate
+ portions of the Request-URIs directly to file-system calls. In
+ such cases, file systems SHOULD follow the precautions outlined
+ in Section 9.1 of [RFC7231], such as checking for ".." in path
+ components.
+
+ Personal Information: RTSP clients are often privy to the same
+ information that HTTP clients are (username, location, etc.)
+ and thus should be equally sensitive. See Section 9.8 of
+ [RFC7230], Sections 9.3-9.7 of [RFC7231], and Section 8 of
+ [RFC7234] for further recommendations.
+
+ Privacy Issues Connected to Accept Headers: Since similar usages of
+ the "Accept" headers exist in RTSP as in HTTP, the same caveats
+ outlined in Section 9.4 of [RFC7231] with regard to their use
+ should be followed.
+
+ Establishing Authority: RTSP shares with HTTP the question of how a
+ client communicates with the authoritative source for media
+ streams (Section 9.1 of [RFC7230]). The used DNS servers, the
+ security of the communication, and any possibility of a man in
+ the middle, and the trust in any RTSP proxies all affect the
+ possibility that a client has received a non-authoritative
+ response to a request. Ensuring that a client receives an
+ authoritative response is challenging, although using the
+ secure communication for RTSP signaling (rtsps) simplifies it
+ significantly as the server can provide a hostname identity
+ assertion in the TLS handshake.
+
+ Location Headers and Spoofing: If a single server supports multiple
+ organizations that do not trust each another, then it MUST
+ check the values of the Content-Location header fields in
+ responses that are generated under control of said
+ organizations to make sure that they do not attempt to
+ invalidate resources over which they have no authority (see
+ Section 15.4 of [RFC2616]).
+
+ In addition to the recommendations in the current HTTP specifications
+ ([RFC7230], [RFC7231], [RFC7232], [RFC7233], [RFC7234], and [RFC7235]
+ as of this writing) and also those of the previous relevant RFCs
+ [RFC2068] [RFC2616], future HTTP specifications may provide
+ additional guidance on security issues.
+
+
+
+Schulzrinne, et al. Standards Track [Page 211]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ The following are added considerations for RTSP implementations.
+
+ Session Hijacking: Since there is no or little relation between a
+ transport-layer connection and an RTSP session, it is possible
+ for a malicious client to issue requests with random session
+ identifiers that could affect other clients of an unsuspecting
+ server. To mitigate this, the server SHALL use a large, random
+ and non-sequential session identifier to minimize the
+ possibility of this kind of attack. However, unless the RTSP
+ signaling is always confidentiality protected, e.g., using TLS,
+ an on-path attacker will be able to hijack a session. Another
+ choice for preventing session hijacking is to use client
+ authentication and only allow the authenticated client creating
+ the session to access that session.
+
+ Authentication: Servers SHOULD implement both basic and Digest
+ [RFC2617] authentication. In environments requiring tighter
+ security for the control messages, the transport-layer
+ mechanism TLS [RFC5246] SHOULD be used.
+
+ Suspicious Behavior: Upon detecting instances of behavior that is
+ deemed a security risk, RTSP servers SHOULD return error code
+ 403 (Forbidden). RTSP servers SHOULD also be aware of attempts
+ to probe the server for weaknesses and entry points and MAY
+ arbitrarily disconnect and ignore further requests from clients
+ that are deemed to be in violation of local security policy.
+
+ TLS through Proxies: If one uses the possibility to connect TLS in
+ multiple legs (Section 19.3), one really needs to be aware of
+ the trust model. This procedure requires trust in all proxies
+ part of the path to the server. The proxies one connects
+ through are identified, assuming the proxies so far connected
+ through are well behaved and fulfilling the trust. The
+ accepted proxies are men in the middle and have access to all
+ that goes on over the TLS connection. Thus, it is important to
+ consider if that trust model is acceptable in the actual
+ application. Further discussion of the actual trust model is
+ in Section 19.3. It is important to note what difference in
+ security properties, if any, may exist with the used media-
+ transport protocol and its security mechanism. Using SRTP and
+ the MIKEY-based key-establishment defined in Appendix C.1.4.1
+ enables media key-establishment to be done end-to-end without
+ revealing the keys to the proxies.
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 212]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Resource Exhaustion: As RTSP is a stateful protocol and establishes
+ resource usage on the server, there is a clear possibility to
+ attack the server by trying to overbook these resources to
+ perform a DoS attack. This attack can be both against ongoing
+ sessions and to prevent others from establishing sessions.
+ RTSP agents will need to have mechanisms to prevent single
+ peers from consuming extensive amounts of resources. The
+ methods for guarding against this are varied and depend on the
+ agent's role and capabilities and policies. Each
+ implementation has to carefully consider its methods and
+ policies to mitigate this threat. There are recommendations
+ regarding the handling of connections in Section 10.7.
+
+ The above threats and considerations have resulted in a set of
+ security functions and mechanisms built into or used by the protocol.
+ The signaling protocol relies on two security features defined in the
+ Security Framework (Section 19): namely client authentication using
+ HTTP authentication and TLS-based transport protection of the
+ signaling messages. Both of these mechanisms are required to be
+ implemented by any RTSP agent.
+
+ A number of different security mitigations have been designed into
+ the protocol and will be instantiated if the specification is
+ implemented as written, for example, by ensuring sufficient amounts
+ of entropy in the randomly generated session identifiers when not
+ using client authentication to minimize the risk of session
+ hijacking. When client authentication is used, protection against
+ hijacking will be greatly improved by scoping the accessible sessions
+ to the one this client identity has created. Some of the above
+ threats are such that the implementation of the RTSP functionality
+ itself needs to consider which policy and strategy it uses to
+ mitigate them.
+
+21.2. Media Stream Delivery Threats
+
+ The fact that RTSP establishes and controls a media-stream delivery
+ results in a set of security issues related to the media streams.
+ This section will attempt to analyze general threats; however, the
+ choice of media-stream transport protocol, such as RTP, will result
+ in some differences in threats and what mechanisms exist to mitigate
+ them. Thus, it becomes important that each specification of a new
+ media-stream transport and delivery protocol usable by RTSP requires
+ its own security analysis. This section includes one for RTP.
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 213]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ The set of general threats from or by the media-stream delivery
+ itself are:
+
+ Concentrated Denial-of-Service Attack: The protocol offers the
+ opportunity for a remote-controlled DoS attack, where the media
+ stream is the hammer in that DoS attack. See Section 21.2.1.
+
+ Media Confidentiality: The media delivery may contain content of any
+ type, and it is not possible, in general, to determine how
+ sensitive this content is from a confidentiality point. Thus, it
+ is a strong requirement that any media delivery protocol supply a
+ method for providing confidentiality of the actual media content.
+ In addition to the media-level confidentiality, it becomes
+ critical that no resource identifiers used in the signaling be
+ exposed to an attacker as they may have human-understandable names
+ or may be available to the attacker, allowing it to determine the
+ content the user received. Thus, the signaling protocol must also
+ provide confidentiality protection of any information related to
+ the media resource.
+
+ Media Integrity and Authentication: There are several reasons why an
+ attacker will be interested in substituting the media stream sent
+ out from the RTSP server with one of the attacker's creation or
+ selection, such as discrediting the target and misinformation
+ about the target. Therefore, it is important that the media
+ protocol provide mechanisms to verify the source authentication
+ and integrity and to prevent replay attacks on the media stream.
+
+ Scope of Multicast: If RTSP is used to control the transmission of
+ media onto a multicast network, the scope of the delivery must be
+ considered. RTSP supports the TTL Transport header parameter to
+ indicate this scope for IPv4. IPv6 has a different mechanism for
+ the scope boundary. However, such scope control has risks, as it
+ may be set too large and distribute media beyond the intended
+ scope.
+
+ Below (Section 21.2.2) a protocol-specific analysis of security
+ considerations for RTP-based media transport is included. In that
+ section, the requirements on implementing security functions for RTSP
+ agents supporting media delivery over RTP are made clear.
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 214]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+21.2.1. Remote DoS Attack
+
+ The attacker may initiate traffic flows to one or more IP addresses
+ by specifying them as the destination in SETUP requests. While the
+ attacker's IP address may be known in this case, this is not always
+ useful in the prevention of more attacks or ascertaining the
+ attacker's identity. Thus, an RTSP server MUST only allow client-
+ specified destinations for RTSP-initiated traffic flows if the server
+ has ensured that the specified destination address accepts receiving
+ media through different security mechanisms. Security mechanisms
+ that are acceptable in order of increasing generality are:
+
+ o Verification of the client's identity against a database of known
+ users using RTSP authentication mechanisms (preferably Digest
+ authentication or stronger)
+
+ o A list of addresses that have consented to be media destinations,
+ especially considering user identity
+
+ o Verification based on media path
+
+ The server SHOULD NOT allow the destination field to be set unless a
+ mechanism exists in the system to authorize the request originator to
+ direct streams to the recipient. It is preferred that this
+ authorization be performed by the media recipient (destination)
+ itself and the credentials be passed along to the server. However,
+ in certain cases, such as when the recipient address is a multicast
+ group or when the recipient is unable to communicate with the server
+ in an out-of-band manner, this may not be possible. In these cases,
+ the server may choose another method such as a server-resident
+ authorization list to ensure that the request originator has the
+ proper credentials to request stream delivery to the recipient.
+
+ One solution that performs the necessary verification of acceptance
+ of media suitable for unicast-based delivery is the NAT traversal
+ method based on Interactive Connectivity Establishment (ICE)
+ [RFC5245] described in [RFC7825]. This mechanism uses random
+ passwords and a username so that the probability of unintended
+ indication as a valid media destination is very low. In addition,
+ the server includes in its Session Traversal Utilities for NAT (STUN)
+ [RFC5389] requests a cookie (consisting of random material) that the
+ destination echoes back; thus, the solution also safeguards against
+ having an off-path attacker being able to spoof the STUN checks.
+ This leaves this solution vulnerable only to on-path attackers that
+ can see the STUN requests go to the target of attack and thus forge a
+ response.
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 215]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ For delivery to multicast addresses, there is a need for another
+ solution that is not specified in this memo.
+
+21.2.2. RTP Security Analysis
+
+ RTP is a commonly used media-transport protocol and has been the most
+ common choice for RTSP 1.0 implementations. The core RTP protocol
+ has been in use for a long time, and it has well-known security
+ properties and the RTP security consideration (Section 9 of
+ [RFC3550]) needs to be reviewed. In perspective of the usage of RTP
+ in the context of RTSP, the following properties should be noted:
+
+ Stream Additions: RTP has support for multiple simultaneous media
+ streams in each RTP session. As some use cases require support
+ for non-synchronized adding and removal of media streams and their
+ identifiers, an attacker can easily insert additional media
+ streams into a session context that, according to protocol design,
+ is intended to be played out. Another threat vector is one of DoS
+ by exhausting the resources of the RTP session receiver, for
+ example, by using a large number of SSRC identifiers
+ simultaneously. The strong mitigation of this is to ensure that
+ one cryptographically authenticates any incoming packet flow to
+ the RTP session. Weak mitigations like blocking additional media
+ streams in session contexts easily lead to a DoS vulnerability in
+ addition to preventing certain RTP extensions or use cases that
+ rely on multiple media streams, such as RTP retransmission
+ [RFC4588] to function.
+
+ Forged Feedback: The built-in RTCP also offers a large attack
+ surface for a couple of different types of attacks. One venue is
+ to send RTCP feedback to the media sender indicating large amounts
+ of packet loss and thus trigger a media bitrate adaptation
+ response from the sender resulting in lowered media quality and
+ potentially a shutdown of the media stream. Another attack is to
+ perform a resource-exhaustion attack on the receiver by using many
+ SSRC identifiers to create large state tables and increase the
+ RTCP-related processing demands.
+
+ RTP/RTCP Extensions: RTP and RTCP extensions generally provide
+ additional and sometimes extremely powerful tools for DoS attacks
+ or service disruption. For example, the Code Control Message
+ [RFC5104] RTCP extensions enables both the lock down of the
+ bitrate to low values and disruption of video quality by
+ requesting intra-frames.
+
+ Taking into account the above general discussion in Section 21.2 and
+ the RTP-specific discussion in this section, it is clear that it is
+ necessary that a strong security mechanism be supported to protect
+
+
+
+Schulzrinne, et al. Standards Track [Page 216]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ RTP. Therefore, this specification has the following requirements on
+ RTP security functions for all RTSP agents that handle media streams
+ and where media-stream transport is completed using RTP.
+
+ RTSP agents supporting RTP MUST implement Secure RTP (SRTP) [RFC3711]
+ and, thus, SAVP. In addition, SAVPF [RFC5124] MUST also be supported
+ if AVPF is implemented. This specification requires no additional
+ cryptographic transforms or configuration values beyond those
+ specified as mandatory to implement in RFC 3711, i.e., AES-CM and
+ HMAC-SHA1. The default key-management mechanism that MUST be
+ implemented is the one defined in MIKEY Key Establishment
+ (Appendix C.1.4.1). The MIKEY implementation MUST implement the
+ necessary functions for MIKEY-RSA-R mode [RFC4738] and the SRTP
+ parameter negotiation necessary to negotiate the supported SRTP
+ transforms and parameters.
+
+22. IANA Considerations
+
+ This section describes a number of registries for RTSP 2.0 that have
+ been established and are maintained by IANA. These registries are
+ separate from any registries existing for RTSP 1.0. For each
+ registry, there is a description of the required content, the
+ registration procedures, and the entries that this document
+ registers. For more information on extending RTSP, see Section 2.7.
+ In addition, this document registers three SDP attributes.
+
+ Registries or entries in registries that have been made for RTSP 1.0
+ are not moved to RTSP 2.0: the registries and entries of RTSP 1.0 and
+ RTSP 2.0 are independent. If any registry or entry in a registry is
+ also required in RTSP 2.0, it MUST follow the procedure defined below
+ to allocate the registry or entry in a registry.
+
+ The sections describing how to register an item use some of the
+ registration policies described in [RFC5226] -- namely, "First Come
+ First Served", "Expert Review", "Specification Required", and
+ "Standards Action".
+
+ In case a registry requires a contact person, the authors (with
+ Magnus Westerlund <magnus.westerlund@ericsson.com> as primary) are
+ the contact persons for any entries created by this document.
+
+ IANA will request the following information for any registration
+ request:
+
+ o A name of the item to register according to the rules specified by
+ the intended registry
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 217]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ o Indication of who has change control over the feature (for
+ example, the IETF, ISO, ITU-T, other international standardization
+ bodies, a consortium, a particular company or group of companies,
+ or an individual)
+
+ o A reference to a further description, if available, for example
+ (in decreasing order of preference), an RFC, a published standard,
+ a published paper, a patent filing, a technical report, documented
+ source code or a computer manual
+
+ o For proprietary features, contact information (postal and email
+ address)
+
+22.1. Feature Tags
+
+22.1.1. Description
+
+ When a client and server try to determine what part and functionality
+ of the RTSP specification and any future extensions that its
+ counterpart implements, there is need for a namespace. This registry
+ contains named entries representing certain functionality.
+
+ The usage of feature tags is explained in Section 11 and
+ Section 13.1.
+
+22.1.2. Registering New Feature Tags with IANA
+
+ The registering of feature tags is done on a First Come, First Served
+ [RFC5226] basis.
+
+ The registry entry for a feature tag has the following information:
+
+ o The name of the feature tag
+
+ * If the registrant indicates that the feature is proprietary,
+ IANA should request a vendor "prefix" portion of the name. The
+ name will then be the vendor prefix followed by a "." followed
+ by the rest of the provided feature name.
+
+ * If the feature is not proprietary, then IANA need not collect a
+ prefix for the name.
+
+ o A one-paragraph description of what the feature tag represents
+
+ o The applicability (server, client, proxy, or some combination)
+
+ o A reference to a specification, if applicable
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 218]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Feature tag names (including the vendor prefix) may contain any non-
+ space and non-control characters. There is no length limit on
+ feature tags.
+
+ Examples for a vendor tag describing a proprietary feature are:
+
+ vendorA.specfeat01
+
+ vendorA.specfeat02
+
+22.1.3. Registered Entries
+
+ The following feature tags are defined in this specification and
+ hereby registered. The change control belongs to the IETF.
+
+ play.basic: The implementation for delivery and playback operations
+ according to the core RTSP specification, as defined in this
+ memo. Applies for clients, servers, and proxies. See
+ Section 11.1.
+
+ play.scale: Support of scale operations for media playback. Applies
+ only for servers. See Section 18.46.
+
+ play.speed: Support of the speed functionality for media delivery.
+ Applies only for servers. See Section 18.50.
+
+ setup.rtp.rtcp.mux: Support of the RTP and RTCP multiplexing as
+ discussed in Appendix C.1.6.4. Applies for both client and
+ servers and any media caching proxy.
+
+ The IANA registry is a table with the name, description, and
+ reference for each feature tag.
+
+22.2. RTSP Methods
+
+22.2.1. Description
+
+ Methods are described in Section 13. Extending the protocol with new
+ methods allows for totally new functionality.
+
+22.2.2. Registering New Methods with IANA
+
+ A new method is registered through a Standards Action [RFC5226]
+ because new methods may radically change the protocol's behavior and
+ purpose.
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 219]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ A specification for a new RTSP method consists of the following
+ items:
+
+ o A method name that follows the ABNF rules for methods.
+
+ o A clear specification of what a request using the method does and
+ what responses are expected. In which directions the method is
+ used: C->S, S->C, or both. How the use of headers, if any,
+ modifies the behavior and effect of the method.
+
+ o A list or table specifying which of the IANA-registered headers
+ that are allowed to be used with the method in the request or/and
+ response. The list or table SHOULD follow the format of tables in
+ Section 18.
+
+ o Describe how the method relates to network proxies.
+
+22.2.3. Registered Entries
+
+ This specification, RFC 7826, registers 10 methods: DESCRIBE,
+ GET_PARAMETER, OPTIONS, PAUSE, PLAY, PLAY_NOTIFY, REDIRECT, SETUP,
+ SET_PARAMETER, and TEARDOWN. The initial table of the registry is
+ provided below.
+
+ Method Directionality Reference
+ -----------------------------------------------------
+ DESCRIBE C->S RFC 7826
+ GET_PARAMETER C->S, S->C RFC 7826
+ OPTIONS C->S, S->C RFC 7826
+ PAUSE C->S RFC 7826
+ PLAY C->S RFC 7826
+ PLAY_NOTIFY S->C RFC 7826
+ REDIRECT S->C RFC 7826
+ SETUP C->S RFC 7826
+ SET_PARAMETER C->S, S->C RFC 7826
+ TEARDOWN C->S, S->C RFC 7826
+
+22.3. RTSP Status Codes
+
+22.3.1. Description
+
+ A status code is the three-digit number used to convey information in
+ RTSP response messages; see Section 8. The number space is limited,
+ and care should be taken not to fill the space.
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 220]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+22.3.2. Registering New Status Codes with IANA
+
+ A new status code registration follows the policy of IETF Review
+ [RFC5226]. New RTSP functionality requiring Status Codes should
+ first be registered in the range of x50-x99. Only when the range is
+ full should registrations be made in the x00-x49 range, unless it is
+ to adopt an HTTP extension to RTSP. This is done to enable any HTTP
+ extension to be adopted to RTSP without needing to renumber any
+ related status codes. A specification for a new status code must
+ include the following:
+
+ o The registered number.
+
+ o A description of what the status code means and the expected
+ behavior of the sender and receiver of the code.
+
+22.3.3. Registered Entries
+
+ RFC 7826 (this document) registers the numbered status code defined
+ in the ABNF entry "Status-Code", except "extension-code" (that
+ defines the syntax allowed for future extensions) in Section 20.2.2.
+
+22.4. RTSP Headers
+
+22.4.1. Description
+
+ By specifying new headers, one or more methods can be enhanced in
+ many different ways. An unknown header will be ignored by the
+ receiving agent. If the new header is vital for certain
+ functionality, a feature tag for the functionality can be created and
+ demanded to be used by the counterpart with the inclusion of a
+ Require header carrying the feature tag.
+
+22.4.2. Registering New Headers with IANA
+
+ Registrations can be made following the Expert Review policy
+ [RFC5226]. A specification is recommended to be provided, preferably
+ an RFC or other specification from a Standards Developing
+ Organization. The minimal information in a registration request is
+ the header name and the contact information.
+
+ The expert reviewer verifies that the registration request contains
+ the following information:
+
+ o The name of the header.
+
+ o An ABNF specification of the header syntax.
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 221]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ o A list or table specifying when the header may be used,
+ encompassing all methods, their request or response, and the
+ direction (C->S or S->C).
+
+ o How the header is to be handled by proxies.
+
+ o A description of the purpose of the header.
+
+22.4.3. Registered Entries
+
+ All headers specified in Section 18 in RFC 7826 have been registered.
+ The registry includes the header name and reference.
+
+ Furthermore, the following legacy RTSP headers defined in other
+ specifications are registered with header name, and reference
+ according to below list. Note: these references may not fulfill all
+ of the above rules for registrations due to their legacy status.
+
+ o x-wap-profile defined in [TS-26234]. The x-wap-profile request-
+ header contains one or more absolute URLs to the requesting
+ agent's device-capability profile.
+
+ o x-wap-profile-diff defined in [TS-26234]. The x-wap-profile-diff
+ request-header contains a subset of a device-capability profile.
+
+ o x-wap-profile-warning defined in [TS-26234]. The x-wap-profile-
+ warning is a response-header that contains error codes explaining
+ to what extent the server has been able to match the terminal
+ request in regard to device-capability profiles, as described
+ using x-wap-profile and x-wap-profile-diff headers.
+
+ o x-predecbufsize defined in [TS-26234]. This response-header
+ provides an RTSP agent with the TS 26.234 Annex G hypothetical
+ pre-decoder buffer size.
+
+ o x-initpredecbufperiod defined in [TS-26234]. This response-header
+ provides an RTSP agent with the TS 26.234 Annex G hypothetical
+ pre-decoder buffering period.
+
+ o x-initpostdecbufperiod defined in [TS-26234]. This response-
+ header provides an RTSP agent with the TS 26.234 Annex G post-
+ decoder buffering period.
+
+ o 3gpp-videopostdecbufsize defined in [TS-26234]. This response-
+ header provides an RTSP agent with the TS 26.234 defined post-
+ decoder buffer size usable for H.264 (AVC) video streams.
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 222]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ o 3GPP-Link-Char defined in [TS-26234]. This request-header
+ provides the RTSP server with the RTSP client's link
+ characteristics as determined from the radio interface. The
+ information that can be provided are guaranteed bitrate, maximum
+ bitrate and maximum transfer delay.
+
+ o 3GPP-Adaptation defined in [TS-26234]. This general-header is
+ part of the bitrate adaptation solution specified for the Packet-
+ switched Streaming Service (PSS). It provides the RTSP client's
+ buffer sizes and target buffer levels to the server, and responses
+ are used to acknowledge the support and values.
+
+ o 3GPP-QoE-Metrics defined in [TS-26234]. This general-header is
+ used by PSS RTSP agents to negotiate the quality of experience
+ metrics that a client should gather and report to the server.
+
+ o 3GPP-QoE-Feedback defined in [TS-26234]. This request-header is
+ used by RTSP clients supporting PSS to report the actual values of
+ the metrics gathered in its quality of experience metering.
+
+ The use of "x-" is NOT RECOMMENDED, but the above headers in the list
+ were defined prior to the clarification.
+
+22.5. Accept-Credentials
+
+ The security framework's TLS connection mechanism has two
+ registerable entities.
+
+22.5.1. Accept-Credentials Policies
+
+ This registry is for policies for an RTSP proxy's handling and
+ verification of TLS certificates when establishing an outbound TLS
+ connection on behalf of a client. In Section 19.3.1, three policies
+ for how to handle certificates are specified. Further policies may
+ be defined; registration is made through Standards Action [RFC5226].
+ A registration request is required to contain the following
+ information:
+
+ o Name of the policy.
+
+ o Text that describes how the policy works for handling the
+ certificates.
+
+ o A contact person.
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 223]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ This specification registers the following values:
+
+ Any: A policy requiring the proxy to accept any received
+ certificate.
+
+ Proxy: A policy where the proxy applies its own policies to
+ determine which certificates are accepted.
+
+ User: A policy where the certificate is required to be forwarded down
+ the proxy chain to the client, thus allowing the user to
+ decided to accept or refuse a certificate.
+
+22.5.2. Accept-Credentials Hash Algorithms
+
+ The Accept-Credentials header (see Section 18.2) allows for the usage
+ of other algorithms for hashing the DER records of accepted entities.
+ The registration of any future algorithm is expected to be extremely
+ rare and could also cause interoperability problems. Therefore, the
+ bar for registering new algorithms is intentionally placed high.
+
+ Any registration of a new hash algorithm requires Standards Action
+ [RFC5226]. The registration needs to fulfill the following
+ requirement:
+
+ o The algorithms identifier meeting the "token" ABNF requirement.
+
+ o Provide a definition of the algorithm.
+
+ The registered value is:
+
+ Hash Alg. ID Reference
+ ------------------------
+ sha-256 RFC 7826
+
+22.6. Cache-Control Cache Directive Extensions
+
+ There exist a number of cache directives that can be sent in the
+ Cache-Control header. A registry for these cache directives has been
+ established by IANA. New registrations in this registry require
+ Standards Action or IESG Approval [RFC5226]. A registration request
+ needs to contain the following information.
+
+ o The name of the cache directive.
+
+ o A definition of the parameter value, if any is allowed.
+
+ o The specification if it is a request or response directive.
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 224]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ o Text that explains how the cache directive is used for RTSP-
+ controlled media streams.
+
+ o A contact person.
+
+ This specification registers the following values:
+
+ no-cache:
+
+ public:
+
+ private:
+
+ no-transform:
+
+ only-if-cached:
+
+ max-stale:
+
+ min-fresh:
+
+ must-revalidate:
+
+ proxy-revalidate:
+
+ max-age:
+
+ The registry contains the name of the directive and the reference.
+
+22.7. Media Properties
+
+22.7.1. Description
+
+ The media streams being controlled by RTSP can have many different
+ properties. The media properties required to cover the use cases
+ that were in mind when writing the specification are defined.
+ However, it can be expected that further innovation will result in
+ new use cases or media streams with properties not covered by the
+ ones specified here. Thus, new media properties can be specified.
+ As new media properties may need a substantial amount of new
+ definitions to correctly specify behavior for this property, the bar
+ is intended to be high.
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 225]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+22.7.2. Registration Rules
+
+ Registering a new media property is done following the Specification
+ Required policy [RFC5226]. The expert reviewer verifies that a
+ registration request fulfills the following requirements.
+
+ o An ABNF definition of the media property value name that meets
+ "media-prop-ext" definition is included.
+
+ o A definition of which media property group it belongs to or define
+ a new group is included.
+
+ o A description of all changes to the behavior of RTSP as result of
+ these changes is included.
+
+ o A contact person for the registration is listed.
+
+22.7.3. Registered Values
+
+ This specification registers the ten values listed in Section 18.29.
+ The registry contains the property group, the name of the media
+ property, and the reference.
+
+22.8. Notify-Reason Values
+
+22.8.1. Description
+
+ Notify-Reason values are used to indicate the reason the notification
+ was sent. Each reason has its associated rules on what headers and
+ information may or must be included in the notification. New
+ notification behaviors need to be specified to enable interoperable
+ usage; thus, a specification of each new value is required.
+
+22.8.2. Registration Rules
+
+ Registrations for new Notify-Reason values follow the Specification
+ Required policy [RFC5226]. The expert reviewer verifies that the
+ request fulfills the following requirements:
+
+ o An ABNF definition of the Notify-Reason value name that meets
+ "Notify-Reason-extension" definition is included.
+
+ o A description of which headers shall be included in the request
+ and response, when it should be sent, and any effect it has on the
+ server client state is made clear.
+
+ o A contact person for the registration is listed.
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 226]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+22.8.3. Registered Values
+
+ This specification registers three values defined in the Notify-Reas-
+ val ABNF, Section 20.2.3:
+
+ end-of-stream: This Notify-Reason value indicates the end of a media
+ stream.
+
+ media-properties-update: This Notify-Reason value allows the server
+ to indicate that the properties of the media have changed during
+ the playout.
+
+ scale-change: This Notify-Reason value allows the server to notify
+ the client about a change in the scale of the media.
+
+ The registry contains the name, description, and reference.
+
+22.9. Range Header Formats
+
+22.9.1. Description
+
+ The Range header (Section 18.40) allows for different range formats.
+ These range formats also need an identifier to be used in the Accept-
+ Ranges header (Section 18.5). New range formats may be registered,
+ but moderation should be applied as it makes interoperability more
+ difficult.
+
+22.9.2. Registration Rules
+
+ A registration follows the Specification Required policy [RFC5226].
+ The expert reviewer verifies that the request fulfills the following
+ requirements:
+
+ o An ABNF definition of the range format that fulfills the "range-
+ ext" definition is included.
+
+ o The range format identifier used in Accept-Ranges header according
+ to the "extension-format" definition is defined.
+
+ o Rules for how one handles the range when using a negative Scale
+ are included.
+
+ o A contact person for the registration is listed.
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 227]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+22.9.3. Registered Values
+
+ The registry contains the Range header format identifier, the name of
+ the range format, and the reference. This specification registers
+ the following values.
+
+ npt: Normal Play Time
+
+ clock: UTC Absolute Time format
+
+ smpte: SMPTE Timestamps
+
+ smpte-30-drop: SMPTE Timestamps 29.97 Frames/sec (30 Hz with Drop)
+
+ smpte-25: SMPTE Timestamps 25 Frames/sec
+
+22.10. Terminate-Reason Header
+
+ The Terminate-Reason header (Section 18.52) has two registries for
+ extensions.
+
+22.10.1. Redirect Reasons
+
+ This registry contains reasons for session termination that can be
+ included in a Terminate-Reason header (Section 18.52). Registrations
+ follow the Expert Review policy [RFC5226]. The expert reviewer
+ verifies that the registration request contains the following
+ information:
+
+ o That the value follows the Terminate-Reason ABNF, i.e., be a
+ token.
+
+ o That the specification provide a definition of what procedures are
+ to be followed when a client receives this redirect reason.
+
+ o A contact person
+
+ This specification registers three values:
+
+ o Session-Timeout
+
+ o Server-Admin
+
+ o Internal-Error
+
+ The registry contains the name of the Redirect Reason and the
+ reference.
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 228]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+22.10.2. Terminate-Reason Header Parameters
+
+ This registry contains parameters that may be included in the
+ Terminate-Reason header (Section 18.52) in addition to a reason.
+ Registrations are made under the Specification Required policy
+ [RFC5226]. The expert reviewer verifies that the registration
+ request contains the following:
+
+ o A parameter name.
+
+ o A parameter following the syntax allowed by the RTSP 2.0
+ specification.
+
+ o A reference to the specification.
+
+ o A contact person.
+
+ This specification registers:
+
+ o time
+
+ o user-msg
+
+ The registry contains the name of the Terminate Reason and the
+ reference.
+
+22.11. RTP-Info Header Parameters
+
+22.11.1. Description
+
+ The RTP-Info header (Section 18.45) carries one or more parameter
+ value pairs with information about a particular point in the RTP
+ stream. RTP extensions or new usages may need new types of
+ information. As RTP information that could be needed is likely to be
+ generic enough, and to maximize the interoperability, new
+ registration is made under the Specification Required policy.
+
+22.11.2. Registration Rules
+
+ Registrations for new RTP-Info values follow the policy of
+ Specification Required [RFC5226]. The expert reviewer verifies that
+ the registration request contains the following information.
+
+ o An ABNF definition that meets the "generic-param" definition.
+
+ o A reference to the specification.
+
+ o A contact person for the registration.
+
+
+
+Schulzrinne, et al. Standards Track [Page 229]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+22.11.3. Registered Values
+
+ This specification registers the following parameter value pairs:
+
+ o url
+
+ o ssrc
+
+ o seq
+
+ o rtptime
+
+ The registry contains the name of the parameter and the reference.
+
+22.12. Seek-Style Policies
+
+22.12.1. Description
+
+ Seek-Style policy defines how the RTSP agent seeks in media content
+ when given a position within the media content. New seek policies
+ may be registered; however, a large number of these will complicate
+ implementation substantially. The impact of unknown policies is that
+ the server will not honor the unknown and will use the server default
+ policy instead.
+
+22.12.2. Registration Rules
+
+ Registrations of new Seek-Style policies follow the Specification
+ Required policy [RFC5226]. The expert reviewer verifies that the
+ registration request fulfills the following requirements:
+
+ o Has an ABNF definition of the Seek-Style policy name that meets
+ "Seek-S-value-ext" definition.
+
+ o Includes a short description.
+
+ o Lists a contact person for the registration.
+
+ o Includes a description of which headers shall be included in the
+ request and response, when it should be sent, and any affect it
+ has on the server-client state.
+
+22.12.3. Registered Values
+
+ This specification registers four values (Name - Short Description):
+
+ o RAP - Using the closest Random Access Point prior to or at the
+ requested start position.
+
+
+
+Schulzrinne, et al. Standards Track [Page 230]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ o CoRAP - Conditional Random Access Point is like RAP, but only if
+ the RAP is closer prior to the requested start position than
+ current pause point.
+
+ o First-Prior - The first-prior policy will start delivery with the
+ media unit that has a playout time first prior to the requested
+ start position.
+
+ o Next - The next media units after the provided start position.
+
+ The registry contains the name of the Seek-Style policy, the
+ description, and the reference.
+
+22.13. Transport Header Registries
+
+ The transport header (Section 18.54) contains a number of parameters
+ that have possibilities for future extensions. Therefore, registries
+ for these are defined below.
+
+22.13.1. Transport Protocol Identifier
+
+ A Transport Protocol specification consists of a transport protocol
+ identifier, representing some combination of transport protocols, and
+ any number of transport header parameters required or optional to use
+ with the identified protocol specification. This registry contains
+ the identifiers used by registered transport protocol identifiers.
+
+ A registration for the parameter transport protocol identifier
+ follows the Specification Required policy [RFC5226]. The expert
+ reviewer verifies that the registration request fulfills the
+ following requirements:
+
+ o A contact person or organization with address and email.
+
+ o A value definition that follows the ABNF syntax definition of
+ "transport-id" Section 20.2.3.
+
+ o A descriptive text that explains how the registered values are
+ used in RTSP, which underlying transport protocols are used, and
+ any required Transport header parameters.
+
+ The registry contains the protocol ID string and the reference.
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 231]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ This specification registers the following values:
+
+ RTP/AVP: Use of the RTP [RFC3550] protocol for media transport in
+ combination with the "RTP Profile for Audio and Video
+ Conferences with Minimal Control" [RFC3551] over UDP. The
+ usage is explained in RFC 7826, Appendix C.1.
+
+ RTP/AVP/UDP: the same as RTP/AVP.
+
+ RTP/AVPF: Use of the RTP [RFC3550] protocol for media transport in
+ combination with the "Extended RTP Profile for RTCP-based
+ Feedback (RTP/AVPF)" [RFC4585] over UDP. The usage is
+ explained in RFC 7826, Appendix C.1.
+
+ RTP/AVPF/UDP: the same as RTP/AVPF.
+
+ RTP/SAVP: Use of the RTP [RFC3550] protocol for media transport in
+ combination with the "The Secure Real-time Transport Protocol
+ (SRTP)" [RFC3711] over UDP. The usage is explained in RFC
+ 7826, Appendix C.1.
+
+ RTP/SAVP/UDP: the same as RTP/SAVP.
+
+ RTP/SAVPF: Use of the RTP [RFC3550] protocol for media transport in
+ combination with the "Extended Secure RTP Profile for Real-time
+ Transport Control Protocol (RTCP)-Based Feedback (RTP/SAVPF)"
+ [RFC5124] over UDP. The usage is explained in RFC 7826,
+ Appendix C.1.
+
+ RTP/SAVPF/UDP: the same as RTP/SAVPF.
+
+ RTP/AVP/TCP: Use of the RTP [RFC3550] protocol for media transport
+ in combination with the "RTP profile for audio and video
+ conferences with minimal control" [RFC3551] over TCP. The
+ usage is explained in RFC 7826, Appendix C.2.2.
+
+ RTP/AVPF/TCP: Use of the RTP [RFC3550] protocol for media transport
+ in combination with the "Extended RTP Profile for Real-time
+ Transport Control Protocol (RTCP)-Based Feedback (RTP/AVPF)"
+ [RFC4585] over TCP. The usage is explained in RFC 7826,
+ Appendix C.2.2.
+
+ RTP/SAVP/TCP: Use of the RTP [RFC3550] protocol for media transport
+ in combination with the "The Secure Real-time Transport
+ Protocol (SRTP)" [RFC3711] over TCP. The usage is explained in
+ RFC 7826, Appendix C.2.2.
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 232]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ RTP/SAVPF/TCP: Use of the RTP [RFC3550] protocol for media transport
+ in combination with the "Extended Secure RTP Profile for Real-
+ time Transport Control Protocol (RTCP)-Based Feedback (RTP/
+ SAVPF)" [RFC5124] over TCP. The usage is explained in RFC
+ 7826, Appendix C.2.2.
+
+22.13.2. Transport Modes
+
+ The Transport Mode is a Transport header (Section 18.54) parameter.
+ It is used to identify the general mode of media transport. The PLAY
+ value registered defines a PLAYBACK mode, where media flows from
+ server to client.
+
+ A registration for the transport parameter mode follows the Standards
+ Action policy [RFC5226]. The registration request needs to meet the
+ following requirements:
+
+ o A value definition that follows the ABNF "token" definition
+ Section 20.2.3.
+
+ o Text that explains how the registered value is used in RTSP.
+
+ This specification registers one value:
+
+ PLAY: See RFC 7826.
+
+ The registry contains the transport mode value and the reference.
+
+22.13.3. Transport Parameters
+
+ Transport Parameters are different parameters used in a Transport
+ header's transport specification (Section 18.54) to provide
+ additional information required beyond the transport protocol
+ identifier to establish a functioning transport.
+
+ A registration for parameters that may be included in the Transport
+ header follows the Specification Required policy [RFC5226]. The
+ expert reviewer verifies that the registration request fulfills the
+ following requirements:
+
+ o A Transport Parameter Name following the "token" ABNF definition.
+
+ o A value definition, if the parameter takes a value, that follows
+ the ABNF definition of "trn-par-value" Section 20.2.3.
+
+ o Text that explains how the registered value is used in RTSP.
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 233]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ This specification registers all the transport parameters defined in
+ Section 18.54. This is a copy of that list:
+
+ o unicast
+
+ o multicast
+
+ o interleaved
+
+ o ttl
+
+ o layers
+
+ o ssrc
+
+ o mode
+
+ o dest_addr
+
+ o src_addr
+
+ o setup
+
+ o connection
+
+ o RTCP-mux
+
+ o MIKEY
+
+ The registry contains the transport parameter name and the reference.
+
+22.14. URI Schemes
+
+ This specification updates two URI schemes: one previously
+ registered, "rtsp", and one missing in the registry, "rtspu"
+ (previously only defined in RTSP 1.0 [RFC2326]). One new URI scheme,
+ "rtsps", is also registered. These URI schemes are registered in an
+ existing registry ("Uniform Resource Identifier (URI) Schemes") not
+ created by this memo. Registrations follow [RFC7595].
+
+22.14.1. The "rtsp" URI Scheme
+
+ URI scheme name: rtsp
+
+ Status: Permanent
+
+ URI scheme syntax: See Section 20.2.1 of RFC 7826.
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 234]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ URI scheme semantics: The rtsp scheme is used to indicate resources
+ accessible through the usage of the Real-Time Streaming
+ Protocol (RTSP). RTSP allows different operations on the
+ resource identified by the URI, but the primary purpose is the
+ streaming delivery of the resource to a client. However, the
+ operations that are currently defined are DESCRIBE,
+ GET_PARAMETER, OPTIONS, PLAY, PLAY_NOTIFY, PAUSE, REDIRECT,
+ SETUP, SET_PARAMETER, and TEARDOWN.
+
+ Encoding considerations: IRIs in this scheme are defined and need to
+ be encoded as RTSP URIs when used within RTSP. That encoding
+ is done according to RFC 3987.
+
+ Applications/protocols that use this URI scheme name: RTSP 1.0 (RFC
+ 2326), RTSP 2.0 (RFC 7826).
+
+ Interoperability considerations: The extensions in the URI syntax
+ performed between RTSP 1.0 and 2.0 can create interoperability
+ issues. The changes are:
+
+ Support for IPv6 literals in the host part and future IP
+ literals through a mechanism as defined in RFC 3986.
+
+ A new relative format to use in RTSP elements that is not
+ required to start with "/".
+
+ The above changes should have no impact on interoperability as
+ discussed in detail in Section 4.2 of RFC 7826.
+
+ Security considerations: All the security threats identified in
+ Section 7 of RFC 3986 also apply to this scheme. They need to
+ be reviewed and considered in any implementation utilizing this
+ scheme.
+
+ Contact: Magnus Westerlund, magnus.westerlund@ericsson.com
+
+ Author/Change controller: IETF
+
+ References: RFC 2326, RFC 3986, RFC 3987, and RFC 7826
+
+22.14.2. The "rtsps" URI Scheme
+
+ URI scheme name: rtsps
+
+ Status: Permanent
+
+ URI scheme syntax: See Section 20.2.1 of RFC 7826.
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 235]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ URI scheme semantics: The rtsps scheme is used to indicate resources
+ accessible through the usage of the Real-Time Streaming
+ Protocol (RTSP) over TLS. RTSP allows different operations on
+ the resource identified by the URI, but the primary purpose is
+ the streaming delivery of the resource to a client. However,
+ the operations that are currently defined are DESCRIBE,
+ GET_PARAMETER, OPTIONS, PLAY, PLAY_NOTIFY, PAUSE, REDIRECT,
+ SETUP, SET_PARAMETER, and TEARDOWN.
+
+ Encoding considerations: IRIs in this scheme are defined and need to
+ be encoded as RTSP URIs when used within RTSP. That encoding
+ is done according to RFC 3987.
+
+ Applications/protocols that use this URI scheme name: RTSP 1.0 (RFC
+ 2326), RTSP 2.0 (RFC 7826).
+
+ Interoperability considerations: The "rtsps" scheme was never
+ officially defined for RTSP 1.0; however, it has seen
+ widespread use in actual deployments of RTSP 1.0. Therefore,
+ this section discusses the believed changes between the
+ unspecified RTSP 1.0 "rtsps" scheme and RTSP 2.0 definition.
+ The extensions in the URI syntax performed between RTSP 1.0 and
+ 2.0 can create interoperability issues. The changes are:
+
+ Support for IPv6 literals in the host part and future IP
+ literals through a mechanism as defined by RFC 3986.
+
+ A new relative format to use in RTSP elements that is not
+ required to start with "/".
+
+ The above changes should have no impact on interoperability as
+ discussed in detail in Section 4.2 of RFC 7826.
+
+ Security considerations: All the security threats identified in
+ Section 7 of RFC 3986 also apply to this scheme. They need to
+ be reviewed and considered in any implementation utilizing this
+ scheme.
+
+ Contact: Magnus Westerlund, magnus.westerlund@ericsson.com
+
+ Author/Change controller: IETF
+
+ References: RFC 2326, RFC 3986, RFC 3987, and RFC 7826
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 236]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+22.14.3. The "rtspu" URI Scheme
+
+ URI scheme name: rtspu
+
+ Status: Permanent
+
+ URI scheme syntax: See Section 3.2 of RFC 2326.
+
+ URI scheme semantics: The rtspu scheme is used to indicate resources
+ accessible through the usage of the Real-Time Streaming
+ Protocol (RTSP) over unreliable datagram transport. RTSP
+ allows different operations on the resource identified by the
+ URI, but the primary purpose is the streaming delivery of the
+ resource to a client. However, the operations that are
+ currently defined are DESCRIBE, GET_PARAMETER, OPTIONS,
+ REDIRECT,PLAY, PLAY_NOTIFY, PAUSE, SETUP, SET_PARAMETER, and
+ TEARDOWN.
+
+ Encoding considerations: This scheme is not intended to be used with
+ characters outside the US-ASCII repertoire.
+
+ Applications/protocols that use this URI scheme name: RTSP 1.0 (RFC
+ 2326).
+
+ Interoperability considerations: The definition of the transport
+ mechanism of RTSP over UDP has interoperability issues. That
+ makes the usage of this scheme problematic.
+
+ Security considerations: All the security threats identified in
+ Section 7 of RFC 3986 also apply to this scheme. They need to
+ be reviewed and considered in any implementation utilizing this
+ scheme.
+
+ Contact: Magnus Westerlund, magnus.westerlund@ericsson.com
+
+ Author/Change controller: IETF
+
+ References: RFC 2326
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 237]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+22.15. SDP Attributes
+
+ This specification defines three SDP [RFC4566] attributes that have
+ been registered by IANA.
+
+ SDP Attribute ("att-field"):
+
+ Attribute name: range
+ Long form: Media Range Attribute
+ Type of name: att-field
+ Type of attribute: both session and media level
+ Subject to charset: No
+ Purpose: RFC 7826
+ Reference: RFC 2326, RFC 7826
+ Values: See ABNF definition.
+
+ Attribute name: control
+ Long form: RTSP control URI
+ Type of name: att-field
+ Type of attribute: both session and media level
+ Subject to charset: No
+ Purpose: RFC 7826
+ Reference: RFC 2326, RFC 7826
+ Values: Absolute or Relative URIs.
+
+ Attribute name: mtag
+ Long form: Message Tag
+ Type of name: att-field
+ Type of attribute: both session and media level
+ Subject to charset: No
+ Purpose: RFC 7826
+ Reference: RFC 7826
+ Values: See ABNF definition
+
+22.16. Media Type Registration for text/parameters
+
+ Type name: text
+
+ Subtype name: parameters
+
+ Required parameters:
+
+ Optional parameters: charset: The charset parameter is applicable to
+ the encoding of the parameter values. The default charset is
+ UTF-8, if the 'charset' parameter is not present.
+
+ Encoding considerations: 8bit
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 238]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Security considerations: This format may carry any type of
+ parameters. Some can have security requirements, like privacy,
+ confidentiality, or integrity requirements. The format has no
+ built-in security protection. For the usage, the transport can be
+ protected between server and client using TLS. However, care must
+ be taken to consider if the proxies are also trusted with the
+ parameters in case hop-by-hop security is used. If stored as a
+ file in a file system, the necessary precautions need to be taken
+ in relation to the parameter requirements including object
+ security such as S/MIME [RFC5751].
+
+ Interoperability considerations: This media type was mentioned as a
+ fictional example in [RFC2326], but was not formally specified.
+ This has resulted in usage of this media type that may not match
+ its formal definition.
+
+ Published specification: RFC 7826, Appendix F.
+
+ Applications that use this media type: Applications that use RTSP
+ and have additional parameters they like to read and set using the
+ RTSP GET_PARAMETER and SET_PARAMETER methods.
+
+ Additional information:
+
+ Magic number(s): N/A
+
+ File extension(s): N/A
+
+ Macintosh file type code(s): N/A
+
+ Person & email address to contact for further information:
+ Magnus Westerlund (magnus.westerlund@ericsson.com)
+
+ Intended usage: Common
+
+ Restrictions on usage: None
+
+ Author: Magnus Westerlund (magnus.westerlund@ericsson.com)
+
+ Change controller: IETF
+
+ Addition Notes:
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 239]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+23. References
+
+23.1. Normative References
+
+ [FIPS180-4]
+ National Institute of Standards and Technology (NIST),
+ "Federal Information Processing Standards Publication:
+ Secure Hash Standard (SHS)", DOI 10.6028/NIST.FIPS.180-4,
+ August 2015, <http://nvlpubs.nist.gov/nistpubs/FIPS/
+ NIST.FIPS.180-4.pdf>.
+
+ [RFC768] Postel, J., "User Datagram Protocol", STD 6, RFC 768,
+ DOI 10.17487/RFC0768, August 1980,
+ <http://www.rfc-editor.org/info/rfc768>.
+
+ [RFC793] Postel, J., "Transmission Control Protocol", STD 7,
+ RFC 793, DOI 10.17487/RFC0793, September 1981,
+ <http://www.rfc-editor.org/info/rfc793>.
+
+ [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
+ Requirement Levels", BCP 14, RFC 2119,
+ DOI 10.17487/RFC2119, March 1997,
+ <http://www.rfc-editor.org/info/rfc2119>.
+
+ [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6
+ (IPv6) Specification", RFC 2460, DOI 10.17487/RFC2460,
+ December 1998, <http://www.rfc-editor.org/info/rfc2460>.
+
+ [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H.,
+ Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext
+ Transfer Protocol -- HTTP/1.1", RFC 2616,
+ DOI 10.17487/RFC2616, June 1999,
+ <http://www.rfc-editor.org/info/rfc2616>.
+
+ [RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S.,
+ Leach, P., Luotonen, A., and L. Stewart, "HTTP
+ Authentication: Basic and Digest Access Authentication",
+ RFC 2617, DOI 10.17487/RFC2617, June 1999,
+ <http://www.rfc-editor.org/info/rfc2617>.
+
+ [RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818,
+ DOI 10.17487/RFC2818, May 2000,
+ <http://www.rfc-editor.org/info/rfc2818>.
+
+ [RFC3550] Schulzrinne, H., Casner, S., Frederick, R., and V.
+ Jacobson, "RTP: A Transport Protocol for Real-Time
+ Applications", STD 64, RFC 3550, DOI 10.17487/RFC3550,
+ July 2003, <http://www.rfc-editor.org/info/rfc3550>.
+
+
+
+Schulzrinne, et al. Standards Track [Page 240]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ [RFC3551] Schulzrinne, H. and S. Casner, "RTP Profile for Audio and
+ Video Conferences with Minimal Control", STD 65, RFC 3551,
+ DOI 10.17487/RFC3551, July 2003,
+ <http://www.rfc-editor.org/info/rfc3551>.
+
+ [RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO
+ 10646", STD 63, RFC 3629, DOI 10.17487/RFC3629, November
+ 2003, <http://www.rfc-editor.org/info/rfc3629>.
+
+ [RFC3711] Baugher, M., McGrew, D., Naslund, M., Carrara, E., and K.
+ Norrman, "The Secure Real-time Transport Protocol (SRTP)",
+ RFC 3711, DOI 10.17487/RFC3711, March 2004,
+ <http://www.rfc-editor.org/info/rfc3711>.
+
+ [RFC3830] Arkko, J., Carrara, E., Lindholm, F., Naslund, M., and K.
+ Norrman, "MIKEY: Multimedia Internet KEYing", RFC 3830,
+ DOI 10.17487/RFC3830, August 2004,
+ <http://www.rfc-editor.org/info/rfc3830>.
+
+ [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
+ Resource Identifier (URI): Generic Syntax", STD 66,
+ RFC 3986, DOI 10.17487/RFC3986, January 2005,
+ <http://www.rfc-editor.org/info/rfc3986>.
+
+ [RFC3987] Duerst, M. and M. Suignard, "Internationalized Resource
+ Identifiers (IRIs)", RFC 3987, DOI 10.17487/RFC3987,
+ January 2005, <http://www.rfc-editor.org/info/rfc3987>.
+
+ [RFC4086] Eastlake 3rd, D., Schiller, J., and S. Crocker,
+ "Randomness Requirements for Security", BCP 106, RFC 4086,
+ DOI 10.17487/RFC4086, June 2005,
+ <http://www.rfc-editor.org/info/rfc4086>.
+
+ [RFC4291] Hinden, R. and S. Deering, "IP Version 6 Addressing
+ Architecture", RFC 4291, DOI 10.17487/RFC4291, February
+ 2006, <http://www.rfc-editor.org/info/rfc4291>.
+
+ [RFC7595] Thaler, D., Ed., Hansen, T., and T. Hardie, "Guidelines
+ and Registration Procedures for URI Schemes", BCP 35, RFC
+ 7595, DOI 10.17487/RFC7595, June 2015, <http://www.rfc-
+ editor.org/info/rfc7595>.
+
+ [RFC4566] Handley, M., Jacobson, V., and C. Perkins, "SDP: Session
+ Description Protocol", RFC 4566, DOI 10.17487/RFC4566,
+ July 2006, <http://www.rfc-editor.org/info/rfc4566>.
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 241]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ [RFC4571] Lazzaro, J., "Framing Real-time Transport Protocol (RTP)
+ and RTP Control Protocol (RTCP) Packets over Connection-
+ Oriented Transport", RFC 4571, DOI 10.17487/RFC4571, July
+ 2006, <http://www.rfc-editor.org/info/rfc4571>.
+
+ [RFC4585] Ott, J., Wenger, S., Sato, N., Burmeister, C., and J. Rey,
+ "Extended RTP Profile for Real-time Transport Control
+ Protocol (RTCP)-Based Feedback (RTP/AVPF)", RFC 4585,
+ DOI 10.17487/RFC4585, July 2006,
+ <http://www.rfc-editor.org/info/rfc4585>.
+
+ [RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data
+ Encodings", RFC 4648, DOI 10.17487/RFC4648, October 2006,
+ <http://www.rfc-editor.org/info/rfc4648>.
+
+ [RFC4738] Ignjatic, D., Dondeti, L., Audet, F., and P. Lin, "MIKEY-
+ RSA-R: An Additional Mode of Key Distribution in
+ Multimedia Internet KEYing (MIKEY)", RFC 4738,
+ DOI 10.17487/RFC4738, November 2006,
+ <http://www.rfc-editor.org/info/rfc4738>.
+
+ [RFC5124] Ott, J. and E. Carrara, "Extended Secure RTP Profile for
+ Real-time Transport Control Protocol (RTCP)-Based Feedback
+ (RTP/SAVPF)", RFC 5124, DOI 10.17487/RFC5124, February
+ 2008, <http://www.rfc-editor.org/info/rfc5124>.
+
+ [RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an
+ IANA Considerations Section in RFCs", BCP 26, RFC 5226,
+ DOI 10.17487/RFC5226, May 2008,
+ <http://www.rfc-editor.org/info/rfc5226>.
+
+ [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax
+ Specifications: ABNF", STD 68, RFC 5234,
+ DOI 10.17487/RFC5234, January 2008,
+ <http://www.rfc-editor.org/info/rfc5234>.
+
+ [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security
+ (TLS) Protocol Version 1.2", RFC 5246,
+ DOI 10.17487/RFC5246, August 2008,
+ <http://www.rfc-editor.org/info/rfc5246>.
+
+ [RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S.,
+ Housley, R., and W. Polk, "Internet X.509 Public Key
+ Infrastructure Certificate and Certificate Revocation List
+ (CRL) Profile", RFC 5280, DOI 10.17487/RFC5280, May 2008,
+ <http://www.rfc-editor.org/info/rfc5280>.
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 242]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ [RFC5322] Resnick, P., Ed., "Internet Message Format", RFC 5322,
+ DOI 10.17487/RFC5322, October 2008,
+ <http://www.rfc-editor.org/info/rfc5322>.
+
+ [RFC5646] Phillips, A., Ed. and M. Davis, Ed., "Tags for Identifying
+ Languages", BCP 47, RFC 5646, DOI 10.17487/RFC5646,
+ September 2009, <http://www.rfc-editor.org/info/rfc5646>.
+
+ [RFC5751] Ramsdell, B. and S. Turner, "Secure/Multipurpose Internet
+ Mail Extensions (S/MIME) Version 3.2 Message
+ Specification", RFC 5751, DOI 10.17487/RFC5751, January
+ 2010, <http://www.rfc-editor.org/info/rfc5751>.
+
+ [RFC5761] Perkins, C. and M. Westerlund, "Multiplexing RTP Data and
+ Control Packets on a Single Port", RFC 5761,
+ DOI 10.17487/RFC5761, April 2010,
+ <http://www.rfc-editor.org/info/rfc5761>.
+
+ [RFC5888] Camarillo, G. and H. Schulzrinne, "The Session Description
+ Protocol (SDP) Grouping Framework", RFC 5888,
+ DOI 10.17487/RFC5888, June 2010,
+ <http://www.rfc-editor.org/info/rfc5888>.
+
+ [RFC6838] Freed, N., Klensin, J., and T. Hansen, "Media Type
+ Specifications and Registration Procedures", BCP 13,
+ RFC 6838, DOI 10.17487/RFC6838, January 2013,
+ <http://www.rfc-editor.org/info/rfc6838>.
+
+ [RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer
+ Protocol (HTTP/1.1): Message Syntax and Routing",
+ RFC 7230, DOI 10.17487/RFC7230, June 2014,
+ <http://www.rfc-editor.org/info/rfc7230>.
+
+ [RFC7231] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer
+ Protocol (HTTP/1.1): Semantics and Content", RFC 7231,
+ DOI 10.17487/RFC7231, June 2014,
+ <http://www.rfc-editor.org/info/rfc7231>.
+
+ [RFC7232] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer
+ Protocol (HTTP/1.1): Conditional Requests", RFC 7232,
+ DOI 10.17487/RFC7232, June 2014,
+ <http://www.rfc-editor.org/info/rfc7232>.
+
+ [RFC7233] Fielding, R., Ed., Lafon, Y., Ed., and J. Reschke, Ed.,
+ "Hypertext Transfer Protocol (HTTP/1.1): Range Requests",
+ RFC 7233, DOI 10.17487/RFC7233, June 2014,
+ <http://www.rfc-editor.org/info/rfc7233>.
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 243]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ [RFC7234] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke,
+ Ed., "Hypertext Transfer Protocol (HTTP/1.1): Caching",
+ RFC 7234, DOI 10.17487/RFC7234, June 2014,
+ <http://www.rfc-editor.org/info/rfc7234>.
+
+ [RFC7235] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer
+ Protocol (HTTP/1.1): Authentication", RFC 7235,
+ DOI 10.17487/RFC7235, June 2014,
+ <http://www.rfc-editor.org/info/rfc7235>.
+
+ [RFC7615] Reschke, J., "HTTP Authentication-Info and Proxy-
+ Authentication-Info Response Header Fields", RFC 7615,
+ DOI 10.17487/RFC7615, September 2015,
+ <http://www.rfc-editor.org/info/rfc7615>.
+
+ [RFC7616] Shekh-Yusef, R., Ed., Ahrens, D., and S. Bremer, "HTTP
+ Digest Access Authentication", RFC 7616,
+ DOI 10.17487/RFC7616, September 2015,
+ <http://www.rfc-editor.org/info/rfc7616>.
+
+ [RFC7617] Reschke, J., "The 'Basic' HTTP Authentication Scheme",
+ RFC 7617, DOI 10.17487/RFC7617, September 2015,
+ <http://www.rfc-editor.org/info/rfc7617>.
+
+ [RFC7825] Goldberg, J., Westerlund, M., and T. Zeng, "A Network
+ Address Translator (NAT) Traversal Mechanism for Media
+ Controlled by Real-Time Streaming Protocol (RTSP)",
+ RFC 7825, DOI 10.17487/RFC7825, December 2016,
+ <http://www.rfc-editor.org/info/rfc7825>.
+
+ [RTP-CIRCUIT-BREAKERS]
+ Perkins, C. and V. Singh, "Multimedia Congestion Control:
+ Circuit Breakers for Unicast RTP Sessions", Work in
+ Progress, draft-ietf-avtcore-rtp-circuit-breakers-13,
+ February 2016.
+
+ [SMPTE-TC] Society of Motion Picture and Television Engineers, "ST
+ 12-1:2008 For Television -- Time and Control Code",
+ DOI 10.5594/SMPTE.ST12-1.2008, February 2008,
+ <http://ieeexplore.ieee.org/servlet/
+ opac?punumber=7289818>.
+
+ [TS-26234] 3rd Generation Partnership Project (3GPP), "Transparent
+ end-to-end Packet-switched Streaming Service (PSS);
+ Protocols and codecs", Technical Specification 26.234,
+ Release 13, September 2015,
+ <http://www.3gpp.org/DynaReport/26234.htm>.
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 244]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+23.2. Informative References
+
+ [ISO.13818-6.1995]
+ International Organization for Standardization,
+ "Information technology -- Generic coding of moving
+ pictures and associated audio information - part 6:
+ Extension for DSM-CC", ISO Draft Standard 13818-6:1998,
+ October 1998,
+ <http://www.iso.org/iso/home/store/catalogue_tc/
+ catalogue_detail.htm?csnumber=25039>.
+
+ [ISO.8601.2000]
+ International Organization for Standardization, "Data
+ elements and interchange formats - Information interchange
+ - Representation of dates and times", ISO/IEC Standard
+ 8601, December 2000.
+
+ [RFC791] Postel, J., "Internet Protocol", STD 5, RFC 791,
+ DOI 10.17487/RFC0791, September 1981,
+ <http://www.rfc-editor.org/info/rfc791>.
+
+ [RFC1123] Braden, R., Ed., "Requirements for Internet Hosts -
+ Application and Support", STD 3, RFC 1123,
+ DOI 10.17487/RFC1123, October 1989,
+ <http://www.rfc-editor.org/info/rfc1123>.
+
+ [RFC2068] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., and T.
+ Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1",
+ RFC 2068, DOI 10.17487/RFC2068, January 1997,
+ <http://www.rfc-editor.org/info/rfc2068>.
+
+ [RFC2326] Schulzrinne, H., Rao, A., and R. Lanphier, "Real Time
+ Streaming Protocol (RTSP)", RFC 2326,
+ DOI 10.17487/RFC2326, April 1998,
+ <http://www.rfc-editor.org/info/rfc2326>.
+
+ [RFC2663] Srisuresh, P. and M. Holdrege, "IP Network Address
+ Translator (NAT) Terminology and Considerations",
+ RFC 2663, DOI 10.17487/RFC2663, August 1999,
+ <http://www.rfc-editor.org/info/rfc2663>.
+
+ [RFC2974] Handley, M., Perkins, C., and E. Whelan, "Session
+ Announcement Protocol", RFC 2974, DOI 10.17487/RFC2974,
+ October 2000, <http://www.rfc-editor.org/info/rfc2974>.
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 245]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ [RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston,
+ A., Peterson, J., Sparks, R., Handley, M., and E.
+ Schooler, "SIP: Session Initiation Protocol", RFC 3261,
+ DOI 10.17487/RFC3261, June 2002,
+ <http://www.rfc-editor.org/info/rfc3261>.
+
+ [RFC3264] Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model
+ with Session Description Protocol (SDP)", RFC 3264,
+ DOI 10.17487/RFC3264, June 2002,
+ <http://www.rfc-editor.org/info/rfc3264>.
+
+ [RFC3339] Klyne, G. and C. Newman, "Date and Time on the Internet:
+ Timestamps", RFC 3339, DOI 10.17487/RFC3339, July 2002,
+ <http://www.rfc-editor.org/info/rfc3339>.
+
+ [RFC4145] Yon, D. and G. Camarillo, "TCP-Based Media Transport in
+ the Session Description Protocol (SDP)", RFC 4145,
+ DOI 10.17487/RFC4145, September 2005,
+ <http://www.rfc-editor.org/info/rfc4145>.
+
+ [RFC4567] Arkko, J., Lindholm, F., Naslund, M., Norrman, K., and E.
+ Carrara, "Key Management Extensions for Session
+ Description Protocol (SDP) and Real Time Streaming
+ Protocol (RTSP)", RFC 4567, DOI 10.17487/RFC4567, July
+ 2006, <http://www.rfc-editor.org/info/rfc4567>.
+
+ [RFC4588] Rey, J., Leon, D., Miyazaki, A., Varsa, V., and R.
+ Hakenberg, "RTP Retransmission Payload Format", RFC 4588,
+ DOI 10.17487/RFC4588, July 2006,
+ <http://www.rfc-editor.org/info/rfc4588>.
+
+ [RFC4855] Casner, S., "Media Type Registration of RTP Payload
+ Formats", RFC 4855, DOI 10.17487/RFC4855, February 2007,
+ <http://www.rfc-editor.org/info/rfc4855>.
+
+ [RFC4856] Casner, S., "Media Type Registration of Payload Formats in
+ the RTP Profile for Audio and Video Conferences",
+ RFC 4856, DOI 10.17487/RFC4856, February 2007,
+ <http://www.rfc-editor.org/info/rfc4856>.
+
+ [RFC5104] Wenger, S., Chandra, U., Westerlund, M., and B. Burman,
+ "Codec Control Messages in the RTP Audio-Visual Profile
+ with Feedback (AVPF)", RFC 5104, DOI 10.17487/RFC5104,
+ February 2008, <http://www.rfc-editor.org/info/rfc5104>.
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 246]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ [RFC5245] Rosenberg, J., "Interactive Connectivity Establishment
+ (ICE): A Protocol for Network Address Translator (NAT)
+ Traversal for Offer/Answer Protocols", RFC 5245,
+ DOI 10.17487/RFC5245, April 2010,
+ <http://www.rfc-editor.org/info/rfc5245>.
+
+ [RFC5389] Rosenberg, J., Mahy, R., Matthews, P., and D. Wing,
+ "Session Traversal Utilities for NAT (STUN)", RFC 5389,
+ DOI 10.17487/RFC5389, October 2008,
+ <http://www.rfc-editor.org/info/rfc5389>.
+
+ [RFC5583] Schierl, T. and S. Wenger, "Signaling Media Decoding
+ Dependency in the Session Description Protocol (SDP)",
+ RFC 5583, DOI 10.17487/RFC5583, July 2009,
+ <http://www.rfc-editor.org/info/rfc5583>.
+
+ [RFC5905] Mills, D., Martin, J., Ed., Burbank, J., and W. Kasch,
+ "Network Time Protocol Version 4: Protocol and Algorithms
+ Specification", RFC 5905, DOI 10.17487/RFC5905, June 2010,
+ <http://www.rfc-editor.org/info/rfc5905>.
+
+ [RFC6298] Paxson, V., Allman, M., Chu, J., and M. Sargent,
+ "Computing TCP's Retransmission Timer", RFC 6298,
+ DOI 10.17487/RFC6298, June 2011,
+ <http://www.rfc-editor.org/info/rfc6298>.
+
+ [Stevens98]
+ Stevens, W., Fenner, B., and A. Rudoff, "Unix Networking
+ Programming, Volume 1: The Sockets Networking API (3rd
+ Edition)", 1998.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 247]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+Appendix A. Examples
+
+ This section contains several different examples trying to illustrate
+ possible ways of using RTSP. The examples can also help with the
+ understanding of how functions of RTSP work. However, remember that
+ these are examples and the normative and syntax descriptions in the
+ other sections take precedence. Please also note that many of the
+ examples have been broken into several lines, where following lines
+ start with whitespace as allowed by the syntax.
+
+A.1. Media on Demand (Unicast)
+
+ This is an example of media-on-demand streaming of media stored in a
+ container file. For the purposes of this example, a container file
+ is a storage entity in which multiple continuous media types
+ pertaining to the same end-user presentation are present. In effect,
+ the container file represents an RTSP presentation, with each of its
+ components being RTSP-controlled media streams. Container files are
+ a widely used means to store such presentations. While the
+ components are transported as independent streams, it is desirable to
+ maintain a common context for those streams at the server end.
+
+ This enables the server to keep a single storage handle open
+ easily. It also allows treating all the streams equally in case
+ of any prioritization of streams by the server.
+
+ It is also possible that the presentation author may wish to prevent
+ selective retrieval of the streams by the client in order to preserve
+ the artistic effect of the combined media presentation. Similarly,
+ in such a tightly bound presentation, it is desirable to be able to
+ control all the streams via a single control message using an
+ aggregate URI.
+
+ The following is an example of using a single RTSP session to control
+ multiple streams. It also illustrates the use of aggregate URIs. In
+ a container file, it is also desirable not to write any URI parts
+ that are not kept when the container is distributed, like the host
+ and most of the path element. Therefore, this example also uses the
+ "*" and relative URI in the delivered SDP.
+
+ Also, this presentation description (SDP) is not cacheable, as the
+ Expires header is set to an equal value with date indicating
+ immediate expiration of its validity.
+
+ Client C requests a presentation from media server M. The movie is
+ stored in a container file. The client has obtained an RTSP URI to
+ the container file.
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 248]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ C->M: DESCRIBE rtsp://example.com/twister.3gp RTSP/2.0
+ CSeq: 1
+ User-Agent: PhonyClient/1.2
+
+ M->C: RTSP/2.0 200 OK
+ CSeq: 1
+ Server: PhonyServer/1.0
+ Date: Fri, 20 Dec 2013 10:20:32 +0000
+ Content-Type: application/sdp
+ Content-Length: 271
+ Content-Base: rtsp://example.com/twister.3gp/
+ Expires: Fri, 20 Dec 2013 12:20:32 +0000
+
+ v=0
+ o=- 2890844256 2890842807 IN IP4 198.51.100.5
+ s=RTSP Session
+ i=An Example of RTSP Session Usage
+ e=adm@example.com
+ c=IN IP4 0.0.0.0
+ a=control: *
+ a=range:npt=00:00:00-00:10:34.10
+ t=0 0
+ m=audio 0 RTP/AVP 0
+ a=control: trackID=1
+ m=video 0 RTP/AVP 26
+ a=control: trackID=4
+
+ C->M: SETUP rtsp://example.com/twister.3gp/trackID=1 RTSP/2.0
+ CSeq: 2
+ User-Agent: PhonyClient/1.2
+ Require: play.basic
+ Transport: RTP/AVP;unicast;dest_addr=":8000"/":8001"
+ Accept-Ranges: npt, smpte, clock
+
+ M->C: RTSP/2.0 200 OK
+ CSeq: 2
+ Server: PhonyServer/1.0
+ Transport: RTP/AVP;unicast; ssrc=93CB001E;
+ dest_addr="192.0.2.53:8000"/"192.0.2.53:8001";
+ src_addr="198.51.100.5:9000"/"198.51.100.5:9001"
+ Session: OccldOFFq23KwjYpAnBbUr
+ Expires: Fri, 20 Dec 2013 12:20:33 +0000
+ Date: Fri, 20 Dec 2013 10:20:33 +0000
+ Accept-Ranges: npt
+ Media-Properties: Random-Access=0.02, Immutable, Unlimited
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 249]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ C->M: SETUP rtsp://example.com/twister.3gp/trackID=4 RTSP/2.0
+ CSeq: 3
+ User-Agent: PhonyClient/1.2
+ Require: play.basic
+ Transport: RTP/AVP;unicast;dest_addr=":8002"/":8003"
+ Session: OccldOFFq23KwjYpAnBbUr
+ Accept-Ranges: npt, smpte, clock
+
+ M->C: RTSP/2.0 200 OK
+ CSeq: 3
+ Server: PhonyServer/1.0
+ Transport: RTP/AVP;unicast; ssrc=A813FC13;
+ dest_addr="192.0.2.53:8002"/"192.0.2.53:8003";
+ src_addr="198.51.100.5:9002"/"198.51.100.5:9003";
+
+ Session: OccldOFFq23KwjYpAnBbUr
+ Expires: Fri, 20 Dec 2013 12:20:33 +0000
+ Date: Fri, 20 Dec 2013 10:20:33 +0000
+ Accept-Range: NPT
+ Media-Properties: Random-Access=0.8, Immutable, Unlimited
+
+ C->M: PLAY rtsp://example.com/twister.3gp/ RTSP/2.0
+ CSeq: 4
+ User-Agent: PhonyClient/1.2
+ Range: npt=30-
+ Seek-Style: RAP
+ Session: OccldOFFq23KwjYpAnBbUr
+
+ M->C: RTSP/2.0 200 OK
+ CSeq: 4
+ Server: PhonyServer/1.0
+ Date: Fri, 20 Dec 2013 10:20:34 +0000
+ Session: OccldOFFq23KwjYpAnBbUr
+ Range: npt=30-634.10
+ Seek-Style: RAP
+ RTP-Info: url="rtsp://example.com/twister.3gp/trackID=4"
+ ssrc=0D12F123:seq=12345;rtptime=3450012,
+ url="rtsp://example.com/twister.3gp/trackID=1"
+ ssrc=4F312DD8:seq=54321;rtptime=2876889
+
+ C->M: PAUSE rtsp://example.com/twister.3gp/ RTSP/2.0
+ CSeq: 5
+ User-Agent: PhonyClient/1.2
+ Session: OccldOFFq23KwjYpAnBbUr
+
+ # Pause happens 0.87 seconds after starting to play
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 250]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ M->C: RTSP/2.0 200 OK
+ CSeq: 5
+ Server: PhonyServer/1.0
+ Date: Fri, 20 Dec 2013 10:20:35 +0000
+ Session: OccldOFFq23KwjYpAnBbUr
+ Range: npt=30.87-634.10
+
+ C->M: PLAY rtsp://example.com/twister.3gp/ RTSP/2.0
+ CSeq: 6
+ User-Agent: PhonyClient/1.2
+ Range: npt=30.87-634.10
+ Seek-Style: Next
+ Session: OccldOFFq23KwjYpAnBbUr
+
+ M->C: RTSP/2.0 200 OK
+ CSeq: 6
+ Server: PhonyServer/1.0
+ Date: Fri, 20 Dec 2013 10:22:13 +0000
+ Session: OccldOFFq23KwjYpAnBbUr
+ Range: npt=30.87-634.10
+ Seek-Style: Next
+ RTP-Info: url="rtsp://example.com/twister.3gp/trackID=4"
+ ssrc=0D12F123:seq=12555;rtptime=6330012,
+ url="rtsp://example.com/twister.3gp/trackID=1"
+ ssrc=4F312DD8:seq=55021;rtptime=3132889
+
+ C->M: TEARDOWN rtsp://example.com/twister.3gp/ RTSP/2.0
+ CSeq: 7
+ User-Agent: PhonyClient/1.2
+ Session: OccldOFFq23KwjYpAnBbUr
+
+ M->C: RTSP/2.0 200 OK
+ CSeq: 7
+ Server: PhonyServer/1.0
+ Date: Fri, 20 Dec 2013 10:31:53 +0000
+
+A.2. Media on Demand Using Pipelining
+
+ This example is basically the example above (Appendix A.1), but now
+ utilizing pipelining to speed up the setup. It requires only two
+ round-trip times until the media starts flowing. First of all, the
+ session description is retrieved to determine what media resources
+ need to be set up. In the second step, one sends the necessary SETUP
+ requests and the PLAY request to initiate media delivery.
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 251]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Client C requests a presentation from media server M. The movie is
+ stored in a container file. The client has obtained an RTSP URI to
+ the container file.
+
+ C->M: DESCRIBE rtsp://example.com/twister.3gp RTSP/2.0
+ CSeq: 1
+ User-Agent: PhonyClient/1.2
+
+ M->C: RTSP/2.0 200 OK
+ CSeq: 1
+ Server: PhonyServer/1.0
+ Date: Fri, 20 Dec 2013 10:20:32 +0000
+ Content-Type: application/sdp
+ Content-Length: 271
+ Content-Base: rtsp://example.com/twister.3gp/
+ Expires: Fri, 20 Dec 2013 12:20:32 +0000
+
+ v=0
+ o=- 2890844256 2890842807 IN IP4 192.0.2.5
+ s=RTSP Session
+ i=An Example of RTSP Session Usage
+ e=adm@example.com
+ c=IN IP4 0.0.0.0
+ a=control: *
+ a=range:npt=00:00:00-00:10:34.10
+ t=0 0
+ m=audio 0 RTP/AVP 0
+ a=control: trackID=1
+ m=video 0 RTP/AVP 26
+ a=control: trackID=4
+
+ C->M: SETUP rtsp://example.com/twister.3gp/trackID=1 RTSP/2.0
+ CSeq: 2
+ User-Agent: PhonyClient/1.2
+ Require: play.basic
+ Transport: RTP/AVP;unicast;dest_addr=":8000"/":8001"
+ Accept-Ranges: npt, smpte, clock
+ Pipelined-Requests: 7654
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 252]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ C->M: SETUP rtsp://example.com/twister.3gp/trackID=4 RTSP/2.0
+ CSeq: 3
+ User-Agent: PhonyClient/1.2
+ Require: play.basic
+ Transport: RTP/AVP;unicast;dest_addr=":8002"/":8003"
+ Accept-Ranges: npt, smpte, clock
+ Pipelined-Requests: 7654
+
+ C->M: PLAY rtsp://example.com/twister.3gp/ RTSP/2.0
+ CSeq: 4
+ User-Agent: PhonyClient/1.2
+ Range: npt=0-
+ Seek-Style: RAP
+ Pipelined-Requests: 7654
+
+ M->C: RTSP/2.0 200 OK
+ CSeq: 2
+ Server: PhonyServer/1.0
+ Transport: RTP/AVP;unicast;
+ dest_addr="192.0.2.53:8000"/"192.0.2.53:8001";
+ src_addr="198.51.100.5:9000"/"198.51.100.5:9001";
+ ssrc=93CB001E
+ Session: OccldOFFq23KwjYpAnBbUr
+ Expires: Fri, 20 Dec 2013 12:20:32 +0000
+ Date: Fri, 20 Dec 2013 10:20:32 +0000
+ Accept-Ranges: npt
+ Pipelined-Requests: 7654
+ Media-Properties: Random-Access=0.2, Immutable, Unlimited
+
+ M->C: RTSP/2.0 200 OK
+ CSeq: 3
+ Server: PhonyServer/1.0
+ Transport: RTP/AVP;unicast;
+ dest_addr="192.0.2.53:8002"/"192.0.2.53:8003;
+ src_addr="198.51.100.5:9002"/"198.51.100.5:9003";
+ ssrc=A813FC13
+ Session: OccldOFFq23KwjYpAnBbUr
+ Expires: Sat, 21 Dec 2013 10:20:32 +0000
+ Date: Fri, 20 Dec 2013 10:20:32 +0000
+ Accept-Range: NPT
+ Pipelined-Requests: 7654
+ Media-Properties: Random-Access=0.8, Immutable, Unlimited
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 253]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ M->C: RTSP/2.0 200 OK
+ CSeq: 4
+ Server: PhonyServer/1.0
+ Date: Fri, 20 Dec 2013 10:20:32 +0000
+ Session: OccldOFFq23KwjYpAnBbUr
+ Range: npt=0-623.10
+ Seek-Style: RAP
+ RTP-Info: url="rtsp://example.com/twister.3gp/trackID=4"
+ ssrc=0D12F123:seq=12345;rtptime=3450012,
+ url="rtsp://example.com/twister.3gp/trackID=1"
+ ssrc=4F312DD8:seq=54321;rtptime=2876889
+ Pipelined-Requests: 7654
+
+A.3. Secured Media Session for On-Demand Content
+
+ This example is basically the above example (Appendix A.2), but now
+ including establishment of SRTP crypto contexts to get a secured
+ media delivery. First of all, the client attempts to fetch this
+ insecurely, but the server redirects to a URI indicating a
+ requirement on using a secure connection for the RTSP messages. The
+ client establishes a TCP/TLS connection, and the session description
+ is retrieved to determine what media resources need to be set up. In
+ the this session description, secure media (SRTP) is indicated. In
+ the next step, the client sends the necessary SETUP requests
+ including MIKEY messages. This is pipelined with a PLAY request to
+ initiate media delivery.
+
+ Client C requests a presentation from media server M. The movie is
+ stored in a container file. The client has obtained an RTSP URI to
+ the container file.
+
+ Note: The MIKEY messages below are not valid MIKEY messages and are
+ Base64-encoded random data to represent where the MIKEY messages
+ would go.
+
+ C->M: DESCRIBE rtsp://example.com/twister.3gp RTSP/2.0
+ CSeq: 1
+ User-Agent: PhonyClient/1.2
+
+ M->C: RTSP/2.0 301 Moved Permanently
+ CSeq: 1
+ Server: PhonyServer/1.0
+ Date: Fri, 20 Dec 2013 10:25:32 +0000
+ Location: rtsps://example.com/twister.3gp
+
+ C->M: Establish TCP/TLS connection and verify server's
+ certificate that represents example.com.
+ Used for all below RTSP messages.
+
+
+
+Schulzrinne, et al. Standards Track [Page 254]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ C->M: DESCRIBE rtsps://example.com/twister.3gp RTSP/2.0
+ CSeq: 2
+ User-Agent: PhonyClient/1.2
+
+ M->C: RTSP/2.0 200 OK
+ CSeq: 2
+ Server: PhonyServer/1.0
+ Date: Fri, 20 Dec 2013 10:25:33 +0000
+ Content-Type: application/sdp
+ Content-Length: 271
+ Content-Base: rtsps://example.com/twister.3gp/
+ Expires: Fri, 20 Dec 2013 12:25:33 +0000
+
+ v=0
+ o=- 2890844256 2890842807 IN IP4 192.0.2.5
+ s=RTSP Session
+ i=An Example of RTSP Session Usage
+ e=adm@example.com
+ c=IN IP4 0.0.0.0
+ a=control: *
+ a=range:npt=00:00:00-00:10:34.10
+ t=0 0
+ m=audio 0 RTP/SAVP 0
+ a=control: trackID=1
+ m=video 0 RTP/SAVP 26
+ a=control: trackID=4
+
+ C->M: SETUP rtsps://example.com/twister.3gp/trackID=1 RTSP/2.0
+ CSeq: 3
+ User-Agent: PhonyClient/1.2
+ Require: play.basic
+ Transport: RTP/SAVP;unicast;dest_addr=":8000"/":8001";
+ MIKEY=VGhpcyBpcyB0aGUgZmlyc3Qgc3RyZWFtcyBNSUtFWSBtZXNzYWdl
+ Accept-Ranges: npt, smpte, clock
+ Pipelined-Requests: 7654
+
+ C->M: SETUP rtsps://example.com/twister.3gp/trackID=4 RTSP/2.0
+ CSeq: 4
+ User-Agent: PhonyClient/1.2
+ Require: play.basic
+ Transport: RTP/SAVP;unicast;dest_addr=":8002"/":8003";
+ MIKEY=TUlLRVkgZm9yIHN0cmVhbSB0d2lzdGVyLjNncC90cmFja0lEPTQ=
+ Accept-Ranges: npt, smpte, clock
+ Pipelined-Requests: 7654
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 255]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ C->M: PLAY rtsps://example.com/twister.3gp/ RTSP/2.0
+ CSeq: 5
+ User-Agent: PhonyClient/1.2
+ Range: npt=0-
+ Seek-Style: RAP
+ Pipelined-Requests: 7654
+
+ M->C: RTSP/2.0 200 OK
+ CSeq: 3
+ Server: PhonyServer/1.0
+ Transport: RTP/SAVP;unicast;
+ dest_addr="192.0.2.53:8000"/"192.0.2.53:8001";
+ src_addr="198.51.100.5:9000"/"198.51.100.5:9001";
+ ssrc=93CB001E;
+ MIKEY=TUlLRVkgUmVzcG9uc2UgdHdpc3Rlci4zZ3AvdHJhY2tJRD0x
+ Session: OccldOFFq23KwjYpAnBbUr
+ Expires: Fri, 20 Dec 2013 12:25:34 +0000
+ Date: Fri, 20 Dec 2013 10:25:34 +0000
+ Accept-Ranges: npt
+ Pipelined-Requests: 7654
+ Media-Properties: Random-Access=0.2, Immutable, Unlimited
+
+ M->C: RTSP/2.0 200 OK
+ CSeq: 4
+ Server: PhonyServer/1.0
+ Transport: RTP/SAVP;unicast;
+ dest_addr="192.0.2.53:8002"/"192.0.2.53:8003;
+ src_addr="198.51.100.5:9002"/"198.51.100.5:9003";
+ ssrc=A813FC13;
+ MIKEY=TUlLRVkgUmVzcG9uc2UgdHdpc3Rlci4zZ3AvdHJhY2tJRD00
+ Session: OccldOFFq23KwjYpAnBbUr
+ Expires: Fri, 20 Dec 2013 12:25:34 +0000
+ Date: Fri, 20 Dec 2013 10:25:34 +0000
+ Accept-Range: NPT
+ Pipelined-Requests: 7654
+ Media-Properties: Random-Access=0.8, Immutable, Unlimited
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 256]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ M->C: RTSP/2.0 200 OK
+ CSeq: 5
+ Server: PhonyServer/1.0
+ Date: Fri, 20 Dec 2013 10:25:34 +0000
+ Session: OccldOFFq23KwjYpAnBbUr
+ Range: npt=0-623.10
+ Seek-Style: RAP
+ RTP-Info: url="rtsps://example.com/twister.3gp/trackID=4"
+ ssrc=0D12F123:seq=12345;rtptime=3450012,
+ url="rtsps://example.com/twister.3gp/trackID=1"
+ ssrc=4F312DD8:seq=54321;rtptime=2876889;
+ Pipelined-Requests: 7654
+
+A.4. Media on Demand (Unicast)
+
+ An alternative example of media on demand with a few more tweaks is
+ the following. Client C requests a movie distributed from two
+ different media servers A (audio.example.com) and V
+ (video.example.com). The media description is stored on a web server
+ W. The media description contains descriptions of the presentation
+ and all its streams, including the codecs that are available and the
+ protocol stack.
+
+ In this example, the client is only interested in the last part of
+ the movie.
+
+ C->W: GET /twister.sdp HTTP/1.1
+ Host: www.example.com
+ Accept: application/sdp
+
+ W->C: HTTP/1.1 200 OK
+ Date: Wed, 23 Jan 2013 15:35:06 GMT
+ Content-Type: application/sdp
+ Content-Length: 278
+ Expires: Thu, 24 Jan 2013 15:35:06 GMT
+
+ v=0
+ o=- 2890844526 2890842807 IN IP4 198.51.100.5
+ s=RTSP Session
+ e=adm@example.com
+ c=IN IP4 0.0.0.0
+ a=range:npt=00:00:00-01:49:34
+ t=0 0
+ m=audio 0 RTP/AVP 0
+ a=control:rtsp://audio.example.com/twister/audio.en
+ m=video 0 RTP/AVP 31
+ a=control:rtsp://video.example.com/twister/video
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 257]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ C->A: SETUP rtsp://audio.example.com/twister/audio.en RTSP/2.0
+ CSeq: 1
+ User-Agent: PhonyClient/1.2
+ Transport: RTP/AVP/UDP;unicast;dest_addr=":3056"/":3057",
+ RTP/AVP/TCP;unicast;interleaved=0-1
+ Accept-Ranges: npt, smpte, clock
+
+ A->C: RTSP/2.0 200 OK
+ CSeq: 1
+ Session: OccldOFFq23KwjYpAnBbUr
+ Transport: RTP/AVP/UDP;unicast;
+ dest_addr="192.0.2.53:3056"/"192.0.2.53:3057";
+ src_addr="198.51.100.5:5000"/"198.51.100.5:5001"
+ Date: Wed, 23 Jan 2013 15:35:12 +0000
+ Server: PhonyServer/1.0
+ Expires: Thu, 24 Jan 2013 15:35:12 +0000
+ Cache-Control: public
+ Accept-Ranges: npt, smpte
+ Media-Properties: Random-Access=0.02, Immutable, Unlimited
+
+ C->V: SETUP rtsp://video.example.com/twister/video RTSP/2.0
+ CSeq: 1
+ User-Agent: PhonyClient/1.2
+ Transport: RTP/AVP/UDP;unicast;
+ dest_addr="192.0.2.53:3058"/"192.0.2.53:3059",
+ RTP/AVP/TCP;unicast;interleaved=0-1
+ Accept-Ranges: npt, smpte, clock
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 258]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ V->C: RTSP/2.0 200 OK
+ CSeq: 1
+ Session: P5it3pMo6xHkjUcDrNkBjf
+ Transport: RTP/AVP/UDP;unicast;
+ dest_addr="192.0.2.53:3058"/"192.0.2.53:3059";
+ src_addr="198.51.100.5:5002"/"198.51.100.5:5003"
+ Date: Wed, 23 Jan 2013 15:35:12 +0000
+ Server: PhonyServer/1.0
+ Cache-Control: public
+ Expires: Thu, 24 Jan 2013 15:35:12 +0000
+ Accept-Ranges: npt, smpte
+ Media-Properties: Random-Access=1.2, Immutable, Unlimited
+
+ C->V: PLAY rtsp://video.example.com/twister/video RTSP/2.0
+ CSeq: 2
+ User-Agent: PhonyClient/1.2
+ Session: P5it3pMo6xHkjUcDrNkBjf
+ Range: smpte=0:10:00-
+
+ V->C: RTSP/2.0 200 OK
+ CSeq: 2
+ Session: P5it3pMo6xHkjUcDrNkBjf
+ Range: smpte=0:10:00-1:49:23
+ Seek-Style: First-Prior
+ RTP-Info: url="rtsp://video.example.com/twister/video"
+ ssrc=A17E189D:seq=12312232;rtptime=78712811
+ Server: PhonyServer/2.0
+ Date: Wed, 23 Jan 2013 15:35:13 +0000
+
+ C->A: PLAY rtsp://audio.example.com/twister/audio.en RTSP/2.0
+ CSeq: 2
+ User-Agent: PhonyClient/1.2
+ Session: OccldOFFq23KwjYpAnBbUr
+ Range: smpte=0:10:00-
+
+ A->C: RTSP/2.0 200 OK
+ CSeq: 2
+ Session: OccldOFFq23KwjYpAnBbUr
+ Range: smpte=0:10:00-1:49:23
+ Seek-Style: First-Prior
+ RTP-Info: url="rtsp://audio.example.com/twister/audio.en"
+ ssrc=3D124F01:seq=876655;rtptime=1032181
+ Server: PhonyServer/1.0
+ Date: Wed, 23 Jan 2013 15:35:13 +0000
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 259]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ C->A: TEARDOWN rtsp://audio.example.com/twister/audio.en RTSP/2.0
+ CSeq: 3
+ User-Agent: PhonyClient/1.2
+ Session: OccldOFFq23KwjYpAnBbUr
+
+ A->C: RTSP/2.0 200 OK
+ CSeq: 3
+ Server: PhonyServer/1.0
+ Date: Wed, 23 Jan 2013 15:36:52 +0000
+
+ C->V: TEARDOWN rtsp://video.example.com/twister/video RTSP/2.0
+ CSeq: 3
+ User-Agent: PhonyClient/1.2
+ Session: P5it3pMo6xHkjUcDrNkBjf
+
+ V->C: RTSP/2.0 200 OK
+ CSeq: 3
+ Server: PhonyServer/2.0
+ Date: Wed, 23 Jan 2013 15:36:52 +0000
+
+ Even though the audio and video track are on two different servers
+ that may start at slightly different times and may drift with respect
+ to each other over time, the client can perform initial
+ synchronization of the two media using RTP-Info and Range received in
+ the PLAY responses. If the two servers are time synchronized, the
+ RTCP packets can also be used to maintain synchronization.
+
+A.5. Single-Stream Container Files
+
+ Some RTSP servers may treat all files as though they are "container
+ files", yet other servers may not support such a concept. Because of
+ this, clients needs to use the rules set forth in the session
+ description for Request-URIs rather than assuming that a consistent
+ URI may always be used throughout. Below is an example of how a
+ multi-stream server might expect a single-stream file to be served:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 260]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ C->S: DESCRIBE rtsp://foo.example.com/test.wav RTSP/2.0
+ Accept: application/x-rtsp-mh, application/sdp
+ CSeq: 1
+ User-Agent: PhonyClient/1.2
+
+ S->C: RTSP/2.0 200 OK
+ CSeq: 1
+ Content-base: rtsp://foo.example.com/test.wav/
+ Content-type: application/sdp
+ Content-length: 163
+ Server: PhonyServer/1.0
+ Date: Wed, 23 Jan 2013 15:36:52 +0000
+ Expires: Thu, 24 Jan 2013 15:36:52 +0000
+
+ v=0
+ o=- 872653257 872653257 IN IP4 192.0.2.5
+ s=mu-law wave file
+ i=audio test
+ c=IN IP4 0.0.0.0
+ t=0 0
+ a=control: *
+ m=audio 0 RTP/AVP 0
+ a=control:streamid=0
+
+ C->S: SETUP rtsp://foo.example.com/test.wav/streamid=0 RTSP/2.0
+ Transport: RTP/AVP/UDP;unicast;
+ dest_addr=":6970"/":6971";mode="PLAY"
+ CSeq: 2
+ User-Agent: PhonyClient/1.2
+ Accept-Ranges: npt, smpte, clock
+
+ S->C: RTSP/2.0 200 OK
+ Transport: RTP/AVP/UDP;unicast;
+ dest_addr="192.0.2.53:6970"/"192.0.2.53:6971";
+ src_addr="198.51.100.5:6970"/"198.51.100.5:6971";
+ mode="PLAY";ssrc=EAB98712
+ CSeq: 2
+ Session: NYkqQYKk0bb12BY3goyoyO
+ Expires: Thu, 24 Jan 2013 15:36:52 +0000
+ Server: PhonyServer/1.0
+ Date: Wed, 23 Jan 2013 15:36:52 +0000
+ Accept-Ranges: npt
+ Media-Properties: Random-Access=0.5, Immutable, Unlimited
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 261]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ C->S: PLAY rtsp://foo.example.com/test.wav/ RTSP/2.0
+ CSeq: 3
+ User-Agent: PhonyClient/1.2
+ Session: NYkqQYKk0bb12BY3goyoyO
+
+ S->C: RTSP/2.0 200 OK
+ CSeq: 3
+ Server: PhonyServer/1.0
+ Date: Wed, 23 Jan 2013 15:36:52 +0000
+ Session: NYkqQYKk0bb12BY3goyoyO
+ Range: npt=0-600
+ Seek-Style: RAP
+ RTP-Info: url="rtsp://foo.example.com/test.wav/streamid=0"
+ ssrc=0D12F123:seq=981888;rtptime=3781123
+
+ Note the different URI in the SETUP command and then the switch back
+ to the aggregate URI in the PLAY command. This makes complete sense
+ when there are multiple streams with aggregate control, but it is
+ less than intuitive in the special case where the number of streams
+ is one. However, the server has declared the aggregated control URI
+ in the SDP; therefore, this is legal.
+
+ In this case, it is also required that servers accept implementations
+ that use the non-aggregated interpretation and use the individual
+ media URI, like this:
+
+ C->S: PLAY rtsp://example.com/test.wav/streamid=0 RTSP/2.0
+ CSeq: 3
+ User-Agent: PhonyClient/1.2
+ Session: NYkqQYKk0bb12BY3goyoyO
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 262]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+A.6. Live Media Presentation Using Multicast
+
+ The media server M chooses the multicast address and port. Here, it
+ is assumed that the web server only contains a pointer to the full
+ description, while the media server M maintains the full description.
+
+ C->W: GET /sessions.html HTTP/1.1
+ Host: www.example.com
+
+ W->C: HTTP/1.1 200 OK
+ Content-Type: text/html
+
+ <html>
+ ...
+ <a href "rtsp://live.example.com/concert/audio">
+ Streamed Live Music performance </a>
+ ...
+ </html>
+
+
+ C->M: DESCRIBE rtsp://live.example.com/concert/audio RTSP/2.0
+ CSeq: 1
+ Supported: play.basic, play.scale
+ User-Agent: PhonyClient/1.2
+
+ M->C: RTSP/2.0 200 OK
+ CSeq: 1
+ Content-Type: application/sdp
+ Content-Length: 183
+ Server: PhonyServer/1.0
+ Date: Wed, 23 Jan 2013 15:36:52 +0000
+ Supported: play.basic
+
+ v=0
+ o=- 2890844526 2890842807 IN IP4 192.0.2.5
+ s=RTSP Session
+ t=0 0
+ m=audio 3456 RTP/AVP 0
+ c=IN IP4 233.252.0.54/16
+ a=control: rtsp://live.example.com/concert/audio
+ a=range:npt=0-
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 263]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ C->M: SETUP rtsp://live.example.com/concert/audio RTSP/2.0
+ CSeq: 2
+ Transport: RTP/AVP;multicast;
+ dest_addr="233.252.0.54:3456"/"233.252.0.54:3457";ttl=16
+ Accept-Ranges: npt, smpte, clock
+ User-Agent: PhonyClient/1.2
+
+ M->C: RTSP/2.0 200 OK
+ CSeq: 2
+ Server: PhonyServer/1.0
+ Date: Wed, 23 Jan 2013 15:36:52 +0000
+ Transport: RTP/AVP;multicast;
+ dest_addr="233.252.0.54:3456"/"233.252.0.54:3457";ttl=16
+ ;ssrc=4D12AB92/0DF876A3
+ Session: qHj4jidpmF6zy9v9tNbtxr
+ Accept-Ranges: npt, clock
+ Media-Properties: No-Seeking, Time-Progressing, Time-Duration=0
+
+
+ C->M: PLAY rtsp://live.example.com/concert/audio RTSP/2.0
+ CSeq: 3
+ Session: qHj4jidpmF6zy9v9tNbtxr
+ User-Agent: PhonyClient/1.2
+
+ M->C: RTSP/2.0 200 OK
+ CSeq: 3
+ Server: PhonyServer/1.0
+ Date: Wed, 23 Jan 2013 15:36:52 +0000
+ Session: qHj4jidpmF6zy9v9tNbtxr
+ Seek-Style: Next
+ Range:npt=1256-
+ RTP-Info: url="rtsp://live.example.com/concert/audio"
+ ssrc=0D12F123:seq=1473; rtptime=80000
+
+A.7. Capability Negotiation
+
+ This example illustrates how the client and server determine their
+ capability to support a special feature, in this case, "play.scale".
+ The server, through the client request and the included Supported
+ header, learns that the client supports RTSP 2.0 and also supports
+ the playback time scaling feature of RTSP. The server's response
+ contains the following feature-related information to the client; it
+ supports the basic media delivery functions (play.basic), the
+ extended functionality of time scaling of content (play.scale), and
+ one "example.com" proprietary feature (com.example.flight). The
+ client also learns the methods supported (Public header) by the
+ server for the indicated resource.
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 264]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ C->S: OPTIONS rtsp://media.example.com/movie/twister.3gp RTSP/2.0
+ CSeq: 1
+ Supported: play.basic, play.scale
+ User-Agent: PhonyClient/1.2
+
+ S->C: RTSP/2.0 200 OK
+ CSeq: 1
+ Public:OPTIONS,SETUP,PLAY,PAUSE,TEARDOWN,DESCRIBE,GET_PARAMETER
+ Allow: OPTIONS, SETUP, PLAY, PAUSE, TEARDOWN, DESCRIBE
+ Server: PhonyServer/2.0
+ Supported: play.basic, play.scale, com.example.flight
+
+ When the client sends its SETUP request, it tells the server that it
+ requires support of the play.scale feature for this session by
+ including the Require header.
+
+ C->S: SETUP rtsp://media.example.com/twister.3gp/trackID=1 RTSP/2.0
+ CSeq: 3
+ User-Agent: PhonyClient/1.2
+ Transport: RTP/AVP/UDP;unicast;
+ dest_addr="192.0.2.53:3056"/"192.0.2.53:3057",
+ RTP/AVP/TCP;unicast;interleaved=0-1
+ Require: play.scale
+ Accept-Ranges: npt, smpte, clock
+ User-Agent: PhonyClient/1.2
+
+ S->C: RTSP/2.0 200 OK
+ CSeq: 3
+ Session: OccldOFFq23KwjYpAnBbUr
+ Transport: RTP/AVP/UDP;unicast;
+ dest_addr="192.0.2.53:3056"/"192.0.2.53:3057";
+ src_addr="198.51.100.5:5000"/"198.51.100.5:5001"
+ Server: PhonyServer/2.0
+ Accept-Ranges: npt, smpte
+ Media-Properties: Random-Access=0.8, Immutable, Unlimited
+
+Appendix B. RTSP Protocol State Machine
+
+ The RTSP session state machine describes the behavior of the protocol
+ from RTSP session initialization through RTSP session termination.
+ It is probably easiest to think of this as the server's state and
+ then view the client as needing to track what it believes the
+ server's state will be based on sent or received RTSP messages.
+ Thus, in most cases, the state tables below can be read as: if the
+ client does X, and assuming it fulfills any prerequisite(s), the
+ (server) state will move to the new state and the indicated response
+ will returned. However, there are also server-to-client
+ notifications or requests, where the action describes what
+
+
+
+Schulzrinne, et al. Standards Track [Page 265]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ notification or request will occur, its requisites, what new state
+ will result after the server has received the response, as well as
+ describing the client's response to the action.
+
+ The State machine is defined on a per-session basis, which is
+ uniquely identified by the RTSP session identifier. The session may
+ contain one or more media streams depending on state. If a single
+ media stream is part of the session, it is in non-aggregated control.
+ If two or more are part of the session, it is in aggregated control.
+
+ The below state machine is an informative description of the
+ protocol's behavior. In case of ambiguity with the earlier parts of
+ this specification, the description in the earlier parts take
+ precedence.
+
+B.1. States
+
+ The state machine contains three states, described below. For each
+ state, there exists a table that shows which requests and events are
+ allowed and whether they will result in a state change.
+
+ Init: Initial state, no session exists.
+
+ Ready: Session is ready to start playing.
+
+ Play: Session is playing, i.e., sending media-stream data in the
+ direction S->C.
+
+B.2. State Variables
+
+ This representation of the state machine needs more than its state to
+ work. A small number of variables are also needed, and they are
+ explained below.
+
+ NRM: The number of media streams that are part of this session.
+
+ RP: Resume point, the point in the presentation time line at which
+ a request to continue playing will resume from. A time format
+ for the variable is not mandated.
+
+B.3. Abbreviations
+
+ To make the state tables more compact, a number of abbreviations are
+ used, which are explained below.
+
+ IFI: IF Implemented.
+
+ md: Media
+
+
+
+Schulzrinne, et al. Standards Track [Page 266]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ PP: Pause Point, the point in the presentation timeline at which
+ the presentation was paused.
+
+ Prs: Presentation, the complete multimedia presentation.
+
+ RedP: Redirect Point, the point in the presentation timeline at which
+ a REDIRECT was specified to occur.
+
+ SES: Session.
+
+B.4. State Tables
+
+ This section contains a table for each state. The table contains all
+ the requests and events on which this state is allowed to act. The
+ events that are method names are, unless noted, requests with the
+ given method in the direction client to server (C->S). In some
+ cases, there exists one or more requisites. The response column
+ tells what type of response actions should be performed. Possible
+ actions that are requested for an event include: response codes,
+ e.g., 200, headers that need to be included in the response, setting
+ of state variables, or settings of other session-related parameters.
+ The new state column tells which state the state machine changes to.
+
+ The response to a valid request meeting the requisites is normally a
+ 2xx (SUCCESS) unless otherwise noted in the response column. The
+ exceptions need to be given a response according to the response
+ column. If the request does not meet the requisite, is erroneous, or
+ some other type of error occurs, the appropriate response code is to
+ be sent. If the response code is a 4xx, the session state is
+ unchanged. A response code of 3rr will result in that the session
+ being ended and its state changed to Init. A response code of 304
+ results in no state change. However, there are restrictions to when
+ a 3rr response may be used. A 5xx response does not result in any
+ change of the session state, except if the error is not possible to
+ recover from. An unrecoverable error results in the ending of the
+ session. In the general case, if it can't be determined whether or
+ not it was an unrecoverable error, the client will be required to
+ test. In the case that the next request after a 5xx is responded to
+ with a 454 (Session Not Found), the client knows that the session has
+ ended. For any request message that cannot be responded to within
+ the time defined in Section 10.4, a 100 response must be sent.
+
+ The server will time out the session after the period of time
+ specified in the SETUP response, if no activity from the client is
+ detected. Therefore, there exists a timeout event for all states
+ except Init.
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 267]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ In the case that NRM = 1, the presentation URI is equal to the media
+ URI or a specified presentation URI. For NRM > 1, the presentation
+ URI needs to be other than any of the media that are part of the
+ session. This applies to all states.
+
+ +---------------+-----------------+---------------------------------+
+ | Event | Prerequisite | Response |
+ +---------------+-----------------+---------------------------------+
+ | DESCRIBE | Needs REDIRECT | 3rr, Redirect |
+ | | | |
+ | DESCRIBE | | 200, Session description |
+ | | | |
+ | OPTIONS | Session ID | 200, Reset session timeout |
+ | | | timer |
+ | | | |
+ | OPTIONS | | 200 |
+ | | | |
+ | SET_PARAMETER | Valid parameter | 200, change value of parameter |
+ | | | |
+ | GET_PARAMETER | Valid parameter | 200, return value of parameter |
+ +---------------+-----------------+---------------------------------+
+
+ Table 9: Non-State-Machine Changing Events
+
+ The methods in Table 9 do not have any effect on the state machine or
+ the state variables. However, some methods do change other session-
+ related parameters, for example, SET_PARAMETER, which will set the
+ parameter(s) specified in its body. Also, all of these methods that
+ allow the Session header will also update the keep-alive timer for
+ the session.
+
+ +------------------+----------------+-----------+-------------------+
+ | Action | Requisite | New State | Response |
+ +------------------+----------------+-----------+-------------------+
+ | SETUP | | Ready | NRM=1, RP=0.0 |
+ | | | | |
+ | SETUP | Needs Redirect | Init | 3rr Redirect |
+ | | | | |
+ | S -> C: REDIRECT | No Session hdr | Init | Terminate all SES |
+ +------------------+----------------+-----------+-------------------+
+
+ Table 10: State: Init
+
+ The initial state of the state machine (Table 10) can only be left by
+ processing a correct SETUP request. As seen in the table, the two
+ state variables are also set by a correct request. This table also
+ shows that a correct SETUP can in some cases be redirected to another
+ URI or server by a 3rr response.
+
+
+
+Schulzrinne, et al. Standards Track [Page 268]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ +-------------+------------------------+---------+------------------+
+ | Action | Requisite | New | Response |
+ | | | State | |
+ +-------------+------------------------+---------+------------------+
+ | SETUP | New URI | Ready | NRM +=1 |
+ | | | | |
+ | SETUP | URI Setup prior | Ready | Change transport |
+ | | | | param |
+ | | | | |
+ | TEARDOWN | Prs URI, | Init | No session hdr, |
+ | | | | NRM = 0 |
+ | | | | |
+ | TEARDOWN | md URI,NRM=1 | Init | No Session hdr, |
+ | | | | NRM = 0 |
+ | | | | |
+ | TEARDOWN | md URI,NRM>1 | Ready | Session hdr, NRM |
+ | | | | -= 1 |
+ | | | | |
+ | PLAY | Prs URI, No range | Play | Play from RP |
+ | | | | |
+ | PLAY | Prs URI, Range | Play | According to |
+ | | | | range |
+ | | | | |
+ | PLAY | md URI, NRM=1, Range | Play | According to |
+ | | | | range |
+ | | | | |
+ | PLAY | md URI, NRM=1 | Play | Play from RP |
+ | | | | |
+ | PAUSE | Prs URI | Ready | Return PP |
+ | | | | |
+ | SC:REDIRECT | Terminate-Reason | Ready | Set RedP |
+ | | | | |
+ | SC:REDIRECT | No Terminate-Reason | Init | Session is |
+ | | time parameter | | removed |
+ | | | | |
+ | Timeout | | Init | |
+ | | | | |
+ | RedP | | Init | TEARDOWN of |
+ | reached | | | session |
+ +-------------+------------------------+---------+------------------+
+
+ Table 11: State: Ready
+
+ In the Ready state (Table 11), some of the actions depend on the
+ number of media streams (NRM) in the session, i.e., aggregated or
+ non-aggregated control. A SETUP request in the Ready state can
+ either add one more media stream to the session or, if the media
+ stream (same URI) already is part of the session, change the
+
+
+
+Schulzrinne, et al. Standards Track [Page 269]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ transport parameters. TEARDOWN depends on both the Request-URI and
+ the number of media streams within the session. If the Request-URI
+ is the presentation URI, the whole session is torn down. If a media
+ URI is used in the TEARDOWN request and more than one media exists in
+ the session, the session will remain and a session header is returned
+ in the response. If only a single media stream remains in the
+ session when performing a TEARDOWN with a media URI, the session is
+ removed. The number of media streams remaining after tearing down a
+ media stream determines the new state.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 270]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ +----------------+-----------------------+--------+-----------------+
+ | Action | Requisite | New | Response |
+ | | | State | |
+ +----------------+-----------------------+--------+-----------------+
+ | PAUSE | Prs URI | Ready | Set RP to |
+ | | | | present point |
+ | | | | |
+ | End of media | All media | Play | Set RP = End of |
+ | | | | media |
+ | | | | |
+ | End of range | | Play | Set RP = End of |
+ | | | | range |
+ | | | | |
+ | PLAY | Prs URI, No range | Play | Play from |
+ | | | | present point |
+ | | | | |
+ | PLAY | Prs URI, Range | Play | According to |
+ | | | | range |
+ | | | | |
+ | SC:PLAY_NOTIFY | | Play | 200 |
+ | | | | |
+ | SETUP | New URI | Play | 455 |
+ | | | | |
+ | SETUP | md URI | Play | 455 |
+ | | | | |
+ | SETUP | md URI, IFI | Play | Change |
+ | | | | transport param.|
+ | | | | |
+ | TEARDOWN | Prs URI | Init | No session hdr |
+ | | | | |
+ | TEARDOWN | md URI,NRM=1 | Init | No Session hdr, |
+ | | | | NRM=0 |
+ | | | | |
+ | TEARDOWN | md URI | Play | 455 |
+ | | | | |
+ | SC:REDIRECT | Terminate Reason with | Play | Set RedP |
+ | | Time parameter | | |
+ | | | | |
+ | SC:REDIRECT | | Init | Session is |
+ | | | | removed |
+ | | | | |
+ | RedP reached | | Init | TEARDOWN of |
+ | | | | session |
+ | | | | |
+ | Timeout | | Init | Stop Media |
+ | | | | playout |
+ +----------------+-----------------------+--------+-----------------+
+ Table 12: State: Play
+
+
+
+Schulzrinne, et al. Standards Track [Page 271]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ The Play state table (Table 12) contains a number of requests that
+ need a presentation URI (labeled as Prs URI) to work on (i.e., the
+ presentation URI has to be used as the Request-URI). This is due to
+ the exclusion of non-aggregated stream control in sessions with more
+ than one media stream.
+
+ To avoid inconsistencies between the client and server, automatic
+ state transitions are avoided. This can be seen at, for example, an
+ "End of media" event when all media has finished playing but the
+ session still remains in Play state. An explicit PAUSE request needs
+ to be sent to change the state to Ready. It may appear that there
+ exist automatic transitions in "RedP reached" and "PP reached".
+ However, they are requested and acknowledged before they take place.
+ The time at which the transition will happen is known by looking at
+ the Terminate-Reason header's time parameter and Range header,
+ respectively. If the client sends a request close in time to these
+ transitions, it needs to be prepared for receiving error messages, as
+ the state may or may not have changed.
+
+Appendix C. Media-Transport Alternatives
+
+ This section defines how certain combinations of protocols, profiles,
+ and lower transports are used. This includes the usage of the
+ Transport header's source and destination address parameters:
+ "src_addr" and "dest_addr".
+
+C.1. RTP
+
+ This section defines the interaction of RTSP with respect to the RTP
+ protocol [RFC3550]. It also defines any necessary media-transport
+ signaling with regard to RTP.
+
+ The available RTP profiles and lower-layer transports are described
+ below along with rules on signaling the available combinations.
+
+C.1.1. AVP
+
+ The usage of the "RTP Profile for Audio and Video Conferences with
+ Minimal Control" [RFC3551] when using RTP for media transport over
+ different lower-layer transport protocols is defined below in regard
+ to RTSP.
+
+ One such case is defined within this document: the use of embedded
+ (interleaved) binary data as defined in Section 14. The usage of
+ this method is indicated by including the "interleaved" parameter.
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 272]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ When using embedded binary data, "src_addr" and "dest_addr" MUST NOT
+ be used. This addressing and multiplexing is used as defined with
+ use of channel numbers and the interleaved parameter.
+
+C.1.2. AVP/UDP
+
+ This part describes the sending of RTP [RFC3550] over lower-
+ transport-layer UDP [RFC768] according to the profile "RTP Profile
+ for Audio and Video Conferences with Minimal Control" defined in
+ [RFC3551]. Implementations of RTP/AVP/UDP MUST implement RTCP
+ (Appendix C.1.6). This profile requires one or two unidirectional or
+ bidirectional UDP flows per media stream. The first UDP flow is for
+ RTP and the second is for RTCP. Multiplexing of RTP and RTCP
+ (Appendix C.1.6.4) MAY be used, in which case, a single UDP flow is
+ used for both parts. Embedding of RTP data with the RTSP messages,
+ in accordance with Section 14, SHOULD NOT be performed when RTSP
+ messages are transported over unreliable transport protocols, like
+ UDP [RFC768].
+
+ The RTP/UDP and RTCP/UDP flows can be established using the Transport
+ header's "src_addr" and "dest_addr" parameters.
+
+ In RTSP PLAY mode, the transmission of RTP packets from client to
+ server is unspecified. The behavior in regard to such RTP packets
+ MAY be defined in future.
+
+ The "src_addr" and "dest_addr" parameters are used in the following
+ way for media delivery and playback mode, i.e., Mode=PLAY:
+
+ o The "src_addr" and "dest_addr" parameters MUST contain either 1 or
+ 2 address specifications. Note that two address specifications
+ MAY be provided even if RTP and RTCP multiplexing is negotiated.
+
+ o Each address specification for RTP/AVP/UDP or RTP/AVP/TCP MUST
+ contain either:
+
+ * both an address and a port number, or
+
+ * a port number without an address.
+
+ o The first address specification given in either of the parameters
+ applies to the RTP stream. The second specification, if present,
+ applies to the RTCP stream, unless in the case RTP and RTCP
+ multiplexing is negotiated where both RTP and RTCP will use the
+ first specification.
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 273]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ o The RTP/UDP packets from the server to the client MUST be sent to
+ the address and port given by the first address specification of
+ the "dest_addr" parameter.
+
+ o The RTCP/UDP packets from the server to the client MUST be sent to
+ the address and port given by the second address specification of
+ the "dest_addr" parameter, unless RTP and RTCP multiplexing has
+ been negotiated, in which case RTCP MUST be sent to the first
+ address specification. If no second pair is specified and RTP and
+ RTCP multiplexing has not been negotiated, RTCP MUST NOT be sent.
+
+ o The RTCP/UDP packets from the client to the server MUST be sent to
+ the address and port given by the second address specification of
+ the "src_addr" parameter, unless RTP and RTCP multiplexing has
+ been negotiated, in which case RTCP MUST be sent to the first
+ address specification. If no second pair is specified and RTP and
+ RTCP multiplexing has not been negotiated, RTCP MUST NOT be sent.
+
+ o The RTP/UDP packets from the client to the server MUST be sent to
+ the address and port given by the first address specification of
+ the "src_addr" parameter.
+
+ o RTP and RTCP packets SHOULD be sent from the corresponding
+ receiver port, i.e., RTCP packets from the server should be sent
+ from the "src_addr" parameters second address port pair, unless
+ RTP and RTCP multiplexing has been negotiated in which case the
+ first address port pair is used.
+
+C.1.3. AVPF/UDP
+
+ The RTP profile "Extended RTP Profile for RTCP-based Feedback (RTP/
+ AVPF)" [RFC4585] MAY be used as RTP profiles in sessions using RTP.
+ All that is defined for AVP MUST also apply for AVPF.
+
+ The usage of AVPF is indicated by the media initialization protocol
+ used. In the case of SDP, it is indicated by media lines ("m=")
+ containing the profile RTP/AVPF. That SDP MAY also contain further
+ AVPF-related SDP attributes configuring the AVPF session regarding
+ reporting interval and feedback messages to be used [RFC4585]. This
+ configuration MUST be followed.
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 274]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+C.1.4. SAVP/UDP
+
+ The RTP profile "The Secure Real-time Transport Protocol (SRTP)"
+ [RFC3711] is an RTP profile (SAVP) that MAY be used in RTSP sessions
+ using RTP. All that is defined for AVP MUST also apply for SAVP.
+
+ The usage of SRTP requires that a security context be established.
+ The default key-management unless otherwise signaled SHALL be MIKEY
+ in RSA-R mode as defined in Appendix C.1.4.1 and not according to the
+ procedure defined in "Key Management Extensions for Session
+ Description Protocol (SDP) and Real Time Streaming Protocol (RTSP)"
+ [RFC4567]. The reason is that RFC 4567 sends the initial MIKEY
+ message in SDP, thus, both requiring the usage of the DESCRIBE method
+ and forcing the server to keep state for clients performing DESCRIBE
+ in anticipation that they might require key management.
+
+ MIKEY is selected as the default method for establishing SRTP
+ cryptographic context within an RTSP session as it can be embedded in
+ the RTSP messages while still ensuring confidentiality of content of
+ the keying material, even when using hop-by-hop TLS security for the
+ RTSP messages. This method also supports pipelining of the RTSP
+ messages.
+
+C.1.4.1. MIKEY Key Establishment
+
+ This method for using MIKEY [RFC3830] to establish the SRTP
+ cryptographic context is initiated in the client's SETUP request, and
+ the server's response to the SETUP carries the MIKEY response. This
+ ensures that the crypto context establishment happens simultaneously
+ with the establishment of the media stream being protected. By using
+ MIKEY's RSA-R mode [RFC4738] the client can be the initiator and
+ still allow the server to set the parameters in accordance with the
+ actual media stream.
+
+ The SRTP cryptographic context establishment is done according to the
+ following process:
+
+ 1. The client determines that SAVP or SAVPF shall be used from the
+ media-description format, e.g., SDP. If no other key-management
+ method is explicitly signaled, then MIKEY SHALL be used as
+ defined herein. The use of SRTP with RTSP is only defined with
+ MIKEY with keys established as defined in this section. Future
+ documents may define how an RTSP implementation treats SDP that
+ indicates some other key mechanism to be used. The need for
+ such specification includes [RFC4567], which is not defined for
+ use in RTSP 2.0 within this document.
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 275]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ 2. The client SHALL establish a TLS connection for RTSP messages,
+ directly or hop-by-hop with the server. If hop-by-hop TLS
+ security is used, the User method SHALL be indicated in the
+ Accept-Credentials header. Note that using hop-by-hop does
+ allow the proxy to insert itself as a man in the middle. This
+ can also occur in the MIKEY exchange by the proxy providing one
+ of its certificates rather than the server's in the Connection-
+ Credentials header. Therefore, the client SHALL validate the
+ server certificate.
+
+ 3. The client retrieves the server's certificate from a direct TLS
+ connection or hop-by-hop from a Connection-Credentials header.
+ The client then checks that the server certificate is valid and
+ belongs to the server.
+
+ 4. The client forms the MIKEY Initiator message using RSA-R mode in
+ unicast mode as specified in [RFC4738]. The client SHOULD use
+ the same certificate for TLS and MIKEY to enable the server to
+ bind the two together. The client's certificate SHALL be
+ included in the MIKEY message. The client SHALL indicate its
+ SRTP capabilities in the message.
+
+ 5. The MIKEY message from the previous step is base64-encoded
+ [RFC4648] and becomes the value of the MIKEY parameter that is
+ included in the transport specification(s) that specifies an
+ SRTP-based profile (SAVP, SAVPF) in the SETUP request.
+
+ 6. Any proxy encountering the MIKEY parameter SHALL forward it
+ without modification. A proxy that is required to understand
+ the Transport specifications will need to understand SAVP/SAVPF
+ with MIKEY to enable the default keying for SRTP-protected media
+ streams. If such a proxy does not support SAVP/SAVPF with
+ MIKEY, it will discard the whole transport specification. Most
+ types of proxies can easily support SAVP and SAVPF with MIKEY.
+ If a client encounters a proxy not supporting SAVP/SAVPF with
+ MIKEY, the client should attempt bypassing that proxy.
+
+ 7. The server, upon receiving the SETUP request, will need to
+ decide upon the transport specification to use, if multiple are
+ included by the client. In the determination of which transport
+ specifications are supported and preferred, the server SHOULD
+ decode the MIKEY message to take the embedded SRTP parameters
+ into account. If all transport spec require SRTP but no MIKEY
+ parameter or other supported keying method is included, the
+ server SHALL respond with 403 (Forbidden).
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 276]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ 8. Upon generating a response, the following outcomes can occur:
+
+ * A transport spec not using SRTP and MIKEY is selected. Thus,
+ the response will not contain any MIKEY parameters.
+
+ * A transport spec using SRTP and MIKEY is selected but an
+ error is encountered in the MIKEY processing. In this case,
+ an RTSP error response code of 466 (Key Management Error)
+ SHALL be used. A MIKEY message describing the error MAY be
+ included.
+
+ * A transport spec using SRTP and MIKEY is selected and a MIKEY
+ response message can be created. The server SHOULD use the
+ same certificate for TLS and in MIKEY to enable the client to
+ bind the two together. If a different certificate is used,
+ it SHALL be included in the MIKEY message. It is RECOMMENDED
+ that the envelope key-cache type be set to 'Cache' and that a
+ single envelope key is reused for all MIKEY messages to the
+ client. That message is included in the MIKEY parameter part
+ of the single selected transport specification in the SETUP
+ response. The server will set the SRTP parameters as
+ preferred for this media stream within the supported range by
+ the client.
+
+ 9. The server transmits the SETUP response back to the client.
+
+ 10. The client receives the SETUP response and, if the response code
+ indicates a successful request, it decodes the MIKEY message and
+ establishes the SRTP cryptographic context from the parameters
+ in the MIKEY response.
+
+ In the above method, the client's certificate may be self signed in
+ cases where the client's identity is not necessary to authenticate
+ and the security goal is only to ensure that the RTSP signaling
+ client is the same as the one receiving the SRTP security context.
+
+C.1.5. SAVPF/UDP
+
+ The RTP profile "Extended Secure RTP Profile for Real-time Transport
+ Control Protocol (RTCP)-Based Feedback (RTP/SAVPF)" [RFC5124] is an
+ RTP profile (SAVPF) that MAY be used in RTSP sessions using RTP. All
+ that is defined for AVPF MUST also apply for SAVPF.
+
+ The usage of SRTP requires that a cryptographic context be
+ established. The default mechanism for establishing that security
+ association is to use MIKEY[RFC3830] with RTSP as defined in
+ Appendix C.1.4.1.
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 277]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+C.1.6. RTCP Usage with RTSP
+
+ RTCP has several usages when RTP is implemented for media transport
+ as explained below. Thus, RTCP MUST be supported if an RTSP agent
+ handles RTP.
+
+C.1.6.1. Media Synchronization
+
+ RTCP provides media synchronization and clock-drift compensation.
+ The initial media synchronization is available from RTP-Info header.
+ However, to be able to handle any clock drift between the media
+ streams, RTCP is needed.
+
+C.1.6.2. RTSP Session Keep-Alive
+
+ RTCP traffic from the RTSP client to the RTSP server MUST function as
+ keep-alive. This requires an RTSP server supporting RTP to use the
+ received RTCP packets as indications that the client desires the
+ related RTSP session to be kept alive.
+
+C.1.6.3. Bitrate Adaption
+
+ RTCP Receiver reports and any additional feedback from the client
+ MUST be used to adapt the bitrate used over the transport for all
+ cases when RTP is sent over UDP. An RTP sender without reserved
+ resources MUST NOT use more than its fair share of the available
+ resources. This can be determined by comparing on short-to-medium
+ terms (some seconds) the used bitrate and adapting it so that the RTP
+ sender sends at a bitrate comparable to what a TCP sender would
+ achieve on average over the same path.
+
+ To ensure that the implementation's adaptation mechanism has a well-
+ defined outer envelope, all implementations using a non-congestion-
+ controlled unicast transport protocol, like UDP, MUST implement
+ "Multimedia Congestion Control: Circuit Breakers for Unicast RTP
+ Sessions" [RTP-CIRCUIT-BREAKERS].
+
+C.1.6.4. RTP and RTCP Multiplexing
+
+ RTSP can be used to negotiate the usage of RTP and RTCP multiplexing
+ as described in [RFC5761]. This allows servers and client to reduce
+ the amount of resources required for the session by only requiring
+ one underlying transport stream per media stream instead of two when
+ using RTP and RTCP. This lessens the server-port consumption and
+ also the necessary state and keep-alive work when operating across
+ NATs [RFC2663].
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 278]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Content must be prepared with some consideration for RTP and RTCP
+ multiplexing, mainly ensuring that the RTP payload types used do not
+ collide with the ones used for RTCP packet types. This option likely
+ needs explicit support from the content unless the RTP payload types
+ can be remapped by the server and that is correctly reflected in the
+ session description. Beyond that, support of this feature should
+ come at little cost and much gain.
+
+ It is recommended that, if the content and server support RTP and
+ RTCP multiplexing, this is indicated in the session description, for
+ example, using the SDP attribute "a=rtcp-mux". If the SDP message
+ contains the "a=rtcp-mux" attribute for a media stream, the server
+ MUST support RTP and RTCP multiplexing. If indicated or otherwise
+ desired by the client, it can include the Transport parameter "RTCP-
+ mux" in any transport specification where it desires to use "RTCP-
+ mux". The server will indicate if it supports "RTCP-mux". Servers
+ and Clients SHOULD support RTP and RTCP multiplexing.
+
+ For capability exchange, an RTSP feature tag for RTP and RTCP
+ multiplexing is defined: "setup.rtp.rtcp.mux".
+
+ To minimize the risk of negotiation failure while using RTP and RTCP
+ multiplexing, some recommendations are here provided. If the session
+ description includes explicit indication of support ("a=rtcp-mux" in
+ SDP), then an RTSP agent can safely create a SETUP request with a
+ transport specification with only a single "dest_addr" parameter
+ address specification. If no such explicit indication is provided,
+ then even if the feature tag "setup.rtp.rtcp.mux" is provided in a
+ Supported header by the RTSP server or the feature tag included in
+ the Required header in the SETUP request, the media resource may not
+ support RTP and RTCP multiplexing. Thus, to maximize the probability
+ of successful negotiation, the RTSP agent is recommended to include
+ two "dest_addr" parameter address specifications in the first or
+ first set (if pipelining is used) of SETUP request(s) for any media
+ resource aggregate. That way, the RTSP server can accept RTP and
+ RTCP multiplexing and only use the first address specification or, if
+ not, use both specifications. The RTSP agent, after having received
+ the response for a successful negotiation of the usage of RTP and
+ RTCP multiplexing, can then release the resources associated with the
+ second address specification.
+
+C.2. RTP over TCP
+
+ Transport of RTP over TCP can be done in two ways: over independent
+ TCP connections using [RFC4571] or interleaved in the RTSP
+ connection. In both cases, the protocol MUST be "rtp" and the lower-
+ layer MUST be TCP. The profile may be any of the above specified
+ ones: AVP, AVPF, SAVP, or SAVPF.
+
+
+
+Schulzrinne, et al. Standards Track [Page 279]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+C.2.1. Interleaved RTP over TCP
+
+ The use of embedded (interleaved) binary data transported on the RTSP
+ connection is possible as specified in Section 14. When using this
+ declared combination of interleaved binary data, the RTSP messages
+ MUST be transported over TCP. TLS may or may not be used. If TLS is
+ used, both RTSP messages and the binary data will be protected by
+ TLS.
+
+ One should, however, consider that this will result in all media
+ streams going through any proxy. Using independent TCP connections
+ can avoid that issue.
+
+C.2.2. RTP over Independent TCP
+
+ In this section, the sending of RTP [RFC3550] over lower-layer
+ transport TCP [RFC793] according to "Framing Real-time Transport
+ Protocol (RTP) and RTP Control Protocol (RTCP) Packets over
+ Connection-Oriented Transport" [RFC4571] is described. This section
+ adapts the guidelines for using RTP over TCP within SIP/SDP [RFC4145]
+ to work with RTSP.
+
+ A client codes the support of RTP over independent TCP by specifying
+ an RTP/AVP/TCP transport option without an interleaved parameter in
+ the Transport line of a SETUP request. This transport option MUST
+ include the "unicast" parameter.
+
+ If the client wishes to use RTP with RTCP, two address specifications
+ need to be included in the "dest_addr" parameter. If the client
+ wishes to use RTP without RTCP, one address specification is included
+ in the "dest_addr" parameter. If the client wishes to multiplex RTP
+ and RTCP on a single transport flow (see Appendix C.1.6.4), one or
+ two address specifications are included in the "dest_addr" parameter
+ in addition to the "RTCP-mux" transport parameter. Two address
+ specifications are allowed to facilitate successful negotiation when
+ the server or content can't support RTP and RTCP multiplexing.
+ Ordering rules of dest_addr ports follow the rules for RTP/AVP/UDP.
+
+ If the client wishes to play the active role in initiating the TCP
+ connection, it MAY set the setup parameter (see Section 18.54) on the
+ Transport line to be "active", or it MAY omit the setup parameter, as
+ active is the default. If the client signals the active role, the
+ ports in the address specifications in the "dest_addr" parameter MUST
+ be set to 9 (the discard port).
+
+ If the client wishes to play the passive role in TCP connection
+ initiation, it MUST set the setup parameter on the Transport line to
+ be "passive". If the client is able to assume the active or the
+
+
+
+Schulzrinne, et al. Standards Track [Page 280]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ passive role, it MUST set the setup parameter on the Transport line
+ to be "actpass". In either case, the "dest_addr" parameter's address
+ specification port value for RTP MUST be set to the TCP port number
+ on which the client is expecting to receive the TCP connection for
+ RTP, and the "dest_addr" address specification port value for RTCP
+ MUST be set to the TCP port number on which the client is expecting
+ to receive the TCP connection for RTCP. In the case that the client
+ wishes to multiplex RTP and RTCP on a single transport flow, the
+ "RTCP-mux" parameter is included and one or two "dest_addr" parameter
+ address specifications are included, as mentioned earlier in this
+ section.
+
+ Upon receipt of a non-interleaved RTP/AVP/TCP SETUP request, if a
+ server decides to accept this requested option, the 2xx reply MUST
+ contain a Transport option that specifies RTP/AVP/TCP (without using
+ the interleaved parameter and using the unicast parameter). The
+ "dest_addr" parameter value MUST be echoed from the parameter value
+ in the client request unless the destination address (only port) was
+ not provided; in which case, the server MAY include the source
+ address of the RTSP TCP connection with the port number unchanged.
+
+ In addition, the server reply MUST set the setup parameter on the
+ Transport line, to indicate the role the server will play in the
+ connection setup. Permissible values are "active" (if a client set
+ setup to "passive" or "actpass") and "passive" (if a client set setup
+ to "active" or "actpass").
+
+ If a server sets setup to "passive", the "src_addr" in the reply MUST
+ indicate the ports on which the server is willing to receive a TCP
+ connection for RTP and (if the client requested a TCP connection for
+ RTCP by specifying two "dest_addr" address specifications) a TCP/
+ RTCP connection. If a server sets setup to "active", the ports
+ specified in "src_addr" address specifications MUST be set to 9. The
+ server MAY use the "ssrc" parameter, following the guidance in
+ Section 18.54. The server sets only one address specification in the
+ case that the client has indicated only a single address
+ specification or in case RTP and RTCP multiplexing was requested and
+ accepted by the server. Port ordering for "src_addr" follows the
+ rules for RTP/AVP/UDP.
+
+ Servers MUST support taking the passive role and MAY support taking
+ the active role. Servers with a public IP address take the passive
+ role, thus enabling clients behind NATs and firewalls a better chance
+ of successful connect to the server by actively connecting outwards.
+ Therefore, the clients are RECOMMENDED to take the active role.
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 281]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ After sending (receiving) a 2xx reply for a SETUP method for a non-
+ interleaved RTP/AVP/TCP media stream, the active party SHOULD
+ initiate the TCP connection as soon as possible. The client MUST NOT
+ send a PLAY request prior to the establishment of all the TCP
+ connections negotiated using SETUP for the session. In case the
+ server receives a PLAY request in a session that has not yet
+ established all the TCP connections, it MUST respond using the 464
+ (Data Transport Not Ready Yet) (Section 17.4.28) error code.
+
+ Once the PLAY request for a media resource transported over non-
+ interleaved RTP/AVP/TCP occurs, media begins to flow from server to
+ client over the RTP TCP connection, and RTCP packets flow
+ bidirectionally over the RTCP TCP connection. Unless RTP and RTCP
+ multiplexing has been negotiated; in which case, RTP and RTCP will
+ flow over a common TCP connection. As in the RTP/UDP case, client-
+ to-server traffic on an RTP-only TCP session is unspecified by this
+ memo. The packets that travel on these connections MUST be framed
+ using the protocol defined in [RFC4571], not by the framing defined
+ for interleaving RTP over the RTSP connection defined in Section 14.
+
+ A successful PAUSE request for media being transported over RTP/AVP/
+ TCP pauses the flow of packets over the connections, without closing
+ the connections. A successful TEARDOWN request signals that the TCP
+ connections for RTP and RTCP are to be closed by the RTSP client as
+ soon as possible.
+
+ Subsequent SETUP requests using a URI already set up in an RTSP
+ session using an RTP/AVP/TCP transport specification may be ambiguous
+ in the following way: does the client wish to open up a new TCP
+ connection for RTP or RTCP for the URI, or does the client wish to
+ continue using the existing TCP connections? The client SHOULD use
+ the "connection" parameter (defined in Section 18.54) on the
+ Transport line to make its intention clear (by setting "connection"
+ to "new" if new connections are needed, and by setting "connection"
+ to "existing" if the existing connections are to be used). After a
+ 2xx reply for a SETUP request for a new connection, parties should
+ close the preexisting connections, after waiting a suitable period
+ for any stray RTP or RTCP packets to arrive.
+
+ The usage of SRTP, i.e., either SAVP or SAVPF profiles, requires that
+ a security association be established. The default mechanism for
+ establishing that security association is to use MIKEY[RFC3830] with
+ RTSP as defined Appendix C.1.4.1.
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 282]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Below, a rewritten version of the example "Media on Demand"
+ (Appendix A.1) shows the use of RTP/AVP/TCP non-interleaved:
+
+ C->M: DESCRIBE rtsp://example.com/twister.3gp RTSP/2.0
+ CSeq: 1
+ User-Agent: PhonyClient/1.2
+
+ M->C: RTSP/2.0 200 OK
+ CSeq: 1
+ Server: PhonyServer/1.0
+ Date: Wed, 23 Jan 2013 15:36:52 +0000
+ Content-Type: application/sdp
+ Content-Length: 227
+ Content-Base: rtsp://example.com/twister.3gp/
+ Expires: Thu, 24 Jan 2013 15:36:52 +0000
+
+ v=0
+ o=- 2890844256 2890842807 IN IP4 198.51.100.34
+ s=RTSP Session
+ i=An Example of RTSP Session Usage
+ e=adm@example.com
+ c=IN IP4 0.0.0.0
+ a=control: *
+ a=range:npt=00:00:00-00:10:34.10
+ t=0 0
+ m=audio 0 RTP/AVP 0
+ a=control: trackID=1
+
+ C->M: SETUP rtsp://example.com/twister.3gp/trackID=1 RTSP/2.0
+ CSeq: 2
+ User-Agent: PhonyClient/1.2
+ Require: play.basic
+ Transport: RTP/AVP/TCP;unicast;dest_addr=":9"/":9";
+ setup=active;connection=new
+ Accept-Ranges: npt, smpte, clock
+
+ M->C: RTSP/2.0 200 OK
+ CSeq: 2
+ Server: PhonyServer/1.0
+ Transport: RTP/AVP/TCP;unicast;
+ dest_addr=":9"/":9";
+ src_addr="198.51.100.5:53478"/"198.51.100:54091";
+ setup=passive;connection=new;ssrc=93CB001E
+ Session: OccldOFFq23KwjYpAnBbUr
+ Expires: Thu, 24 Jan 2013 15:36:52 +0000
+ Date: Wed, 23 Jan 2013 15:36:52 +0000
+ Accept-Ranges: npt
+ Media-Properties: Random-Access=0.8, Immutable, Unlimited
+
+
+
+Schulzrinne, et al. Standards Track [Page 283]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ C->M: TCP Connection Establishment x2
+
+ C->M: PLAY rtsp://example.com/twister.3gp/ RTSP/2.0
+ CSeq: 4
+ User-Agent: PhonyClient/1.2
+ Range: npt=30-
+ Session: OccldOFFq23KwjYpAnBbUr
+
+ M->C: RTSP/2.0 200 OK
+ CSeq: 4
+ Server: PhonyServer/1.0
+ Date: Wed, 23 Jan 2013 15:36:54 +0000
+ Session: OccldOFFq23KwjYpAnBbUr
+ Range: npt=30-623.10
+ Seek-Style: First-Prior
+ RTP-Info: url="rtsp://example.com/twister.3gp/trackID=1"
+ ssrc=4F312DD8:seq=54321;rtptime=2876889
+
+C.3. Handling Media-Clock Time Jumps in the RTP Media Layer
+
+ RTSP allows media clients to control selected, non-contiguous
+ sections of media presentations, rendering those streams with an RTP
+ media layer [RFC3550]. Two cases occur, the first is when a new PLAY
+ request replaces an old ongoing request and the new request results
+ in a jump in the media. This should produce continuous media stream
+ at the RTP layer. A client may also immediately follow a completed
+ PLAY request with a new PLAY request. This will result in some gap
+ in the media layer. The below text will look into both cases.
+
+ A PLAY request that replaces an ongoing PLAY request allows the media
+ layer rendering the RTP stream to do so continuously without being
+ affected by jumps in media-clock time. The RTP timestamps for the
+ new media range are set so that they become continuous with the
+ previous media range in the previous request. The RTP sequence
+ number for the first packet in the new range will be the next
+ following the last packet in the previous range, i.e., monotonically
+ increasing. The goal is to allow the media-rendering layer to work
+ without interruption or reconfiguration across the jumps in media
+ clock. This should be possible in all cases of replaced PLAY
+ requests for media that has random access properties. In this case,
+ care is needed to align frames or similar media-dependent structures.
+
+ In cases where jumps in media-clock time are a result of RTSP
+ signaling operations arriving after a completed PLAY operation, the
+ request timing will result in that media becoming non-continuous.
+ The server becomes unable to send the media so that it arrives timely
+ and still carries timestamps to make the media stream continuous. In
+ these situations, the server will produce RTP streams where there are
+
+
+
+Schulzrinne, et al. Standards Track [Page 284]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ gaps in the RTP timeline for the media. If the media has frame
+ structure, aligning the timestamp for the next frame with the
+ previous structure reduces the burden to render this media. The gap
+ should represent the time the server hasn't been serving media, e.g.,
+ the time between the end of the media stream or a PAUSE request and
+ the new PLAY request. In these cases, the RTP sequence number would
+ normally be monotonically increasing across the gap.
+
+ For RTSP sessions with media that lacks random access properties,
+ such as live streams, any media-clock jump is commonly the result of
+ a correspondingly long pause of delivery. The RTP timestamp will
+ have increased in direct proportion to the duration of the paused
+ delivery. Note also that in this case the RTP sequence number should
+ be the next packet number. If not, the RTCP packet loss reporting
+ will indicate as loss all packets not received between the point of
+ pausing and later resuming. This may trigger congestion avoidance
+ mechanisms. An allowed exception from the above recommendation on
+ monotonically increasing RTP sequence number is live media streams,
+ likely being relayed. In this case, when the client resumes
+ delivery, it will get the media that is currently being delivered to
+ the server itself. For this type of basic delivery of live streams
+ to multiple users over unicast, individual rewriting of RTP sequence
+ numbers becomes quite a burden. For solutions that already cache
+ media or perform time shifting, the rewriting should impose only a
+ minor burden.
+
+ The goal when handling jumps in media-clock time is that the provided
+ stream is continuous without gaps in RTP timestamp or sequence
+ number. However, when delivery has been halted for some reason, the
+ RTP timestamp, when resuming, MUST represent the duration that the
+ delivery was halted. An RTP sequence number MUST generally be the
+ next number, i.e., monotonically increasing modulo 65536. For media
+ resources with the properties Time-Progressing and Time-Duration=0.0,
+ the server MAY create RTP media streams with RTP sequence number
+ jumps in them due to the client first halting delivery and later
+ resuming it (PAUSE and then later PLAY). However, servers utilizing
+ this exception must take into consideration the resulting RTCP
+ receiver reports that likely contain loss reports for all the packets
+ that were a part of the discontinuity. A client cannot rely on the
+ fact that a server will align when resuming play, even if it is
+ RECOMMENDED. The RTP-Info header will provide information on how the
+ server acts in each case.
+
+ One cannot assume that the RTSP client can communicate with the
+ RTP media agent, as the two may be independent processes. If the
+ RTP timestamp shows the same gap as the NPT, the media agent will
+ assume that there is a pause in the presentation. If the jump in
+ NPT is large enough, the RTP timestamp may roll over and the media
+
+
+
+Schulzrinne, et al. Standards Track [Page 285]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ agent may believe later packets to be duplicates of packets just
+ played out. Having the RTP timestamp jump will also affect the
+ RTCP measurements based on this.
+
+ As an example, assume an RTP timestamp frequency of 8000 Hz, a
+ packetization interval of 100 ms, and an initial sequence number and
+ timestamp of zero.
+
+ C->S: PLAY rtsp://example.com/fizzle RTSP/2.0
+ CSeq: 4
+ Session: ymIqLXufHkMHGdtENdblWK
+ Range: npt=10-15
+ User-Agent: PhonyClient/1.2
+
+ S->C: RTSP/2.0 200 OK
+ CSeq: 4
+ Session: ymIqLXufHkMHGdtENdblWK
+ Range: npt=10-15
+ RTP-Info: url="rtsp://example.com/fizzle/audiotrack"
+ ssrc=0D12F123:seq=0;rtptime=0
+
+ The ensuing RTP data stream is depicted below:
+
+
+ S -> C: RTP packet - seq = 0, rtptime = 0, NPT time = 10s
+ S -> C: RTP packet - seq = 1, rtptime = 800, NPT time = 10.1s
+ . . .
+ S -> C: RTP packet - seq = 49, rtptime = 39200, NPT time = 14.9s
+
+
+ Upon the completion of the requested delivery, the server sends a
+ PLAY_NOTIFY.
+
+ S->C: PLAY_NOTIFY rtsp://example.com/fizzle RTSP/2.0
+ CSeq: 5
+ Notify-Reason: end-of-stream
+ Request-Status: cseq=4 status=200 reason="OK"
+ Range: npt=-15
+ RTP-Info:url="rtsp://example.com/fizzle/audiotrack"
+ ssrc=0D12F123:seq=49;rtptime=39200
+ Session: ymIqLXufHkMHGdtENdblWK
+
+ C->S: RTSP/2.0 200 OK
+ CSeq: 5
+ User-Agent: PhonyClient/1.2
+
+ Upon the completion of the play range, the client follows up with a
+ request to PLAY from a new NPT.
+
+
+
+Schulzrinne, et al. Standards Track [Page 286]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ C->S: PLAY rtsp://example.com/fizzle RTSP/2.0
+ CSeq: 6
+ Session: ymIqLXufHkMHGdtENdblWK
+ Range: npt=18-20
+ User-Agent: PhonyClient/1.2
+
+ S->C: RTSP/2.0 200 OK
+ CSeq: 6
+ Session: ymIqLXufHkMHGdtENdblWK
+ Range: npt=18-20
+ RTP-Info: url="rtsp://example.com/fizzle/audiotrack"
+ ssrc=0D12F123:seq=50;rtptime=40100
+
+ The ensuing RTP data stream is depicted below:
+
+ S->C: RTP packet - seq = 50, rtptime = 40100, NPT time = 18s
+ S->C: RTP packet - seq = 51, rtptime = 40900, NPT time = 18.1s
+ . . .
+ S->C: RTP packet - seq = 69, rtptime = 55300, NPT time = 19.9s
+
+ In this example, first, NPT 10 through 15 are played, then the client
+ requests the server to skip ahead and play NPT 18 through 20. The
+ first segment is presented as RTP packets with sequence numbers 0
+ through 49 and timestamps 0 through 39,200. The second segment
+ consists of RTP packets with sequence numbers 50 through 69, with
+ timestamps 40,100 through 55,200. While there is a gap in the NPT,
+ there is no gap in the sequence-number space of the RTP data stream.
+
+ The RTP timestamp gap is present in the above example due to the time
+ it takes to perform the second play request, in this case, 12.5 ms
+ (100/8000).
+
+C.4. Handling RTP Timestamps after PAUSE
+
+ During a PAUSE/PLAY interaction in an RTSP session, the duration of
+ time for which the RTP transmission was halted MUST be reflected in
+ the RTP timestamp of each RTP stream. The duration can be calculated
+ for each RTP stream as the time elapsed from when the last RTP packet
+ was sent before the PAUSE request was received and when the first RTP
+ packet was sent after the subsequent PLAY request was received. The
+ duration includes all latency incurred and processing time required
+ to complete the request.
+
+ RFC 3550 [RFC3550] states that: "the RTP timestamp for each unit
+ [packet] would be related to the wallclock time at which the unit
+ becomes current on the virtual presentation timeline".
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 287]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ In order to satisfy the requirements of [RFC3550], the RTP
+ timestamp space needs to increase continuously with real time.
+ While this is not optimal for stored media, it is required for RTP
+ and RTCP to function as intended. Using a continuous RTP
+ timestamp space allows the same timestamp model for both stored
+ and live media and allows better opportunity to integrate both
+ types of media under a single control.
+
+ As an example, assume a clock frequency of 8000 Hz, a packetization
+ interval of 100 ms, and an initial sequence number and timestamp of
+ zero.
+
+ C->S: PLAY rtsp://example.com/fizzle RTSP/2.0
+ CSeq: 4
+ Session: ymIqLXufHkMHGdtENdblWK
+ Range: npt=10-15
+
+ User-Agent: PhonyClient/1.2
+
+ S->C: RTSP/2.0 200 OK
+ CSeq: 4
+ Session: ymIqLXufHkMHGdtENdblWK
+ Range: npt=10-15
+ RTP-Info: url="rtsp://example.com/fizzle/audiotrack"
+ ssrc=0D12F123:seq=0;rtptime=0
+
+ The ensuing RTP data stream is depicted below:
+
+ S -> C: RTP packet - seq = 0, rtptime = 0, NPT time = 10s
+ S -> C: RTP packet - seq = 1, rtptime = 800, NPT time = 10.1s
+ S -> C: RTP packet - seq = 2, rtptime = 1600, NPT time = 10.2s
+ S -> C: RTP packet - seq = 3, rtptime = 2400, NPT time = 10.3s
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 288]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ The client then sends a PAUSE request:
+
+ C->S: PAUSE rtsp://example.com/fizzle RTSP/2.0
+ CSeq: 5
+ Session: ymIqLXufHkMHGdtENdblWK
+ User-Agent: PhonyClient/1.2
+
+ S->C: RTSP/2.0 200 OK
+ CSeq: 5
+ Session: ymIqLXufHkMHGdtENdblWK
+ Range: npt=10.4-15
+
+ 20 seconds elapse and then the client sends a PLAY request. In
+ addition, the server requires 15 ms to process the request:
+
+ C->S: PLAY rtsp://example.com/fizzle RTSP/2.0
+ CSeq: 6
+ Session: ymIqLXufHkMHGdtENdblWK
+ User-Agent: PhonyClient/1.2
+
+ S->C: RTSP/2.0 200 OK
+ CSeq: 6
+ Session: ymIqLXufHkMHGdtENdblWK
+ Range: npt=10.4-15
+ RTP-Info: url="rtsp://example.com/fizzle/audiotrack"
+ ssrc=0D12F123:seq=4;rtptime=164400
+
+ The ensuing RTP data stream is depicted below:
+
+ S -> C: RTP packet - seq = 4, rtptime = 164400, NPT time = 10.4s
+ S -> C: RTP packet - seq = 5, rtptime = 165200, NPT time = 10.5s
+ S -> C: RTP packet - seq = 6, rtptime = 166000, NPT time = 10.6s
+
+ First, NPT 10 through 10.3 is played, then a PAUSE is received by the
+ server. After 20 seconds, a PLAY is received by the server that
+ takes 15 ms to process. The duration of time for which the session
+ was paused is reflected in the RTP timestamp of the RTP packets sent
+ after this PLAY request.
+
+ A client can use the RTSP Range header and RTP-Info header to map NPT
+ time of a presentation with the RTP timestamp.
+
+ Note: in RFC 2326 [RFC2326], this matter was not clearly defined and
+ was misunderstood commonly. However, for RTSP 2.0, it is expected
+ that this will be handled correctly and no exception handling will be
+ required.
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 289]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Note further: it may be required to reset some of the state to ensure
+ the correct media decoding and the usual jitter-buffer handling when
+ issuing a PLAY request.
+
+C.5. RTSP/RTP Integration
+
+ For certain data types, tight integration between the RTSP layer and
+ the RTP layer will be necessary. This by no means precludes the
+ above restrictions. Combined RTSP/RTP media clients should use the
+ RTP-Info field to determine whether incoming RTP packets were sent
+ before or after a seek or before or after a PAUSE.
+
+C.6. Scaling with RTP
+
+ For scaling (see Section 18.46), RTP timestamps should correspond to
+ the rendering timing. For example, when playing video recorded at 30
+ frames per second at a scale of two and speed (Section 18.50) of one,
+ the server would drop every second frame to maintain and deliver
+ video packets with the normal timestamp spacing of 3,000 per frame,
+ but NPT would increase by 1/15 second for each video frame.
+
+ Note: the above scaling puts requirements on the media codec or a
+ media stream to support it. For example, motion JPEG or other
+ non-predictive video coding can easier handle the above example.
+
+C.7. Maintaining NPT Synchronization with RTP Timestamps
+
+ The client can maintain a correct display of NPT by noting the RTP
+ timestamp value of the first packet arriving after repositioning.
+ The sequence parameter of the RTP-Info (Section 18.45) header
+ provides the first sequence number of the next segment.
+
+C.8. Continuous Audio
+
+ For continuous audio, the server SHOULD set the RTP marker bit at the
+ beginning of serving a new PLAY request or at jumps in timeline.
+ This allows the client to perform playout delay adaptation.
+
+C.9. Multiple Sources in an RTP Session
+
+ Note that more than one SSRC MAY be sent in the media stream. If it
+ happens, all sources are expected to be rendered simultaneously.
+
+C.10. Usage of SSRCs and the RTCP BYE Message during an RTSP Session
+
+ The RTCP BYE message indicates the end of use of a given SSRC. If
+ all sources leave an RTP session, it can, in most cases, be assumed
+ to have ended. Therefore, a client or server MUST NOT send an RTCP
+
+
+
+Schulzrinne, et al. Standards Track [Page 290]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ BYE message until it has finished using a SSRC. A server SHOULD keep
+ using an SSRC until the RTP session is terminated. Prolonging the
+ use of a SSRC allows the established synchronization context
+ associated with that SSRC to be used to synchronize subsequent PLAY
+ requests even if the PLAY response is late.
+
+ An SSRC collision with the SSRC that transmits media does also have
+ consequences, as it will normally force the media sender to change
+ its SSRC in accordance with the RTP specification [RFC3550].
+ However, an RTSP server may wait and see if the client changes and
+ thus resolve the conflict to minimize the impact. As media sender,
+ SSRC change will result in a loss of synchronization context and
+ require any receiver to wait for RTCP sender reports for all media
+ requiring synchronization before being able to play out synchronized.
+ Due to these reasons, a client joining a session should take care not
+ to select the same SSRC(s) as the server indicates in the ssrc
+ Transport header parameter. Any SSRC signaled in the Transport
+ header MUST be avoided. A client detecting a collision prior to
+ sending any RTP or RTCP messages SHALL also select a new SSRC.
+
+C.11. Future Additions
+
+ It is the intention that any future protocol or profile regarding
+ media delivery and lower transport should be easy to add to RTSP.
+ This section provides the necessary steps that need to be met.
+
+ The following things need to be considered when adding a new protocol
+ or profile for use with RTSP:
+
+ o The protocol or profile needs to define a name tag representing
+ it. This tag is required to be an ABNF "token" to be possible to
+ use in the Transport header specification.
+
+ o The useful combinations of protocol, profiles, and lower-layer
+ transport for this extension need to be defined. For each
+ combination, declare the necessary parameters to use in the
+ Transport header.
+
+ o For new media protocols, the interaction with RTSP needs to be
+ addressed. One important factor will be the media
+ synchronization. It may be necessary to have new headers similar
+ to RTP info to carry this information.
+
+ o Discussion needs to occur regarding congestion control for media,
+ especially if transport without built-in congestion control is
+ used.
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 291]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ See the IANA Considerations section (Section 22) for information on
+ how to register new attributes.
+
+Appendix D. Use of SDP for RTSP Session Descriptions
+
+ The Session Description Protocol (SDP, [RFC4566]) may be used to
+ describe streams or presentations in RTSP. This description is
+ typically returned in reply to a DESCRIBE request on a URI from a
+ server to a client or received via HTTP from a server to a client.
+
+ This appendix describes how an SDP file determines the operation of
+ an RTSP session. Thus, it is worth pointing out that the
+ interpretation of the SDP is done in the context of the SDP receiver,
+ which is the one being configured. This is the same as in SAP
+ [RFC2974]; this differs from SDP Offer/Answer [RFC3264] where each
+ SDP is interpreted in the context of the agent providing it.
+
+ SDP as is provides no mechanism by which a client can distinguish,
+ without human guidance, between several media streams to be rendered
+ simultaneously and a set of alternatives (e.g., two audio streams
+ spoken in different languages). The SDP extension found in "The
+ Session Description Protocol (SDP) Grouping Framework" [RFC5888]
+ provides such functionality to some degree. Appendix D.4 describes
+ the usage of SDP media line grouping for RTSP.
+
+D.1. Definitions
+
+ The terms "session-level", "media-level", and other key/attribute
+ names and values used in this appendix are to be used as defined in
+ SDP [RFC4566]:
+
+D.1.1. Control URI
+
+ The "a=control" attribute is used to convey the control URI. This
+ attribute is used both for the session and media descriptions. If
+ used for individual media, it indicates the URI to be used for
+ controlling that particular media stream. If found at the session
+ level, the attribute indicates the URI for aggregate control
+ (presentation URI). The session-level URI MUST be different from any
+ media-level URI. The presence of a session-level control attribute
+ MUST be interpreted as support for aggregated control. The control
+ attribute MUST be present on the media level unless the presentation
+ only contains a single media stream; in which case, the attribute MAY
+ be present on the session level only and then also apply to that
+ single media stream.
+
+ ABNF for the attribute is defined in Section 20.3.
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 292]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Example:
+
+ a=control:rtsp://example.com/foo
+
+ This attribute MAY contain either relative or absolute URIs,
+ following the rules and conventions set out in RFC 3986 [RFC3986].
+ Implementations MUST look for a base URI in the following order:
+
+ 1. the RTSP Content-Base field;
+
+ 2. the RTSP Content-Location field;
+
+ 3. the RTSP Request-URI.
+
+ If this attribute contains only an asterisk (*), then the URI MUST be
+ treated as if it were an empty embedded URI; thus, it will inherit
+ the entire base URI.
+
+ Note: RFC 2326 was very unclear on the processing of relative URIs
+ and several RTSP 1.0 implementations at the point of publishing
+ this document did not perform RFC 3986 processing to determine the
+ resulting URI; instead, simple concatenation is common. To avoid
+ this issue completely, it is recommended to use absolute URIs in
+ the SDP.
+
+ The URI handling for SDPs from container files needs special
+ consideration. For example, let's assume that a container file has
+ the URI: "rtsp://example.com/container.mp4". Let's further assume
+ this URI is the base URI and that there is an absolute media-level
+ URI: "rtsp://example.com/container.mp4/trackID=2". A relative media-
+ level URI that resolves in accordance with RFC 3986 [RFC3986] to the
+ above given media URI is "container.mp4/trackID=2". It is usually
+ not desirable to need to include or modify the SDP stored within the
+ container file with the server local name of the container file. To
+ avoid this, one can modify the base URI used to include a trailing
+ slash, e.g., "rtsp://example.com/container.mp4/". In this case, the
+ relative URI for the media will only need to be "trackID=2".
+ However, this will also mean that using "*" in the SDP will result in
+ the control URI including the trailing slash, i.e.,
+ "rtsp://example.com/container.mp4/".
+
+ Note: the usage of TrackID in the above is not a standardized
+ form, but one example out of several similar strings such as
+ TrackID, Track_ID, StreamID that is used by different server
+ vendors to indicate a particular piece of media inside a container
+ file.
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 293]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+D.1.2. Media Streams
+
+ The "m=" field is used to enumerate the streams. It is expected that
+ all the specified streams will be rendered with appropriate
+ synchronization. If the session is over multicast, the port number
+ indicated SHOULD be used for reception. The client MAY try to
+ override the destination port, through the Transport header. The
+ servers MAY allow this: the response will indicate whether or not
+ this is allowed. If the session is unicast, the port numbers are the
+ ones RECOMMENDED by the server to the client, about which receiver
+ ports to use; the client MUST still include its receiver ports in its
+ SETUP request. The client MAY ignore this recommendation. If the
+ server has no preference, it SHOULD set the port number value to
+ zero.
+
+ The "m=" lines contain information about which transport protocol,
+ profile, and possibly lower-layer are to be used for the media
+ stream. The combination of transport, profile, and lower layer, like
+ RTP/AVP/UDP, needs to be defined for how to be used with RTSP. The
+ currently defined combinations are discussed in Appendix C; further
+ combinations MAY be specified.
+
+ Example:
+
+ m=audio 0 RTP/AVP 31
+
+D.1.3. Payload Type(s)
+
+ The payload type or types are specified in the "m=" line. In case
+ the payload type is a static payload type from RFC 3551 [RFC3551], no
+ other information may be required. In case it is a dynamic payload
+ type, the media attribute "rtpmap" is used to specify what the media
+ is. The "encoding name" within the "rtpmap" attribute may be one of
+ those specified in [RFC4856], a media type registered with IANA
+ according to [RFC4855], or an experimental encoding as specified in
+ SDP [RFC4566]). Codec-specific parameters are not specified in this
+ field, but rather in the "fmtp" attribute described below.
+
+ The selection of the RTP payload type numbers used may be required to
+ consider RTP and RTCP Multiplexing [RFC5761], if that is to be
+ supported by the server.
+
+D.1.4. Format-Specific Parameters
+
+ Format-specific parameters are conveyed using the "fmtp" media
+ attribute. The syntax of the "fmtp" attribute is specific to the
+ encoding(s) to which the attribute refers. Note that some of the
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 294]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ format-specific parameters may be specified outside of the "fmtp"
+ parameters, for example, like the "ptime" attribute for most audio
+ encodings.
+
+D.1.5. Directionality of Media Stream
+
+ The SDP attributes "a=sendrecv", "a=recvonly", and "a=sendonly"
+ provide instructions about the direction the media streams flow
+ within a session. When using RTSP, the SDP can be delivered to a
+ client using either RTSP DESCRIBE or a number of RTSP external
+ methods, like HTTP, FTP, and email. Based on this, the SDP applies
+ to how the RTSP client will see the complete session. Thus, media
+ streams delivered from the RTSP server to the client would be given
+ the "a=recvonly" attribute.
+
+ "a=recvonly" in an SDP provided to the RTSP client indicates that
+ media delivery will only occur in the direction from the RTSP server
+ to the client. SDP provided to the RTSP client that lacks any of the
+ directionality attributes ("a=recvonly", "a=sendonly", "a=sendrecv")
+ would be interpreted as having "a=sendrecv". At the time of writing,
+ there exists no RTSP mode suitable for media traffic in the direction
+ from the RTSP client to the server. Thus, all RTSP SDP SHOULD have
+ an "a=recvonly" attribute when using the PLAY mode defined in this
+ document. If future modes are defined for media in the client-to-
+ server direction, then usage of "a=sendonly" or "a=sendrecv" may
+ become suitable to indicate intended media directions.
+
+D.1.6. Range of Presentation
+
+ The "a=range" attribute defines the total time range of the stored
+ session or an individual media. Live sessions that are not seekable
+ can be indicated as specified below; whereas the length of live
+ sessions can be deduced from the "t=" and "r=" SDP parameters.
+
+ The attribute is both a session- and a media-level attribute. For
+ presentations that contain media streams of the same duration, the
+ range attribute SHOULD only be used at the session level. In case of
+ different lengths, the range attribute MUST be given at media level
+ for all media and SHOULD NOT be given at the session level. If the
+ attribute is present at both media level and session level, the
+ media-level values MUST be used.
+
+ Note: usually one will specify the same length for all media, even if
+ there isn't media available for the full duration on all media.
+ However, that requires that the server accept PLAY requests within
+ that range.
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 295]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Servers MUST take care to provide RTSP Range (see Section 18.40)
+ values that are consistent with what is presented in the SDP for the
+ content. There is no reason for non dynamic content, like media
+ clips provided on demand to have inconsistent values. Inconsistent
+ values between the SDP and the actual values for the content handled
+ by the server is likely to generate some failure, like 457 "Invalid
+ Range", in case the client uses PLAY requests with a Range header.
+ In case the content is dynamic in length and it is infeasible to
+ provide a correct value in the SDP, the server is recommended to
+ describe this as content that is not seekable (see below). The
+ server MAY override that property in the response to a PLAY request
+ using the correct values in the Range header.
+
+ The unit is specified first, followed by the value range. The units
+ and their values are as defined in Section 4.4.1, Section 4.4.2, and
+ Section 4.4.3 and MAY be extended with further formats. Any open-
+ ended range (start-), i.e., without stop range, is of unspecified
+ duration and MUST be considered as content that is not seekable
+ unless this property is overridden. Multiple instances carrying
+ different clock formats MAY be included at either session or media
+ level.
+
+ ABNF for the attribute is defined in Section 20.3.
+
+ Examples:
+
+ a=range:npt=0-34.4368
+ a=range:clock=19971113T211503Z-19971113T220300Z
+ Non-seekable stream of unknown duration:
+ a=range:npt=0-
+
+D.1.7. Time of Availability
+
+ The "t=" field defines when the SDP is valid. For on-demand content,
+ the server SHOULD indicate a stop time value for which it guarantees
+ the description to be valid and a start time that is equal to or
+ before the time at which the DESCRIBE request was received. It MAY
+ also indicate start and stop times of 0, meaning that the session is
+ always available.
+
+ For sessions that are of live type, i.e., specific start time,
+ unknown stop time, likely not seekable, the "t=" and "r=" field
+ SHOULD be used to indicate the start time of the event. The stop
+ time SHOULD be given so that the live event will have ended at that
+ time, while still not being unnecessary far into the future.
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 296]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+D.1.8. Connection Information
+
+ In SDP used with RTSP, the "c=" field contains the destination
+ address for the media stream. If a multicast address is specified,
+ the client SHOULD use this address in any SETUP request as
+ destination address, including any additional parameters, such as
+ TTL. For on-demand unicast streams and some multicast streams, the
+ destination address MAY be specified by the client via the SETUP
+ request, thus overriding any specified address. To identify streams
+ without a fixed destination address, where the client is required to
+ specify a destination address, the "c=" field SHOULD be set to a null
+ value. For addresses of type "IP4", this value MUST be "0.0.0.0";
+ and for type "IP6", this value MUST be "0:0:0:0:0:0:0:0" (can also be
+ written as "::"), i.e., the unspecified address according to RFC 4291
+ [RFC4291].
+
+D.1.9. Message Body Tag
+
+ The optional "a=mtag" attribute identifies a version of the session
+ description. It is opaque to the client. SETUP requests may include
+ this identifier in the If-Match field (see Section 18.24) to allow
+ session establishment only if this attribute value still corresponds
+ to that of the current description. The attribute value is opaque
+ and may contain any character allowed within SDP attribute values.
+
+ ABNF for the attribute is defined in Section 20.3.
+
+ Example:
+
+ a=mtag:"158bb3e7c7fd62ce67f12b533f06b83a"
+
+ One could argue that the "o=" field provides identical
+ functionality. However, it does so in a manner that would put
+ constraints on servers that need to support multiple session
+ description types other than SDP for the same piece of media
+ content.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 297]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+D.2. Aggregate Control Not Available
+
+ If a presentation does not support aggregate control, no session-
+ level "a=control" attribute is specified. For an SDP with multiple
+ media sections specified, each section will have its own control URI
+ specified via the "a=control" attribute.
+
+ Example:
+
+ v=0
+ o=- 2890844256 2890842807 IN IP4 192.0.2.56
+ s=I came from a web page
+ e=adm@example.com
+ c=IN IP4 0.0.0.0
+ t=0 0
+ m=video 8002 RTP/AVP 31
+ a=control:rtsp://audio.example.com/movie.aud
+ m=audio 8004 RTP/AVP 3
+ a=control:rtsp://video.example.com/movie.vid
+
+ Note that the position of the control URI in the description implies
+ that the client establishes separate RTSP control sessions to the
+ servers audio.example.com and video.example.com.
+
+ It is recommended that an SDP file contain the complete media-
+ initialization information even if it is delivered to the media
+ client through non-RTSP means. This is necessary as there is no
+ mechanism to indicate that the client should request more detailed
+ media stream information via DESCRIBE.
+
+D.3. Aggregate Control Available
+
+ In this scenario, the server has multiple streams that can be
+ controlled as a whole. In this case, there are both a media-level
+ "a=control" attribute, which is used to specify the stream URIs, and
+ a session-level "a=control" attribute, which is used as the Request-
+ URI for aggregate control. If the media-level URI is relative, it is
+ resolved to absolute URIs according to Appendix D.1.1 above.
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 298]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Example:
+
+ C->M: DESCRIBE rtsp://example.com/movie RTSP/2.0
+ CSeq: 1
+ User-Agent: PhonyClient/1.2
+
+ M->C: RTSP/2.0 200 OK
+ CSeq: 1
+ Date: Wed, 23 Jan 2013 15:36:52 +0000
+ Expires: Wed, 23 Jan 2013 16:36:52 +0000
+ Content-Type: application/sdp
+ Content-Base: rtsp://example.com/movie/
+ Content-Length: 227
+
+ v=0
+ o=- 2890844256 2890842807 IN IP4 192.0.2.211
+ s=I contain
+ i=<more info>
+ e=adm@example.com
+ c=IN IP4 0.0.0.0
+ a=control:*
+ t=0 0
+ m=video 8002 RTP/AVP 31
+ a=control:trackID=1
+ m=audio 8004 RTP/AVP 3
+ a=control:trackID=2
+
+ In this example, the client is recommended to establish a single RTSP
+ session to the server, and it uses the URIs rtsp://example.com/movie/
+ trackID=1 and rtsp://example.com/movie/trackID=2 to set up the video
+ and audio streams, respectively. The URI rtsp://example.com/movie/,
+ which is resolved from the "*", controls the whole presentation
+ (movie).
+
+ A client is not required to issue SETUP requests for all streams
+ within an aggregate object. Servers should allow the client to ask
+ for only a subset of the streams.
+
+D.4. Grouping of Media Lines in SDP
+
+ For some types of media, it is desirable to express a relationship
+ between various media components, for instance, for lip
+ synchronization or Scalable Video Codec (SVC) [RFC5583]. This
+ relationship is expressed on the SDP level by grouping of media
+ lines, as described in [RFC5888], and can be exposed to RTSP.
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 299]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ For RTSP, it is mainly important to know how to handle grouped media
+ received by means of SDP, i.e., if the media are under aggregate
+ control (see Appendix D.3) or if aggregate control is not available
+ (see Appendix D.2).
+
+ It is RECOMMENDED that grouped media are handled by aggregate
+ control, to give the client the ability to control either the whole
+ presentation or single media.
+
+D.5. RTSP External SDP Delivery
+
+ There are some considerations that need to be made when the session
+ description is delivered to the client outside of RTSP, for example
+ via HTTP or email.
+
+ First of all, the SDP needs to contain absolute URIs, since relative
+ will, in most cases, not work as the delivery will not correctly
+ forward the base URI.
+
+ The writing of the SDP session availability information, i.e., "t="
+ and "r=", needs to be carefully considered. When the SDP is fetched
+ by the DESCRIBE method, the probability that it is valid is very
+ high. However, the same is much less certain for SDPs distributed
+ using other methods. Therefore, the publisher of the SDP should take
+ care to follow the recommendations about availability in the SDP
+ specification [RFC4566] in Section 4.2.
+
+Appendix E. RTSP Use Cases
+
+ This appendix describes the most important and considered use cases
+ for RTSP. They are listed in descending order of importance in
+ regard to ensuring that all necessary functionality is present. This
+ specification only fully supports usage of the two first. Also, in
+ these first two cases, there are special cases or exceptions that are
+ not supported without extensions, e.g., the redirection of media
+ delivery to an address other than the controlling agent's (client's).
+
+E.1. On-Demand Playback of Stored Content
+
+ An RTSP-capable server stores content suitable for being streamed to
+ a client. A client desiring playback of any of the stored content
+ uses RTSP to set up the media transport required to deliver the
+ desired content. RTSP is then used to initiate, halt, and manipulate
+ the actual transmission (playout) of the content. RTSP is also
+ required to provide the necessary description and synchronization
+ information for the content.
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 300]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ The above high-level description can be broken down into a number of
+ functions of which RTSP needs to be capable.
+
+ Presentation Description: Provide initialization information about
+ the presentation (content); for example, which media codecs are
+ needed for the content. Other information that is important
+ includes the number of media streams the presentation contains,
+ the transport protocols used for the media streams, and
+ identifiers for these media streams. This information is
+ required before setup of the content is possible and to
+ determine if the client is even capable of using the content.
+
+ This information need not be sent using RTSP; other external
+ protocols can be used to transmit the transport presentation
+ descriptions. Two good examples are the use of HTTP [RFC7230]
+ or email to fetch or receive presentation descriptions like SDP
+ [RFC4566]
+
+ Setup: Set up some or all of the media streams in a presentation.
+ The setup itself consists of selecting the protocol for media
+ transport and the necessary parameters for the protocol, like
+ addresses and ports.
+
+ Control of Transmission: After the necessary media streams have been
+ established, the client can request the server to start
+ transmitting the content. The client must be allowed to start
+ or stop the transmission of the content at arbitrary times.
+ The client must also be able to start the transmission at any
+ point in the timeline of the presentation.
+
+ Synchronization: For media-transport protocols like RTP [RFC3550],
+ it might be beneficial to carry synchronization information
+ within RTSP. This may be due to either the lack of inter-media
+ synchronization within the protocol itself or the potential
+ delay before the synchronization is established (which is the
+ case for RTP when using RTCP).
+
+ Termination: Terminate the established contexts.
+
+ For this use case, there are a number of assumptions about how it
+ works. These are:
+
+ On-Demand content: The content is stored at the server and can be
+ accessed at any time during a time period when it is intended
+ to be available.
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 301]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Independent sessions: A server is capable of serving a number of
+ clients simultaneously, including from the same piece of
+ content at different points in that presentations timeline.
+
+ Unicast Transport: Content for each individual client is transmitted
+ to them using unicast traffic.
+
+ It is also possible to redirect the media traffic to a different
+ destination than that of the agent controlling the traffic. However,
+ allowing this without appropriate mechanisms for checking that the
+ destination approves of this allows for Distributed DoS (DDoS).
+
+E.2. Unicast Distribution of Live Content
+
+ This use case is similar to the above on-demand content case (see
+ Appendix E.1), the difference is the nature of the content itself.
+ Live content is continuously distributed as it becomes available from
+ a source; i.e., the main difference from on-demand is that one starts
+ distributing content before the end of it has become available to the
+ server.
+
+ In many cases, the consumer of live content is only interested in
+ consuming what actually happens "now"; i.e., very similar to
+ broadcast TV. However, in this case, it is assumed that there exists
+ no broadcast or multicast channel to the users, and instead the
+ server functions as a distribution node, sending the same content to
+ multiple receivers, using unicast traffic between server and client.
+ This unicast traffic and the transport parameters are individually
+ negotiated for each receiving client.
+
+ Another aspect of live content is that it often has a very limited
+ time of availability, as it is only available for the duration of the
+ event the content covers. An example of such live content could be a
+ music concert that lasts two hours and starts at a predetermined
+ time. Thus, there is a need to announce when and for how long the
+ live content is available.
+
+ In some cases, the server providing live content may be saving some
+ or all of the content to allow clients to pause the stream and resume
+ it from the paused point, or to "rewind" and play continuously from a
+ point earlier than the live point. Hence, this use case does not
+ necessarily exclude playing from other than the live point of the
+ stream, playing with scales other than 1.0, etc.
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 302]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+E.3. On-Demand Playback Using Multicast
+
+ It is possible to use RTSP to request that media be delivered to a
+ multicast group. The entity setting up the session (the controller)
+ will then control when and what media is delivered to the group.
+ This use case has some potential for DoS attacks by flooding a
+ multicast group. Therefore, a mechanism is needed to indicate that
+ the group actually accepts the traffic from the RTSP server.
+
+ An open issue in this use case is how one ensures that all receivers
+ listening to the multicast or broadcast receives the session
+ presentation configuring the receivers. This specification has to
+ rely on an external solution to solve this issue.
+
+E.4. Inviting an RTSP Server into a Conference
+
+ If one has an established conference or group session, it is possible
+ to have an RTSP server distribute media to the whole group.
+ Transmission to the group is simplest when controlled by a single
+ participant or leader of the conference. Shared control might be
+ possible, but would require further investigation and possibly
+ extensions.
+
+ This use case assumes that there exists either a multicast or a
+ conference focus that redistributes media to all participants.
+
+ This use case is intended to be able to handle the following
+ scenario: a conference leader or participant (hereafter called the
+ "controller") has some pre-stored content on an RTSP server that he
+ wants to share with the group. The controller sets up an RTSP
+ session at the streaming server for this content and retrieves the
+ session description for the content. The destination for the media
+ content is set to the shared multicast group or conference focus.
+ When desired by the controller, he/she can start and stop the
+ transmission of the media to the conference group.
+
+ There are several issues with this use case that are not solved by
+ this core specification for RTSP:
+
+ DoS: To avoid an RTSP server from being an unknowing participant in
+ a DoS attack, the server needs to be able to verify the
+ destination's acceptance of the media. Such a mechanism to
+ verify the approval of received media does not yet exist;
+ instead, only policies can be used, which can be made to work
+ in controlled environments.
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 303]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ Distributing the presentation description to all participants in the
+ group:
+ To enable a media receiver to correctly decode the content,
+ the media configuration information needs to be distributed
+ reliably to all participants. This will most likely require
+ support from an external protocol.
+
+ Passing control of the session: If it is desired to pass control
+ of the RTSP session between the participants, some support
+ will be required by an external protocol to exchange state
+ information and possibly floor control of who is controlling
+ the RTSP session.
+
+E.5. Live Content Using Multicast
+
+ This use case in its simplest form does not require any use of RTSP
+ at all; this is what multicast conferences being announced with SAP
+ [RFC2974] and SDP are intended to handle. However, in use cases
+ where more advanced features like access control to the multicast
+ session are desired, RTSP could be used for session establishment.
+
+ A client desiring to join a live multicasted media session with
+ cryptographic (encryption) access control could use RTSP in the
+ following way. The source of the session announces the session and
+ gives all interested an RTSP URI. The client connects to the server
+ and requests the presentation description, allowing configuration for
+ reception of the media. In this step, it is possible for the client
+ to use secured transport and any desired level of authentication; for
+ example, for billing or access control. An RTSP link also allows for
+ load balancing between multiple servers.
+
+ If these were the only goals, they could be achieved by simply using
+ HTTP. However, for cases where the sender likes to keep track of
+ each individual receiver of a session, and possibly use the session
+ as a side channel for distributing key-updates or other information
+ on a per-receiver basis, and the full set of receivers is not known
+ prior to the session start, the state establishment that RTSP
+ provides can be beneficial. In this case, a client would establish
+ an RTSP session for this multicast group with the RTSP server. The
+ RTSP server will not transmit any media, but instead will point to
+ the multicast group. The client and server will be able to keep the
+ session alive for as long as the receiver participates in the session
+ thus enabling, for example, the server to push updates to the client.
+
+ This use case will most likely not be able to be implemented without
+ some extensions to the server-to-client push mechanism. Here the
+ PLAY_NOTIFY method (see Section 13.5) with a suitable extension could
+ provide clear benefits.
+
+
+
+Schulzrinne, et al. Standards Track [Page 304]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+Appendix F. Text Format for Parameters
+
+ A resource of type "text/parameters" consists of either 1) a list of
+ parameters (for a query) or 2) a list of parameters and associated
+ values (for a response or setting of the parameter). Each entry of
+ the list is a single line of text. Parameters are separated from
+ values by a colon. The parameter name MUST only use US-ASCII visible
+ characters while the values are UTF-8 text strings. The media type
+ registration form is in Section 22.16.
+
+ There is a potential interoperability issue for this format. It was
+ named in RFC 2326 but never defined, even if used in examples that
+ hint at the syntax. This format matches the purpose and its syntax
+ supports the examples provided. However, it goes further by allowing
+ UTF-8 in the value part; thus, usage of UTF-8 strings may not be
+ supported. However, as individual parameters are not defined, the
+ implementing application needs to have out-of-band agreement or using
+ feature tag anyway to determine if the endpoint supports the
+ parameters.
+
+ The ABNF [RFC5234] grammar for "text/parameters" content is:
+
+ file = *((parameter / parameter-value) CRLF)
+ parameter = 1*visible-except-colon
+ parameter-value = parameter *WSP ":" value
+ visible-except-colon = %x21-39 / %x3B-7E ; VCHAR - ":"
+ value = *(TEXT-UTF8char / WSP)
+ TEXT-UTF8char = <as defined in Section 20.1>
+ WSP = <See RFC 5234> ; Space or HTAB
+ VCHAR = <See RFC 5234>
+ CRLF = <See RFC 5234>
+
+Appendix G. Requirements for Unreliable Transport of RTSP
+
+ This appendix provides guidance for those who want to implement RTSP
+ messages over unreliable transports as has been defined in RTSP 1.0
+ [RFC2326]. RFC 2326 defined the "rtspu" URI scheme and provided some
+ basic information for the transport of RTSP messages over UDP. The
+ information is being provided here as there has been at least one
+ commercial implementation and compatibility with that should be
+ maintained.
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 305]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ The following points should be considered for an interoperable
+ implementation:
+
+ o Requests shall be acknowledged by the receiver. If there is no
+ acknowledgement, the sender may resend the same message after a
+ timeout of one round-trip time (RTT). Any retransmissions due to
+ lack of acknowledgement must carry the same sequence number as the
+ original request.
+
+ o The RTT can be estimated as in TCP (RFC 6298) [RFC6298], with an
+ initial round-trip value of 500 ms. An implementation may cache
+ the last RTT measurement as the initial value for future
+ connections.
+
+ o The Timestamp header (Section 18.53) is used to avoid the
+ retransmission ambiguity problem [Stevens98].
+
+ o The registered default port for RTSP over UDP for the server is
+ 554.
+
+ o RTSP messages can be carried over any lower-layer transport
+ protocol that is 8-bit clean.
+
+ o RTSP messages are vulnerable to bit errors and should not be
+ subjected to them.
+
+ o Source authentication, or at least validation that RTSP messages
+ comes from the same entity becomes extremely important, as session
+ hijacking may be substantially easier for RTSP message transport
+ using an unreliable protocol like UDP than for TCP.
+
+ There are two RTSP headers that are primarily intended for being used
+ by the unreliable handling of RTSP messages and which will be
+ maintained:
+
+ o CSeq: See Section 18.20. It should be noted that the CSeq header
+ is also required to match requests and responses independent
+ whether a reliable or unreliable transport is used.
+
+ o Timestamp: See Section 18.53
+
+Appendix H. Backwards-Compatibility Considerations
+
+ This section contains notes on issues about backwards compatibility
+ with clients or servers being implemented according to RFC 2326
+ [RFC2326]. Note that there exists no requirement to implement RTSP
+ 1.0; in fact, this document recommends against it as it is difficult
+ to do in an interoperable way.
+
+
+
+Schulzrinne, et al. Standards Track [Page 306]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ A server implementing RTSP 2.0 MUST include an RTSP-Version of
+ "RTSP/2.0" in all responses to requests containing RTSP-Version value
+ of "RTSP/2.0". If a server receives an RTSP 1.0 request, it MAY
+ respond with an RTSP 1.0 response if it chooses to support RFC 2326.
+ If the server chooses not to support RFC 2326, it MUST respond with a
+ 505 (RTSP Version Not Supported) status code. A server MUST NOT
+ respond to an RTSP 1.0 request with an RTSP 2.0 response.
+
+ Clients implementing RTSP 2.0 MAY use an OPTIONS request with an
+ RTSP-Version of "RTSP/2.0" to determine whether a server supports
+ RTSP 2.0. If the server responds with either an RTSP-Version of
+ "RTSP/1.0" or a status code of 505 (RTSP Version Not Supported), the
+ client will have to use RTSP 1.0 requests if it chooses to support
+ RFC 2326.
+
+H.1. Play Request in Play State
+
+ The behavior in the server when a Play is received in Play state has
+ changed (Section 13.4). In RFC 2326, the new PLAY request would be
+ queued until the current Play completed. Any new PLAY request now
+ takes effect immediately replacing the previous request.
+
+H.2. Using Persistent Connections
+
+ Some server implementations of RFC 2326 maintain a one-to-one
+ relationship between a connection and an RTSP session. Such
+ implementations require clients to use a persistent connection to
+ communicate with the server and when a client closes its connection,
+ the server may remove the RTSP session. This is worth noting if an
+ RTSP 2.0 client also supporting 1.0 connects to a 1.0 server.
+
+Appendix I. Changes
+
+ This appendix briefly lists the differences between RTSP 1.0
+ [RFC2326] and RTSP 2.0 for an informational purpose. For
+ implementers of RTSP 2.0, it is recommended to read carefully through
+ this memo and not to rely on the list of changes below to adapt from
+ RTSP 1.0 to RTSP 2.0, as RTSP 2.0 is not intended to be backwards
+ compatible with RTSP 1.0 [RFC2326] other than the version negotiation
+ mechanism.
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 307]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+I.1. Brief Overview
+
+ The following protocol elements were removed in RTSP 2.0 compared to
+ RTSP 1.0:
+
+ o the RECORD and ANNOUNCE methods and all related functionality
+ (including 201 (Created) and 250 (Low On Storage Space) status
+ codes);
+
+ o the use of UDP for RTSP message transport (due to missing interest
+ and to broken specification);
+
+ o the use of PLAY method for keep-alive in Play state.
+
+ The following protocol elements were added or changed in RTSP 2.0
+ compared to RTSP 1.0:
+
+ o RTSP session TEARDOWN from the server to the client;
+
+ o IPv6 support;
+
+ o extended IANA registries (e.g., transport headers parameters,
+ transport-protocol, profile, lower-transport, and mode);
+
+ o request pipelining for quick session start-up;
+
+ o fully reworked state machine;
+
+ o RTSP messages now use URIs rather than URLs;
+
+ o incorporated much of related HTTP text ([RFC2616]) in this memo,
+ compared to just referencing the sections in HTTP, to avoid
+ ambiguities;
+
+ o the REDIRECT method was expanded and diversified for different
+ situations;
+
+ o Includes a new section about how to set up different media-
+ transport alternatives and their profiles in addition to lower-
+ layer protocols. This caused the appendix on RTP interaction to
+ be moved to the new section instead of being in the part that
+ describes RTP. The section also includes guidelines what to
+ consider when writing usage guidelines for new protocols and
+ profiles;
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 308]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ o Added an asynchronous notification method PLAY_NOTIFY. This
+ method is used by the RTSP server to asynchronously notify clients
+ about session changes while in Play state. To a limited extent,
+ this is comparable with some implementations of ANNOUNCE in RTSP
+ 1.0 not intended for Recording.
+
+I.2. Detailed List of Changes
+
+ The below changes have been made to RTSP 1.0 (RFC 2326) when defining
+ RTSP 2.0. Note that this list does not reflect minor changes in
+ wording or correction of typographical errors.
+
+ o The section on minimal implementation was deleted. Instead, the
+ main part of the specification defines the core of RTSP 2.0.
+
+ o The Transport header has been changed in the following ways:
+
+ * The ABNF has been changed to define that extensions are
+ possible and that unknown parameters result in servers ignoring
+ the transport specification.
+
+ * To prevent backwards compatibility issues, any extension or new
+ parameter requires the usage of a feature tag combined with the
+ Require header.
+
+ * Syntax ambiguities with the Mode parameter have been resolved.
+
+ * Syntax error with ";" for multicast and unicast has been
+ resolved.
+
+ * Two new addressing parameters have been defined: src_addr and
+ dest_addr. These replace the parameters "port", "client_port",
+ "server_port", "destination", and "source".
+
+ * Support for IPv6 explicit addresses in all address fields has
+ been included.
+
+ * To handle URI definitions that contain ";" or ",", a quoted-URI
+ format has been introduced and is required.
+
+ * IANA registries for the transport header parameters, transport-
+ protocol, profile, lower-transport, and mode have been defined.
+
+ * The Transport header's interleaved parameter's text was made
+ more strict and uses formal requirements levels. It was also
+ clarified that the interleaved channels are symmetric and that
+ it is the server that sets the channel numbers.
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 309]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ * It has been clarified that the client can't request of the
+ server to use a certain RTP SSRC, using a request with the
+ transport parameter SSRC.
+
+ * Syntax definition for SSRC has been clarified to require 8HEX.
+ It has also been extended to allow multiple values for clients
+ supporting this version.
+
+ * Clarified the text on the Transport header's "dest_addr"
+ parameters regarding what security precautions the server is
+ required to perform.
+
+ o The Range formats have been changed in the following way:
+
+ * The NPT format has been given an initial NPT identifier that
+ must now be used.
+
+ * All formats now support initial open-ended formats of type
+ "npt=-10" and also format only "Range: smpte" ranges for usage
+ with GET_PARAMETER requests.
+
+ * The npt-hhmmss notation now follows ISO 8601 more strictly.
+
+ o RTSP message handling has been changed in the following ways:
+
+ * RTSP messages now use URIs rather than URLs.
+
+ * It has been clarified that a 4xx message due to a missing CSeq
+ header shall be returned without a CSeq header.
+
+ * The 300 (Multiple Choices) response code has been removed.
+
+ * Rules for how to handle the timing out RTSP messages have been
+ added.
+
+ * Extended Pipelining rules allowing for quick session startup.
+
+ * Sequence numbering and proxy handling of sequence numbers have
+ been defined, including cases when responses arrive out of
+ order.
+
+ o The HTTP references have been updated to first RFCs 2616 and 2617
+ and then to RFC 7230-7235. Most of the text has been copied and
+ then altered to fit RTSP into this specification. The Public and
+ the Content-Base headers have also been imported from RFC 2068 so
+ that they are defined in the RTSP specification. Known effects on
+ RTSP due to HTTP clarifications:
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 310]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ * Content-Encoding header can include encoding of type
+ "identity".
+
+ o The state machine section has been completely rewritten. It now
+ includes more details and is also more clear about the model used.
+
+ o An IANA section has been included that contains a number of
+ registries and their rules. This will allow us to use IANA to
+ keep track of RTSP extensions.
+
+ o The transport of RTSP messages has seen the following changes:
+
+ * The use of UDP for RTSP message transport has been deprecated
+ due to missing interest and to broken specification.
+
+ * The rules for how TCP connections are to be handled have been
+ clarified. Now it is made clear that servers should not close
+ the TCP connection unless they have been unused for significant
+ time.
+
+ * Strong recommendations why servers and clients should use
+ persistent connections have also been added.
+
+ * There is now a requirement on the servers to handle non-
+ persistent connections as this provides fault tolerance.
+
+ * Added wording on the usage of Connection:Close for RTSP.
+
+ * Specified usage of TLS for RTSP messages, including a scheme to
+ approve a proxy's TLS connection to the next hop.
+
+ o The following header-related changes have been made:
+
+ * Accept-Ranges response-header has been added. This header
+ clarifies which range formats can be used for a resource.
+
+ * Fixed the missing definitions for the Cache-Control header.
+ Also added to the syntax definition the missing delta-seconds
+ for max-stale and min-fresh parameters.
+
+ * Put requirement on CSeq header that the value is increased by
+ one for each new RTSP request. A recommendation to start at 0
+ has also been added.
+
+ * Added a requirement that the Date header must be used for all
+ messages with a message body and the Server should always
+ include it.
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 311]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ * Removed the possibility of using Range header with Scale header
+ to indicate when it is to be activated, since it can't work as
+ defined. Also, added a rule that lack of Scale header in a
+ response indicates lack of support for the header. feature
+ tags for scaled playback have been defined.
+
+ * The Speed header must now be responded to in order to indicate
+ support and the actual speed going to be used. A feature tag
+ is defined. Notes on congestion control were also added.
+
+ * The Supported header was borrowed from SIP [RFC3261] to help
+ with the feature negotiation in RTSP.
+
+ * Clarified that the Timestamp header can be used to resolve
+ retransmission ambiguities.
+
+ * The Session header text has been expanded with an explanation
+ on keep-alive and which methods to use. SET_PARAMETER is now
+ recommended to use if only keep-alive within RTSP is desired.
+
+ * It has been clarified how the Range header formats are used to
+ indicate pause points in the PAUSE response.
+
+ * Clarified that RTP-Info URIs that are relative use the Request-
+ URI as base URI. Also clarified that the used URI must be the
+ one that was used in the SETUP request. The URIs are now also
+
+ required to be quoted. The header also expresses the SSRC for
+ the provided RTP timestamp and sequence number values.
+
+ * Added text that requires the Range to always be present in PLAY
+ responses. Clarified what should be sent in case of live
+ streams.
+
+ * The headers table has been updated using a structure borrowed
+ from SIP. Those tables convey much more information and should
+ provide a good overview of the available headers.
+
+ * It has been clarified that any message with a message body is
+ required to have a Content-Length header. This was the case in
+ RFC 2326, but could be misinterpreted.
+
+ * ETag has changed its name to MTag.
+
+ * To resolve functionality around MTag, the MTag and If-None-
+ Match header have been added from HTTP with necessary
+ clarification in regard to RTSP operation.
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 312]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ * Imported the Public header from HTTP (RFC 2068 [RFC2068]) since
+ it has been removed from HTTP due to lack of use. Public is
+ used quite frequently in RTSP.
+
+ * Clarified rules for populating the Public header so that it is
+ an intersection of the capabilities of all the RTSP agents in a
+ chain.
+
+ * Added the Media-Range header for listing the current
+ availability of the media range.
+
+ * Added the Notify-Reason header for giving the reason when
+ sending PLAY_NOTIFY requests.
+
+ * A new header Seek-Style has been defined to direct and inform
+ how any seek operation should/have been performed.
+
+ o The Protocol Syntax has been changed in the following way:
+
+ * All ABNF definitions are updated according to the rules defined
+ in RFC 5234 [RFC5234] and have been gathered in a separate
+ section (Section 20).
+
+ * The ABNF for the User-Agent and Server headers have been
+ corrected.
+
+ * Some definitions in the introduction regarding the RTSP session
+ have been changed.
+
+ * The protocol has been made fully IPv6 capable.
+
+ * The CHAR rule has been changed to exclude NULL.
+
+ o The Status codes have been changed in the following ways:
+
+ * The use of status code 303 (See Other) has been deprecated as
+ it does not make sense to use in RTSP.
+
+ * The never-defined status code 411 "Length Required" has been
+ completely removed.
+
+ * When sending response 451 (Parameter Not Understood) and 458
+ (Parameter Is Read-Only), the response body should contain the
+ offending parameters.
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 313]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ * Clarification on when a 3rr redirect status code can be
+ received has been added. This includes receiving 3rr as a
+ result of a request within an established session. This
+ provides clarification to a previous unspecified behavior.
+
+ * Removed the 201 (Created) and 250 (Low On Storage Space) status
+ codes as they are only relevant to recording, which is
+ deprecated.
+
+ * Several new status codes have been defined: 464 (Data Transport
+ Not Ready Yet), 465 (Notification Reason Unknown), 470
+ (Connection Authorization Required), 471 (Connection
+ Credentials Not Accepted), and 472 (Failure to Establish Secure
+ Connection).
+
+ o The following functionality has been deprecated from the protocol:
+
+ * The use of Queued Play.
+
+ * The use of PLAY method for keep-alive in Play state.
+
+ * The RECORD and ANNOUNCE methods and all related functionality.
+ Some of the syntax has been removed.
+
+ * The possibility to use timed execution of methods with the time
+ parameter in the Range header.
+
+ * The description on how rtspu works is not part of the core
+ specification and will require external description. Only that
+ it exists is mentioned here and some requirements for the
+ transport are provided.
+
+ o The following changes have been made in relation to methods:
+
+ * The OPTIONS method has been clarified with regard to the use of
+ the Public and Allow headers.
+
+ * Added text clarifying the usage of SET_PARAMETER for keep-alive
+ and usage without a body.
+
+ * PLAY method is now allowed to be pipelined with the pipelining
+ of one or more SETUP requests following the initial that
+ generates the session for aggregated control.
+
+ * REDIRECT has been expanded and diversified for different
+ situations.
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 314]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+ * Added a new method PLAY_NOTIFY. This method is used by the
+ RTSP server to asynchronously notify clients about session
+ changes.
+
+ o Wrote a new section about how to set up different media-transport
+ alternatives and their profiles as well as lower-layer protocols.
+ This caused the appendix on RTP interaction to be moved to the new
+ section instead of being in the part that describes RTP. The new
+ section also includes guidelines what to consider when writing
+ usage guidelines for new protocols and profiles.
+
+ o Setup and usage of independent TCP connections for transport of
+ RTP has been specified.
+
+ o Added a new section describing the available mechanisms to
+ determine if functionality is supported, called "Capability
+ Handling". Renamed option-tags to feature tags.
+
+ o Added a Contributors section with people who have contributed
+ actual text to the specification.
+
+ o Added a section "Use Cases" that describes the major use cases for
+ RTSP.
+
+ o Clarified the usage of a=range and how to indicate live content
+ that are not seekable with this header.
+
+ o Text specifying the special behavior of PLAY for live content.
+
+ o Security features of RTSP have been clarified:
+
+ * HTTP-based authorization has been clarified requiring both
+ Basic and Digest support
+
+ * TLS support has been mandated
+
+ * If one implements RTP, then SRTP and defined MIKEY-based key-
+ exchange must be supported
+
+ * Various minor mitigations discussed or resulted in protocol
+ changes.
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 315]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+Acknowledgements
+
+ This memorandum defines RTSP version 2.0, which is a revision of the
+ Proposed Standard RTSP version 1.0 defined in [RFC2326]. The authors
+ of RFC 2326 are Henning Schulzrinne, Anup Rao, and Robert Lanphier.
+
+ Both RTSP version 1.0 and RTSP version 2.0 borrow format and
+ descriptions from HTTP/1.1.
+
+ Robert Sparks and especially Elwyn Davies provided very valuable and
+ detailed reviews in the IETF Last Call that greatly improved the
+ document and resolved many issues, especially regarding consistency.
+
+ This document has benefited greatly from the comments of all those
+ participating in the MMUSIC WG. In addition to those already
+ mentioned, the following individuals have contributed to this
+ specification:
+
+ Rahul Agarwal, Claudio Allocchio, Jeff Ayars, Milko Boic, Torsten
+ Braun, Brent Browning, Bruce Butterfield, Steve Casner, Maureen
+ Chesire, Jinhang Choi, Francisco Cortes, Elwyn Davies, Spencer
+ Dawkins, Kelly Djahandari, Martin Dunsmuir, Adrian Farrel, Stephen
+ Farrell, Ross Finlayson, Eric Fleischman, Jay Geagan, Andy Grignon,
+ Christian Groves, V. Guruprasad, Peter Haight, Mark Handley, Brad
+ Hefta-Gaub, Volker Hilt, John K. Ho, Patrick Hoffman, Go Hori,
+ Philipp Hoschka, Anne Jones, Ingemar Johansson, Jae-Hwan Kim, Anders
+ Klemets, Ruth Lang, Barry Leiba, Stephanie Leif, Jonathan Lennox,
+ Eduardo F. Llach, Chris Lonvick, Xavier Marjou, Thomas Marshall, Rob
+ McCool, Martti Mela, David Oran, Joerg Ott, Joe Pallas, Maria
+ Papadopouli, Sujal Patel, Ema Patki, Alagu Periyannan, Colin Perkins,
+ Pekka Pessi, Igor Plotnikov, Pete Resnick, Peter Saint-Andre, Holger
+ Schmidt, Jonathan Sergent, Pinaki Shah, David Singer, Lior Sion, Jeff
+ Smith, Alexander Sokolsky, Dale Stammen, John Francis Stracke, Geetha
+ Srikantan, Scott Taylor, David Walker, Stephan Wenger, Dale R.
+ Worley, and Byungjo Yoon, and especially Flemming Andreasen.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 316]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+Contributors
+
+ The following people have made written contributions that were
+ included in the specification:
+
+ o Tom Marshall contributed text on the usage of 3rr status codes.
+
+ o Thomas Zheng contributed text on the usage of the Range in PLAY
+ responses and proposed an earlier version of the PLAY_NOTIFY
+ method.
+
+ o Sean Sheedy contributed text on the timeout behavior of RTSP
+ messages and connections, the 463 (Destination Prohibited) status
+ code, and proposed an earlier version of the PLAY_NOTIFY method.
+
+ o Greg Sherwood proposed an earlier version of the PLAY_NOTIFY
+ method.
+
+ o Fredrik Lindholm contributed text about the RTSP security
+ framework.
+
+ o John Lazzaro contributed the text for RTP over Independent TCP.
+
+ o Aravind Narasimhan contributed by rewriting "Media-Transport
+ Alternatives" (Appendix C) and making editorial improvements on a
+ number of places in the specification.
+
+ o Torbjorn Einarsson has done some editorial improvements of the
+ text.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 317]
+
+RFC 7826 RTSP 2.0 December 2016
+
+
+Authors' Addresses
+
+ Henning Schulzrinne
+ Columbia University
+ 1214 Amsterdam Avenue
+ New York, NY 10027
+ United States of America
+
+ Email: schulzrinne@cs.columbia.edu
+
+
+ Anup Rao
+ Cisco
+ United States of America
+
+ Email: anrao@cisco.com
+
+
+ Rob Lanphier
+ San Francisco, CA
+ United States of America
+
+ Email: robla@robla.net
+
+
+ Magnus Westerlund
+ Ericsson
+ Faeroegatan 2
+ Stockholm SE-164 80
+ Sweden
+
+ Email: magnus.westerlund@ericsson.com
+
+
+ Martin Stiemerling (editor)
+ University of Applied Sciences Darmstadt
+ Haardtring 100
+ 64295 Darmstadt
+ Germany
+
+ Email: mls.ietf@gmail.com
+ URI: http://www.stiemerling.org
+
+
+
+
+
+
+
+
+
+Schulzrinne, et al. Standards Track [Page 318]
+