MediaSource
===========

**Expérimental:** **Cette fonction est expérimentale**  
Puisque cette fonction est toujours en développement dans certains navigateurs, veuillez consulter le tableau de compatibilité pour les préfixes à utiliser selon les navigateurs.  
Il convient de noter qu'une fonctionnalité expérimentale peut voir sa syntaxe ou son comportement modifié dans le futur en fonction des évolutions de la spécification.

L'interface **`MediaSource`** de l'API Media Source Extensions (en-US) représente une source de données multimédia pour un objet `HTMLMediaElement`. Un objet `MediaSource` peut être attaché à un `HTMLMediaElement` pour être lu dans l'agent utilisateur.

EventTarget

MediaSourceConstructeur
------------

`MediaSource()`

Construit et renvoie un nouvel objet `MediaSource` sans tampon source associé.

Propriétés
----------

`MediaSource.sourceBuffers` (en-US) Lecture seule 

Renvoie un objet `SourceBufferList` (en-US) contenant la liste des objets `SourceBuffer` (en-US) associés à ce `MediaSource`.

`MediaSource.activeSourceBuffers` (en-US) Lecture seule 

Renvoie un objet `SourceBufferList` (en-US) contenant un sous-ensemble des objets `SourceBuffer` (en-US) contenus dans `MediaSource.sourceBuffers` (en-US) — la liste des objets fournissant la piste vidéo sélectionnée, pistes audio activées et pistes de texte affichées / masquées.

`MediaSource.readyState` (en-US) Lecture seule 

Renvoie une énumération représentant l'état de la `MediaSource` actuelle, qu'elle ne soit pas actuellement attachée à un élément multimédia (`fermé`), attachée et prête à recevoir des objets `SourceBuffer` (en-US) (`ouvert`), ou attachée mais le flux a été terminé via `MediaSource.endOfStream()` (en-US) (`terminé`).

`MediaSource.duration` (en-US)

Obtient et définit la durée du média actuel présenté.

### Gestionnaires d'événements

`MediaSource.onsourceclose`

Le gestionnaire d'événements pour l'événement `sourceclose`.

`MediaSource.onsourceended`

Le gestionnaire d'événements pour l'événement `sourceended`.

`MediaSource.onsourceopen`

Le gestionnaire d'événements pour l'événement `sourceopen`.

Méthodes
--------

*Hérite des méthodes de son interface parente, `EventTarget`.*

`MediaSource.addSourceBuffer()` (en-US)

Crée un nouveau `SourceBuffer` (en-US) du type MIME donné et l'ajoute à la liste `MediaSource.sourceBuffers` (en-US).

`MediaSource.clearLiveSeekableRange()` (en-US)

Efface un ensemble privé de plage de recherche avec un appel à `setLiveSeekableRange()`.

`MediaSource.endOfStream()` (en-US)

Signale la fin du flux.

`MediaSource.removeSourceBuffer()` (en-US)

Supprime le `SourceBuffer` (en-US) donné de la liste `MediaSource.sourceBuffers` (en-US).

`MediaSource.setLiveSeekableRange()` (en-US)

Définit la plage que l'utilisateur peut rechercher dans l'élément multimédia.

Méthodes statiques
------------------

`MediaSource.isTypeSupported()` (en-US)

Renvoie une valeur `Boolean` (en-US) indiquant si le type MIME donné est pris en charge par l'agent utilisateur actuel - c'est-à-dire s'il parvient à créer des objets `SourceBuffer` (en-US) pour ce type MIME .

Exemples
--------

L'exemple simple suivant charge une vidéo avec `XMLHttpRequest` et la lit dès que possible. Cet exemple a été écrit par Nick Desaulniers et peut être consulté en direct ici (vous pouvez aussi télécharger la source pour une enquête plus approfondie).


```js
var video = document.querySelector("video");

var assetURL = "frag\_bunny.mp4";
// Need to be specific for Blink regarding codecs
// ./mp4info frag\_bunny.mp4 | grep Codec
var mimeCodec = 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"';

if ("MediaSource" in window && MediaSource.isTypeSupported(mimeCodec)) {
  var mediaSource = new MediaSource();
  //console.log(mediaSource.readyState); // closed
  video.src = URL.createObjectURL(mediaSource);
  mediaSource.addEventListener("sourceopen", sourceOpen);
} else {
  console.error("Unsupported MIME type or codec: ", mimeCodec);
}

function sourceOpen(\_) {
  //console.log(this.readyState); // open
  var mediaSource = this;
  var sourceBuffer = mediaSource.addSourceBuffer(mimeCodec);
  fetchAB(assetURL, function (buf) {
    sourceBuffer.addEventListener("updateend", function (\_) {
      mediaSource.endOfStream();
      video.play();
      //console.log(mediaSource.readyState); // ended
    });
    sourceBuffer.appendBuffer(buf);
  });
}

function fetchAB(url, cb) {
  console.log(url);
  var xhr = new XMLHttpRequest();
  xhr.open("get", url);
  xhr.responseType = "arraybuffer";
  xhr.onload = function () {
    cb(xhr.response);
  };
  xhr.send();
}
```

Spécifications
--------------

| Specification |
| --- |
| Media Source Extensions™ # mediasource |

Compatibilité des navigateurs
-----------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Voir aussi
----------

* `SourceBuffer` (en-US)
* `SourceBufferList` (en-US)