- From: Brian Birtles <bbirtles@mozilla.com>
- Date: Wed, 16 Oct 2013 14:35:23 +0900
- To: public-fx@w3.org
Hi again, Following up the previous post[1] with a sketch of how the API for Option C might look: interface Player { attribute TimedItem? source; readonly attribute Timeline timeline; attribute double startTime; attribute double currentTime; readonly attribute double timeLag; attribute double playbackRate; readonly attribute boolean paused; readonly attribute boolean ended; void cancel (); void finish (); void play (); void pause (); void reverse (); }; Members of interest: * currentTime - unchanged, you can still set it to anything you like (although we'll need to revisit the definition of effective current time but that's a separate discussion) * timeLag - unchanged but incorporates time lag accumulated due to "auto-pausing" behaviour outlined in the previous post.[1] * paused - now readonly and we use play() / pause() to update its state much like HTMLMediaElement * ended - this is taken from HTMLMediaElement. It gets set whenever currentTime >= source.endTime (unless I guess playbackRate < 0 and currentTime == source.endTime?) This is asymmetrical--it doesn't get set when you finish playing in reverse, but that's also how it works in HTMLMediaElement. * cancel() - sets source to null. Causes all animation effects produced by this player to be cleared. * finish() - jQuery has this and I've sometimes wanted it. Not sure what it should do when playbackRate < 0 but for the forwards case, it seeks to source.endTime. * play() - unpauses if paused is true. In HTML, if you're ended it seeks back to the start. I think we should probably do that here for consistency even though I don't like these operations that produce very different behaviour whether you call them 1ms before or after the player finishes. Not sure what we should do if: - currentTime > source.endTime and playbackRate < 0 -- suggest we seek to source.endTime - currentTime < 0 and playbackRate < 0 -- do nothing? or seek to source.endTime? - currentTime < 0 and playbackRate > 0 -- suggest we seek to 0 - playbackRate = 0 -- do nothing I guess HTML only does restart behaviour when playback is forwards but we might want to deviate from that depending on how we define reverse. * pause() - sets paused to true (and follows all the steps associated with that) * reverse() - sets playbackRate to -playbackRate. If the new playbackRate < 0 and currentTime > source.endTime, seeks to source.endTime. If the new playbackRate > 0 and currentTime < 0, seeks to 0. Note that the above means that calling reverse() twice is not always a no-op, but the cases where it isn't are fairly rare (specifically only when we seek outside the content range or shorten the source content after ending). Suggestions are most welcome. Best regards, Brian [1] http://lists.w3.org/Archives/Public/public-fx/2013OctDec/0059.html
Received on Wednesday, 16 October 2013 05:35:51 UTC