| title | MediaSource.duration | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| slug | Web/API/MediaSource/duration | ||||||||||
| page-type | web-api-instance-property | ||||||||||
| tags |
|
||||||||||
| browser-compat | api.MediaSource.duration |
{{APIRef("Media Source Extensions")}}{{SeeCompatTable}}
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")}}- : Thrown if an attempt was made to set a duration value that was negative or
NaN.
- : Thrown if an attempt was made to set a duration value that was negative or
InvalidStateError{{domxref("DOMException")}}- : Thrown if {{domxref("MediaSource.readyState")}} is not equal to
open, or one or more of the {{domxref("SourceBuffer")}} objects in {{domxref("MediaSource.sourceBuffers")}} are being updated (i.e. their {{domxref("SourceBuffer.updating")}} property istrue.)
- : Thrown if {{domxref("MediaSource.readyState")}} is not equal to
The following snippet is based on a simple example written by Nick Desaulniers (view the full demo live, or download the source for further investigation.)
function sourceOpen (_) {
//console.log(this.readyState); // open
const mediaSource = this;
const sourceBuffer = mediaSource.addSourceBuffer(mimeCodec);
fetchAB(assetURL, function (buf) {
sourceBuffer.addEventListener('updateend', function (_) {
mediaSource.endOfStream();
mediaSource.duration = 120;
video.play();
//console.log(mediaSource.readyState); // ended
});
sourceBuffer.appendBuffer(buf);
});
};
// …{{Specifications}}
{{Compat}}
- {{domxref("SourceBuffer")}}
- {{domxref("SourceBufferList")}}