http://www.ietf.org/rfc/rfc2326.txt
10.5 PLAY
The PLAY method tells the server to start sending data via the
mechanism specified in SETUP. A client MUST NOT issue a PLAY request
until any outstanding SETUP requests have been acknowledged as
successful.
The PLAY request positions the normal play time to the beginning of
the range specified and delivers stream data until the end of the
range is reached. PLAY requests may be pipelined (queued); a server
MUST queue PLAY requests to be executed in order. That is, a PLAY
request arriving while a previous PLAY request is still active is
delayed until the first has been completed.
This allows precise editing.
For example, regardless of how closely spaced the two PLAY requests
in the example below arrive, the server will first play seconds 10
through 15, then, immediately following, seconds 20 to 25, and
finally seconds 30 through the end.
C->S: PLAY rtsp://audio.example.com/audio RTSP/1.0
CSeq: 835
Session: 12345678
Range: npt=10-15
C->S: PLAY rtsp://audio.example.com/audio RTSP/1.0
CSeq: 836
Session: 12345678
Range: npt=20-25
C->S: PLAY rtsp://audio.example.com/audio RTSP/1.0
CSeq: 837
Session: 12345678
Range: npt=30-
See the description of the PAUSE request for further examples.
A PLAY request without a Range header is legal. It starts playing a
stream from the beginning unless the stream has been paused. If a
stream has been paused via PAUSE, stream delivery resumes at the
pause point. If a stream is playing, such a PLAY request causes no
further action and can be used by the client to test server liveness.
Schulzrinne, et. al. Standards Track [Page 34]
RFC 2326 Real Time Streaming Protocol April 1998
The Range header may also contain a time parameter. This parameter
specifies a time in UTC at which the playback should start. If the
message is received after the specified time, playback is started
immediately. The time parameter may be used to aid in synchronization
of streams obtained from different sources.
For a on-demand stream, the server replies with the actual range that
will be played back. This may differ from the requested range if
alignment of the requested range to valid frame boundaries is
required for the media source. If no range is specified in the
request, the current position is returned in the reply. The unit of
the range in the reply is the same as that in the request.
After playing the desired range, the presentation is automatically
paused, as if a PAUSE request had been issued.
The following example plays the whole presentation starting at SMPTE
time code 0:10:20 until the end of the clip. The playback is to start
at 15:36 on 23 Jan 1997.
C->S: PLAY rtsp://audio.example.com/twister.en RTSP/1.0
CSeq: 833
Session: 12345678
Range: smpte=0:10:20-;time=19970123T153600Z
S->C: RTSP/1.0 200 OK
CSeq: 833
Date: 23 Jan 1997 15:35:06 GMT
Range: smpte=0:10:22-;time=19970123T153600Z
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/1.0
CSeq: 835
Session: 12345678
Range: clock=19961108T142300Z-19961108T143520Z
S->C: RTSP/1.0 200 OK
CSeq: 835
Date: 23 Jan 1997 15:35:06 GMT
A media server only supporting playback MUST support the npt format
and MAY support the clock and smpte formats.
Schulzrinne, et. al. Standards Track [Page 35]
RFC 2326 Real Time Streaming Protocol April 1998
10.6 PAUSE
The PAUSE request causes the stream delivery to be interrupted
(halted) temporarily. If the request URL names a stream, only
playback and recording of that stream is halted. For example, for
audio, this is equivalent to muting. If the request URL names a
presentation or group of streams, delivery of all currently active
streams within the presentation or group is halted. After resuming
playback or recording, 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/1.0
CSeq: 834
Session: 12345678
S->C: RTSP/1.0 200 OK
CSeq: 834
Date: 23 Jan 1997 15:35:06 GMT
The PAUSE request may contain a Range header specifying when the
stream or presentation is to be halted. We refer to this point as the
"pause point". The header must contain exactly one value rather than
a time range. The normal play time for the stream is set to the pause
point. The pause request becomes effective the first time the server
is encountering the time point specified in any of the currently
pending PLAY requests. If the Range header specifies a time outside
any currently pending PLAY requests, the error "457 Invalid Range" is
returned. If a media unit (such as an audio or video frame) starts
presentation at exactly the pause point, it is not played or
recorded. If the Range header is missing, stream delivery is
interrupted immediately on receipt of the message and the pause point
is set to the current normal play time.
A PAUSE request discards all queued PLAY requests. However, the pause
point in the media stream MUST be maintained. A subsequent PLAY
request without Range header resumes from the pause point.
For example, if the server has play requests for ranges 10 to 15 and
20 to 29 pending and then receives a pause request for NPT 21, it
would start playing the second range and stop at NPT 21. If the pause
request is for NPT 12 and the server is playing at NPT 13 serving the
first play request, the server stops immediately. If the pause
request is for NPT 16, the server stops after completing the first
Schulzrinne, et. al. Standards Track [Page 36]
RFC 2326 Real Time Streaming Protocol April 1998
play request and discards the second play request.
As another example, if a server has received requests to play ranges
10 to 15 and then 13 to 20 (that is, overlapping ranges), the PAUSE
request for NPT=14 would take effect while the server plays the first
range, with the second PLAY request effectively being ignored,
assuming the PAUSE request arrives before the server has started
playing the second, overlapping range. Regardless of when the PAUSE
request arrives, it sets the NPT to 14.
If the server has already sent data beyond the time specified in the
Range header, a PLAY would still resume at that point in time, as it
is assumed that the client has discarded data after that point. This
ensures continuous pause/play cycling without gaps.