- From: Silvia Pfeiffer <silviapfeiffer1@gmail.com>
- Date: Sat, 24 Jul 2010 13:51:12 +1000
There is definitely a spec bug, because different locations of the spec say diverging things. While the first step in the resource selection algorithm states to go into NETWORK_NO_SOURCE state, the description of NETWORK_NO_SOURCE in the spec actually implies a state of failure. Since the first step in the resource selection algorithm really is a state where we know nothing about the resource yet, it matches more with the description of NETWORK_EMPTY: NETWORK_EMPTY (numeric value 0) The element has not yet been initialized. All attributes are in their initial states. NETWORK_NO_SOURCE (numeric value 3) The element's resource selection algorithm is active, but it has failed to find a resource to use. In any case, it would be nice to get the spec corrected either way and the implementations aligned. :) Cheers, Silvia. On Sat, Jul 24, 2010 at 12:16 AM, Philip J?genstedt <philipj at opera.com>wrote: > Silvia made we aware of discrepancy in how browsers implement the resource > selection algorithm, see forwarded message. It's my assessment that Opera is > the only browser following the spec. I've filed this bug with Mozilla: > > > https://bugzilla.mozilla.org/show_bug.cgi?id=581355 > > I've also reported bugs in Chrome and Safari, but can't see where they > ended up. > > The reason I'm writing this email is that apparently everyone but myself > has a different interpretation of the spec, so perhaps this is something we > need to discuss. Does any other browser ever set the state NETWORK_NO_SOURCE > at all? I speculated that perhaps other browsers aren't very strict about > which parts of the algorithm are run synchronously and not, but even > checking the networkState after a setTimeout it still isn't > NETWORK_NO_SOURCE. > > Test case: http://people.opera.com/philipj/2010/07/23/networkState.html > > Please fix implementation or spec :) > > > -- > Philip J?genstedt > Core Developer > Opera Software > > ------- Forwarded message ------- > From: "Silvia Pfeiffer" <silviapfeiffer1 at gmail.com> > To: "Philip J?genstedt" <philipj at opera.com> > Cc: > Subject: Re: bug in Opera video > Date: Thu, 22 Jul 2010 12:51:15 +0200 > > Hi Philip, > > On Thu, Jul 22, 2010 at 8:02 PM, Philip J?genstedt <philipj at opera.com> > wrote: > >> On Thu, 22 Jul 2010 01:23:09 +0200, Silvia Pfeiffer >> <silviapfeiffer1 at gmail.com> wrote: >> >> Hi Philip, >>> >>> I've just made an experiment with the play() function in Opera and it >>> seems that Opera doesn't support play() if currentSrc has not been >>> determined yet (i.e. if the media element doesn't have a loaded >>> resource). The spec says to deal with this situation and so do all >>> other browsers, bar Opera. Here is a test: >>> >>> <!DOCTYPE html> >>> <html lang="en"> >>> <body> >>> <video controls width="400px"> >>> <source type="video/mp4"> >>> <source type="video/webm"> >>> <source type="video/ogg"> >>> </video> >>> <p>currentSrc on start: <span id="currentSrc_first"></span>.</p> >>> <p>currentSrc after loadedmetadata: <span >>> id="currentSrc_loadedmetadata"></span>.</p> >>> <script type="text/javascript"> >>> video = document.getElementsByTagName("video")[0]; >>> source = document.getElementsByTagName("source"); >>> >>> span1 = document.getElementById("currentSrc_first"); >>> span1.innerHTML = video.currentSrc; >>> source[0].src = "HelloWorld.mp4"; >>> source[1].src = "HelloWorld.webm"; >>> source[2].src = "HelloWorld.ogv"; >>> video.play(); >>> >>> span2 = document.getElementById("currentSrc_loadedmetadata"); >>> function span2Update(evt) { >>> span2.innerHTML = video.currentSrc; >>> } >>> video.addEventListener("loadedmetadata", span2Update, false); >>> </script> >>> </body> >>> </html> >>> >>> The video.play() function should execute the resource selection and >>> fetching, but it doesn't. Not sure if this is deliberate and you want >>> a discussion on the whatwg about it, or just a bug. >>> >>> Cheers, >>> Silvia. >>> >>> >> The spec says "If the media element's networkState attribute has the value >> NETWORK_EMPTY, invoke the media element's resource selection algorithm." >> >> I added alert(video.networkState) just before video.play. In Opera it is 3 >> (NETWORK_NO_SOURCE) while in Chrome it is 0 (NETWORK_EMPTY). >> > > Ah, yes, this is actually another thing I wanted to alert you to. All > other browsers set the @networkState to NETWORK_EMPTY at the start of > loading a new media resource (Firefox, Safari and Chrome). I was going > to discuss this with you, since Opera interprets the spec different > here - which is understandable, since the first step in the resource > selection algorithm says to: > 1. Set the networkState to NETWORK_NO_SOURCE. > > OTOH however, the description for the NETWORK_NO_SOURCE state is as > follows: > NETWORK_EMPTY (numeric value 0) > The element has not yet been initialized. All attributes are in > their initial states. > and for NETWORK_NO_SOURCE is: > NETWORK_NO_SOURCE (numeric value 3) > The element's resource selection algorithm is active, but it has > failed to find a resource to use. > > Thus, I believe this may be a spec bug and really the first step in > the resource selection algorithm should say > 1. Set the networkState to NETWORK_EMPTY. > which is more consistent with the implementations of the other > browsers and also consistent with the meaning of NETWORK_EMPTY and > NETWORK_NO_SOURCE. > > > We are >> following the spec here, as the resource selection algorithm should be run >> the first time when the video element is inserted into the DOM by the >> parser, then again after each source element is inserted. For this markup, >> it will stay as NETWORK_NO_SOURCE in all cases, which is basically a >> waiting >> state. >> >> There are a few ways we could go about solving this: >> >> 1. Make modifying the src attribute of source elements that are children >> to >> a video element that has state EMPTY or NO_SOURCE run the resource >> selection >> algorithm. I don't like this idea myself, it's unnecessarily complicated. >> >> 2. Let the other browsers follow the spec and add a call to video.load() >> before video.play(). >> >> Please do bring this up with the WHATWG. If you like you can forward this >> mail verbatim. To anyone testing this, note that HelloWorld.mp4 has to >> actually exist (or changed to something that does) for the above test to >> work. >> > > Actually, in cases where it doesn't exist, all other browsers can deal > with it, but Opera hangs. I have actually posted that to Opera bug > reports if you want to follow up on this, too. > > I'm leaving it to you to bring it up at WHATWG, since it seems that > the Opera implementation is the odd one out. :-) > > Cheers, > Silvia. > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.whatwg.org/pipermail/whatwg-whatwg.org/attachments/20100724/c7d68c54/attachment-0001.htm>
Received on Friday, 23 July 2010 20:51:12 UTC