[whatwg] Serving up Theora <video> in the real world

Ian Hickson ian at hixie.ch
Mon Jul 27 15:48:26 PDT 2009

On Fri, 10 Jul 2009, Aryeh Gregor wrote:
> On Fri, Jul 10, 2009 at 4:57 AM, Robert O'Callahan<robert at ocallahan.org> wrote:
> > The way we've implemented in Firefox, we'll return "yes" if you 
> > specify a codecs parameter and we support every codec in your list. So 
> > v.canPlayType("video/ogg; codecs=vorbis,theora") returns "probably" in 
> > Firefox 3.5. I think this is reasonable because I believe that, modulo 
> > bugs in our implementation, we support the full Theora and Vorbis 
> > specs. On the other hand, we will return "maybe" for 
> > v.canPlayType("video/ogg"). I think this distinction will be useful.
> In what use-case would an author want to make use of the distinction? In 
> either case, your only course of action is to try playing the video.  
> Maybe you'd try testing all the video types you support, and if one is 
> "maybe" while another is "probably" you'd go with "probably"?  That 
> seems like a pretty marginal use case to help for the sake of such a 
> confusing API.  Programmers expect binary logic, not ternary (look at 
> the complaints about SQL's NULL).

The main use case is ordering. If you have ten variants, you might want to 
try the "probably"s before the "maybe"s, especially if there are a lot of 
weird codecs involved, such that the "maybe"s might be able to play 
somewhat, just not as well as the "probably"s.

On Fri, 10 Jul 2009, Philip Jagenstedt wrote:
> I agree that the current interface is ugly and quite fail to see what the
> use for it is. With a boolean return value, canPlayType("application/ogg")
> would return true if one can demux Ogg streams.
> canPlayType("application/ogg; codecs=vorbis,dirac") would return true if
> one can demux Ogg and decode vorbis + dirac.

What would "canPlayType("video/ogg; codecs=vorbis")" return? There's not 
enough information there to say whether or not you can play a stream 
labeled that way.

> Unless there's some compelling use case that can't be handled with the 
> above I'd support canPlayType returning a boolean. The only issue I can 
> see is that canPlayType(foo)==true might be interpreted as a strong 
> promise of playability which can't be given. In that case just rename 
> the function to wouldTryTypeInResourceSelection (no, not really).

You can use the method as it is now as a boolean method, in practice. 
However, I think there is value in being explicit that a "true" return 
value isn't really necessarily confident.

On Fri, 10 Jul 2009, Philip Jagenstedt wrote:
> Before someone conjures up an example where this doesn't exactly match 
> the current behavior, the point is simply that calling canPlayType 
> without out a codecs list or with specific codecs, you can learn exactly 
> what is supported and not out of the container formats and codecs you 
> are interested in, without the need for the strange 
> "probably"/"maybe"/"" API.

On Sat, 11 Jul 2009, Robert O'Callahan wrote:
> I think it would be somewhat counterintuitive for 
> canPlayType("video/ogg") to return true, but canPlayType("video/ogg; 
> codecs=dirac") to return false.

On Sat, 11 Jul 2009, Philip Jägenstedt wrote:
> Well I disagree of course, because having canPlayType("video/ogg") mean 
> anything else than "can I demux Ogg streams" is pointless.

On Sat, 11 Jul 2009, Robert O'Callahan wrote:
> So you want "canPlayType" to mean one thing when provided a type without 
> codecs, and another thing when provided a type with codecs. I don't 
> think that's a good idea.
> Anyway, it's too late. If you care passionately about this you should 
> have reopened this discussion months ago, not now that two browsers have 
> just shipped support for the API in the spec.

On Sun, 12 Jul 2009, Robert O'Callahan wrote:
> IIRC some browsers using system media frameworks don't know what codecs they
> support, so they still need to be able to answer "maybe" when codecs are
> provided; you still need a three-valued result.
> I still think it would confuse authors if you return true for canPlayType(T)
> and false for canPlayType(U) where U is a subset of T.

I'm with Robert on this. The idea is that you can take the actual MIME 
type of a file, and find out what the odds are that the file will play ok. 
In practice, the odds are lower with "video/ogg" than a type that 
explicitly lists a supported codec.

On Sun, 12 Jul 2009, Philip Jägenstedt wrote:
> Not that I except this discussion to go anywhere, but out of curiosity I 
> checked how Firefox/Safari/Chrome actually implement canPlayType:
> http://wiki.whatwg.org/wiki/Video_type_parameters#Browser_Support
> Firefox is conservative and honest (except maybe for "audio/wav; 
> codecs=0", what could you do with the RIFF DATA chunk?) Safari gets 
> maybe/probably backwards compared to what the spec suggests. Chrome 
> seems to ignore the codecs parameter, claiming "probably" even for bogus 
> codecs. Authors obviously can't trust the distinction between "maybe" 
> and "probably" to any extent.

That certainly is unfortunate.

On Sat, 11 Jul 2009, Maciej Stachowiak wrote:
> If I were designing the API from scratch, I would have two functions, 
> "mightPlayType()" and "canDefinitelyPlayType()". That would make it 
> easier to write natural boolean expressions. However, I think the 
> current canPlayType() is good enough - the empty string pseudo-false 
> return should make it mostly ok to treat canPlayType as a boolean 
> method. Also, it's a change that we felt we could rush into Firefox and 
> Safari updates without undue risk, before the even more broken version 
> with the "no" return got locked in. To everyone proposing more 
> wide-ranging changes , this API is probably past the point where we can 
> freely change it any way we want.


Ian Hickson               U+1047E                )\._.,--....,'``.    fL
http://ln.hixie.ch/       U+263A                /,   _.. \   _\  ;`._ ,.
Things that are impossible just take longer.   `._.-(,_..'--(,_..'`-.;.'

More information about the whatwg mailing list