files/en-us/web/api/mediasource/duration/index.md
{{APIRef("Media Source Extensions")}}{{AvailableInWorkers("window_and_dedicated")}}
The duration property of the {{domxref("MediaSource")}}
interface gets and sets the duration of the current media being presented.
A double. A value in seconds is expected.
The following exceptions may be thrown when setting a new value for this property.
InvalidAccessError {{domxref("DOMException")}}
NaN.InvalidStateError {{domxref("DOMException")}}
open, or one or more of the
{{domxref("SourceBuffer")}} objects in
{{domxref("MediaSource.sourceBuffers")}} are being updated
(i.e., their {{domxref("SourceBuffer.updating")}} property is
true.)The following snippet is based on an example written by Nick Desaulniers (view the full demo live, or download the source for further investigation). The function getMediaSource(), which is not defined here, returns a MediaSource.
const mediaSource = getMediaSource();
function sourceOpen() {
console.log(this.readyState); // open
const sourceBuffer = mediaSource.addSourceBuffer(mimeCodec);
fetchAB(assetURL, (buf) => {
sourceBuffer.addEventListener("updateend", () => {
mediaSource.endOfStream();
mediaSource.duration = 120;
video.play();
console.log(mediaSource.readyState); // ended
});
sourceBuffer.appendBuffer(buf);
});
}
// …
{{Specifications}}
{{Compat}}