[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[MMUSIC] RTSP: PLAY in play mode and state machine
Hi,
Do agree with Sean that Play while playing is a good feature. However it
do surface the issues RTSP has with the state machine and state
transitions.
First of all I would like to inform on a what Sean and I have written on
this method usage. PLAY request can be received by the server in play
state. The new request replaces the previous request, and work in fact
the same way a PAUSE, PLAY pipelined request would work. I have also
added a proposal to have the new PLAY request having an open start point
(npt=-30) to allow one to continue playing where one currently are, and
basically only change the rest of the range header. This would allow one
to replace a PLAY request with Range:npt=0- with a NPT header saying
npt=-50;npt=20-30;npt=200-300 as long as this request arrives before the
server has passed 50. This can in fact be used to implement queued play
without the issue of having the list of jumps needing to be handled on
the server side. As I see it has very little implementation burden.
Back to RTSP and its state machine. With this PLAY in play state
mechanism the difference between ready and play state is not as clear as
one would desire. A lot of what one can do in ready is also possible in
play state. The issues as I see it with the RTSP state machine is that
one really would like to have it drop to ready state as soon as it has
finished playing. However this would require that the server could send
asynchronous messages to indicate that state transition. Otherwise and
the reason that state machine looks like it currently does, is to avoid
the server initiate implicit state transitions in cases where it doesn't
result in session termination.
Unfortunately I don't see any easy way out of this dilemma. The
alternatives are as I see it:
1. Introduce these messages into RTSP. However this is quite a serious
change which I don't know if we can muster the energy for. However this
would resolve the end of stream issues.
2. Let the end_of_stream draft resolve the issue.
3. Do nothing to the state machine and except that the states are not a
straightforward as one would expect.
4. Introduce a recovery mechanism that could introduce explicit state
indication to inform the client about which state the server was when
receiving the request and failed to handled it and which state it ends
up in after successful execution of a request. One could even introduce
a required-state header that ensures that the request only is executed
in the state one currently is in.
From a protocol perspective I would think that doing both 1 and 4 would
be the best. However I a bit worried about introducing these at this stage.
Feedback solicited.
Cheers
Magnus Westerlund
Multimedia Technologies, Ericsson Research EAB/TVA/A
----------------------------------------------------------------------
Ericsson AB | Phone +46 8 4048287
Torshamsgatan 23 | Fax +46 8 7575550
S-164 80 Stockholm, Sweden | mailto: magnus.westerlund at ericsson.com
_______________________________________________
mmusic mailing list
mmusic at ietf.org
https://www1.ietf.org/mailman/listinfo/mmusic