- From: Shane Stephens <shans@google.com>
- Date: Thu, 17 Oct 2013 20:37:35 +1100
- To: Brian Birtles <bbirtles@mozilla.com>
- Cc: "public-fx@w3.org" <public-fx@w3.org>
- Message-ID: <CAGTfzwR_6doQbaAT6cEj6XrEOd2Wp4JNUjWVKaqLgBrCniqYVA@mail.gmail.com>
Hi Brian, I've put some questions / feedback about your API sketch inline. On Wed, Oct 16, 2013 at 4:35 PM, Brian Birtles <bbirtles@mozilla.com> wrote: > 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. > It's a shame this is asymmetric. How important is it to match HTMLMediaElement's behaviour? I don't think that reverse play is as much of a consideration for media as it is for animations (but I could be wrong). If we have to match HTMLMediaElement, maybe we could add another attribute that is antisymmetric to ended? > * cancel() - sets source to null. Causes all animation effects produced by > this player to be cleared. > Does this also reset timeLag? What about currentTime and startTime? > * 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. > (a) I'd like it to seek to the edge of the playback range in the current direction, so that when playing in reverse finish() would seek to the start. This means that: finish(); reverse(); will always do full playback of the content in the opposite direction to last time. (b) Does finish() seek backwards to source.endTime if the play head is past endTime already? > * 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. > I agree that seeking back to the start is inelegant, but that it seems like it's worth matching HTML's behaviour here. I think your suggestions for edge cases are good - I'd seek to source.endTime in the second case to remain symmetric. > * 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<http://lists.w3.org/Archives/Public/public-fx/2013OctDec/0059.html> > > Sincerely, -Shane Stephens
Received on Thursday, 17 October 2013 09:38:05 UTC