[webkit-dev] Making sure the behavior of updating duration of HTMLMediaElement and MediaSource

Peng (WebKit) Liu peng.liu6 at apple.com
Mon Dec 7 11:17:33 PST 2020


Hi Yousuke,

I think WebKit’s behavior matches the spec.
The HTML5 spec says: “If no media data is available, then the attributes must return the Not-a-Number (NaN) value.” On the test page, there is no data appended to the media source, so there is no media data available for the video element.


Best regards
Peng

> On Dec 6, 2020, at 10:48 PM, Kimoto, Yousuke (SIE) via webkit-dev <webkit-dev at lists.webkit.org> wrote:
> 
> Hi all,
> 
> I have a question about MediaSource's duration.
> 
> What is an expected result of "duration" after processing the following steps?
> 1) Creating HTMLMediaElement object.
> 2) Creating MediaSource object, which is set to the HTMLMediaElement of step 1)
> 3) Updating MediaSource.duration with some numbers. (e.g. 10, 100 etc)
> 4) What does "duration" return?
> 
> The table below shows "duration" of HTMLMediaElement and MediaSource on web browsers with the attached sample, and the results are different.
> (NOTE: the sample at the bottom of this mail is made as a part of LayoutTest media-source.)
> 
>       |  HTMLMediaElement |  MediaSource |
> Chrome:       updated     |    updated   |
> Safari:        NaN        |    updated   |
>    GTK:        NaN        |    updated   | *) MiniBrowser (GTK)
> Firefox:         -         |       -      | *) no durationchange event happened.
> 
> Points:
> - Safari and GTK are the same results, it's natural because they use the same implementation of "duration".
>   It doesn't update HMLMediaElement.duration because the HTMLMediaElement object's readyState is HAVE_NOTHING.
> - Chrome updates HTMLMediaElement.duration and MediaSource.duration.
> - Firefox doesn't fire a "durationchange" event.
> 
> Could anyone can explain which behavior matches the W3C standards?
> 
> 
> 
> Reference:
> https://www.w3.org/TR/media-source/#duration-change-algorithm
> https://www.w3.org/TR/html51/semantics-embedded-content.html#durationChange
> 
> 
> Sample:
> <!DOCTYPE html>
> <html>
> <head>
>    <title>media-source-set-duration-before-append.html</title>
>    <script src="../video-test.js"></script>
>    <script>
>    var source;
>    function runTest() {
>        findMediaElement();
>        source = new MediaSource();
>        waitForEventOn(source, 'sourceopen', sourceOpen);
>        run('video.src = URL.createObjectURL(source)');
>    }
>    function sourceOpen() {
>        waitForEventOn(video, 'durationchange', durationChange);
>        run('source.duration = 10.0');
>    }
> 
>    function durationChange() {
>        testExpected('source.duration', 10.0);
>        testExpected('video.duration', 10.0);
>        endTest();
>    }
>    </script>
> </head>
> <body onload="runTest()">
>    <video></video>
> </body>
> </html>
> 
> 
> Best Regards,
> 
> --
> Yousuke Kimoto
> _______________________________________________
> webkit-dev mailing list
> webkit-dev at lists.webkit.org
> https://lists.webkit.org/mailman/listinfo/webkit-dev



More information about the webkit-dev mailing list