[whatwg] Some media element details
Maciej Stachowiak
mjs at apple.com
Fri May 16 22:18:56 PDT 2008
On May 16, 2008, at 9:29 PM, James Justin Harrell wrote:
> The current HTMLMediaElement interface is inconsistent and is
> designed in such a way that making changes to it will be extremely
> difficult.
>
> The network state is given by the "networkState" attribute, and is
> one of:
> EMPTY, LOADING, LOADED_METADATA, LOADED_FIRST_FRAME, LOADED
>
> The ready state is given by the "readyState" attribute, and is one of:
> DATA_UNAVAILABLE, CAN_SHOW_CURRENT_FRAME, CAN_PLAY, CAN_PLAY_THROUGH
>
> Although adding states for either of these would not be fun, it
> could be done. But the playback state is different.
>
> The consistent and upgradeable design would be to have a
> "playbackState" attribute that is one of:
> PAUSED, PLAYING
>
> But because there are currently only two states, we instead have a
> single boolean attribute. Boolean attributes are great when you're
> sure there will always be only two states, but they're terrible if
> there's a chance you'll want to add additional states.
I'm not sure adding states is all that safe. Any code that does a
switch on the state would now fall through to an untested code path.
> It isn't difficult to imagine all kinds of additional playback
> states. For example, what if there was great demand for forward-
> seeking and backward-seeking states? (e.g. the states that are
> usually associated with those >> and << buttons) How could those
> states be added?
Then you would treat the video as playing, and the playback rate as
different than 1.0.
> The media error state is also inconsistent, and this time for no
> apparent reason, although it would at least be easy to update. A
> more consistent design would be to have an "errorState" attribute
> that is one of:
> NO_ERROR, ABORTED, NETWORK_ERROR, DECODING_ERROR
The type of error is not a state. There is no state transition that
will move you from one to the other. An error is something that
happened. There could however be a type of error that you reached.
- Maciej
>
>
> And why are the error state names prefixed with "MEDIA_ERR" when the
> names for the other states are not prefixed? e.g. LOADING instead of
> MEDIA_NET_LOADING.
>
> If NO_ERROR was given a value of 0, testing for an error with this
> design wouldn't be any more difficult.
>
> if( videoElement.error ) {...}
> if( videoElement.errorState ) {...}
>
>
> ----- Original Message ----
>
>> Wouldn't you want something like that to know, for example, whether
>> to
>> display a "play" or a "pause" button?
>
> We have that -- the "paused" attribute. When it's true, show play, and
> when it's paused, show false. You don't want to show play when the
> reason
> you aren't playing is that you're buffered or seeking for instance.
> The
> client is trying to play. It can't.
More information about the whatwg
mailing list