On Mon, Jul 26, 2010 at 11:12 PM, Philip Jägenstedt <span dir="ltr"><<a href="mailto:philipj@opera.com">philipj@opera.com</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

<div><div></div><div class="h5">On Mon, 26 Jul 2010 14:53:50 +0200, Silvia Pfeiffer <<a href="mailto:silviapfeiffer1@gmail.com" target="_blank">silviapfeiffer1@gmail.com</a>> wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
On Mon, Jul 26, 2010 at 7:41 PM, Philip Jägenstedt <<a href="mailto:philipj@opera.com" target="_blank">philipj@opera.com</a>>wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
I actually don't think there's anything wrong about the spec as it is.<br>
<br>
NETWORK_NO_SOURCE is not a state of failure, it is a waiting state. Here's<br>
what happens as the parser inserts elements into the DOM:<br>
<br>
<video controls width="400px"><br>
<!-- video has been inserted but resource selection hasn't run --><br>
 <source type="video/mp4"><br>
<!-- resource selection is started, ends on step 21 with NETWORK_NO_SOURCE<br>
and pointer pointing to just after the only source element --><br>
 <source type="video/webm"><br>
<!-- resource selection continues at step 22, going another loop and ending<br>
at step 21, but with pointer pointer to after the second source element --><br>
 <source type="video/ogg"><br>
<-- same as above, but pointing to after the third source element --><br>
</video><br>
<br>
If nothing is done, the resource selection algorithm will wait forever at<br>
step 21. To get out of that state you have to either call load() to restart<br>
resource selection, or append another source element.<br>
<br>
If we should let networkState be NETWORK_EMPTY after inserting the dummy<br>
<source> elements, then resource selection would be run from the beginning<br>
each time, which means that during parsing, the first <source> element will<br>
be considered 3 times, the second 2 times and the last 1 time. In your<br>
example this doesn't matter, but if the reason a <source> failed was because<br>
of network errors, unsupported Content-Type or an unsupported file format,<br>
then that will also happen too many times, adding useless network traffic<br>
(unless e.g. 404 results are cached).<br>
<br>
So, I think the algorithm should stay as it is and that the other browsers<br>
should change their implementations. In your original example you used<br>
<source> elements with no src attribute. This is invalid, and I think the<br>
proper solution would be to create each source element, set the src<br>
attribute and append it to the video element.<br>
<br>
</blockquote>
<br>
Ok, I re-read the spec about <source> and you are correct: it's invalid to<br>
create <source> elements without a @src attribute. It could, however, still<br>
be created without a URI, in which case the resulting state would indeed be<br>
a NETWORK_NO_SOURCE, since it fails to find a valid @currentSrc .<br>
<br>
I still think, though, that NETWORK_NO_SOURCE is a failure state, since it<br>
is specified as<br>
NETWORK_NO_SOURCE (numeric value 3):<br>
    The element's resource selection algorithm is active, but it has failed<br>
to find a resource to use.<br>
</blockquote>
<br></div></div>
Perhaps this wording should be changed. Given that this state is an integral part of skipping <source> elements where the type or media isn't supported, I really wouldn't call it a failure state, it's rather a waiting state.<div class="im">

<br>
<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
I now wonder about the intention of play() (and also of pause()). As I<br>
understood it, they are both meant to reload the media resource if<br>
@currentSrc has changed, similar to what load() is supposed to do.<br>
</blockquote>
<br></div>
What the spec actually does right now is cause a change of the src attribute to trigger resource selection. There are no hooks for when you change the src attribute of a child source element, so that's why it looks a bit inconsistent.<br>

</blockquote><div><br><br>Well, then this is the inconsistency. If I change @src on a <video> element and then call play(), it will play. If I change @src on the <source> elements of the <video> (and the <video> has no @src), the play() doesn't do anything in Opera. This doesn't just look inconsistent, in actually *is* inconsistent. (Maybe that's also what Maciej meant :). So, what is missing is that a change on @src not just on <video> and <audio>, but also on <source> needs to tirgger resource selection. This is another means of getting around the problem.<br>

<br>On top of this, this still leaves us with inconsistent network states between browsers, as you rightly noticed. A clarification of what NETWORK_NO_SOURCE means is indeed needed.<br><br>Cheers,<br>Silvia.<br><br></div>

</div>