[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