- From: Simon Pieters <simonp@opera.com>
- Date: Thu, 08 Oct 2009 14:29:08 +0200
- To: "Gervase Markham" <gerv@gerv.net>, public-html-comments@w3.org
On Thu, 08 Oct 2009 13:14:37 +0200, Gervase Markham <gerv@gerv.net> wrote:
> On a <video> element (I haven't tried <audio>), if you change the src=
> attribute to a new file, you have to call .load() before .play(),
> otherwise it replays the old file. This lost me half an hour of
> debugging, and recently another person posted in the Mozilla newsgroups
> having exactly the same problem.
>
> I am told by an informed source (Boris Zbarsky) that the spec for
> <video> requires this behaviour. Having spent ten minutes reading the
> highly comprehensive specification, I could not find the location where
> it says this. However, I believe him :-)
"If a src attribute of a media element that is in a Document and whose
networkState has the value NETWORK_EMPTY is set or changed, the user agent
must invoke the media element's resource selection algorithm."
If you have already played a video, networkState is not NETWORK_EMPTY, so
the resource selection algorithm is not invoked (and thus play() will play
the already-loaded video).
> Question: why? This is counter-intuitive. Under what circumstances would
> you want to set the src= attribute of a <video> tag to a file which you
> did not want the loading process to begin immediately? Can we eliminate
> the requirement, e.g. by having play() implicitly call load() if it
> hasn't been called?
Maybe we could remove the networkState check when the src attribute is set
or changed. Should the "in a Document" check be removed, too? That is, do
you want to be able to do
var a = new Audio('foo');
a.play();
a.onended = function() { a.src = 'bar'; a.onended = null; }
?
(You wouldn't need to invoke play() again, because the media isn't paused
when it has ended.)
What do you think should happen when using <source> elements?
--
Simon Pieters
Opera Software
Received on Thursday, 8 October 2009 12:29:59 UTC