Spec-Zone.ru › Web APIs

MediaSource

Ограниченная доступность

Эта функция не относится к Baseline, так как она не работает в некоторых из наиболее широко используемых браузеров.

  • Узнать больше
  • Полная совместимость
  • Отправить обратную связь

Примечание: Эта функция доступна в посвященных веб-воркерах.

Интерфейс MediaSource API расширений для источника медиаданных представляет собой источник данных медиа для объекта HTMLMediaElement. Объект MediaSource может быть присоединён к HTMLMediaElement для воспроизведения в пользовательском агенте.

EventTarget MediaSource

Конструктор

MediaSource()

Создаёт и возвращает новый объект MediaSource без связанных буферов источника.

Свойства экземпляра

MediaSource.activeSourceBuffers Только для чтения

Возвращает объект SourceBufferList, содержащий подмножество объектов SourceBuffer, содержащихся в MediaSource.sourceBuffers — список объектов, предоставляющих выбранный видеотрек, включённые аудиотреки и показанные/скрытые текстовые треки.

MediaSource.duration

Получает и устанавливает длительность текущего воспроизводимого медиа.

MediaSource.handle Только для чтения

Внутри посвященного воркера возвращает объект MediaSourceHandle, прокси для MediaSource, который можно перенести из воркера обратно в основной поток и прикрепить к элементу медиа через свойство HTMLMediaElement.srcObject.

MediaSource.readyState Только для чтения

Возвращает перечисление, представляющее состояние текущего MediaSource, подключён ли он в данный момент к элементу медиа (closed), подключён и готов принимать объекты SourceBuffer (open), или подключён, но поток был завершён с помощью MediaSource.endOfStream() (ended).

MediaSource.sourceBuffers Только для чтения

Возвращает объект SourceBufferList, содержащий список объектов SourceBuffer, связанных с этим MediaSource.

Статические свойства

MediaSource.canConstructInDedicatedWorker Только для чтения

Булево значение; возвращает true если поддержка воркеров MediaSource реализована, обеспечивая механизм обнаружения низкой задержки.

Методы экземпляра

Наследует методы от своего родительского интерфейса EventTarget.

MediaSource.addSourceBuffer()

Создаёт новый SourceBuffer заданного типа MIME и добавляет его в список MediaSource.sourceBuffers.

MediaSource.clearLiveSeekableRange()

Очищает диапазон поиска, ранее заданный вызовом setLiveSeekableRange().

MediaSource.endOfStream()

Сигнализирует о завершении потока.

MediaSource.removeSourceBuffer()

Удаляет заданный SourceBuffer из списка MediaSource.sourceBuffers.

MediaSource.setLiveSeekableRange()

Задает диапазон, к которому пользователь может перейти в элементе медиа.

Статические методы

MediaSource.isTypeSupported()

Возвращает булево значение, указывающее, поддерживается ли данный тип MIME текущим пользовательским агентом — то есть, может ли он успешно создать объекты SourceBuffer для этого типа MIME.

События

sourceclose

Срабатывает, когда экземпляр MediaSource больше не прикреплен к элементу медиа.

sourceended

Срабатывает, когда экземпляр MediaSource всё ещё прикреплён к элементу медиа, но был вызван endOfStream().

sourceopen

Срабатывает, когда экземпляр MediaSource был открыт элементом медиа и готов к добавлению данных к объектам SourceBuffer в sourceBuffers.

Примеры

Полный базовый пример

Следующий простой пример загружает видео с помощью XMLHttpRequest, воспроизводя его как только это возможно. Этот пример был написан Ником ДеСолье и его можно посмотреть вживую здесь (также вы можете скачать исходный код для дальнейшего изучения). Функция getMediaSource(), которая не определена здесь, возвращает MediaSource.

const video = document.querySelector("video");

const assetURL = "frag_bunny.mp4";
// Need to be specific for Blink regarding codecs
// ./mp4info frag_bunny.mp4 | grep Codec
const mimeCodec = 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"';
let mediaSource;

if ("MediaSource" in window && MediaSource.isTypeSupported(mimeCodec)) {
  mediaSource = getMediaSource();
  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
  const sourceBuffer = mediaSource.addSourceBuffer(mimeCodec);
  fetchAB(assetURL, (buf) => {
    sourceBuffer.addEventListener("updateend", () => {
      mediaSource.endOfStream();
      video.play();
      console.log(mediaSource.readyState); // ended
    });
    sourceBuffer.appendBuffer(buf);
  });
}

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

Создание MediaSource в выделенном воркере и передача его в основной поток

Свойство handle можно получить внутри выделенного воркера, а полученный объект MediaSourceHandle затем передаётся в поток, создавший воркер (в данном случае, основной поток) с помощью вызова postMessage():

// Inside dedicated worker
let mediaSource = new MediaSource();
let handle = mediaSource.handle;
// Transfer the handle to the context that created the worker
postMessage({ arg: handle }, [handle]);

mediaSource.addEventListener("sourceopen", () => {
  // Await sourceopen on MediaSource before creating SourceBuffers
  // and populating them with fetched media — MediaSource won't
  // accept creation of SourceBuffers until it is attached to the
  // HTMLMediaElement and its readyState is "open"
});

В главном потоке мы получаем обработчик с помощью события message, присоединяем его к элементу <video> через его свойство HTMLMediaElement.srcObject и play видео:

worker.addEventListener("message", (msg) => {
  let mediaSourceHandle = msg.data.arg;
  video.srcObject = mediaSourceHandle;
  video.play();
});

Примечание: Объекты MediaSourceHandle не могут быть успешно перенесены в или через общий воркер или сервис-воркер.

Спецификации

Спецификация
Расширения для источника медиа™
# mediasource

Совместимость браузеров

Настольный Мобильный
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on IOS Samsung Internet WebView Android
MediaSource 3123–31 12 42 15 8 33 41 14
13Доступно в Mobile Safari на iPad, но не на iPhone.
2.0 4.4.3
MediaSource 3123–31 12 42 1815–18 8 3125–31 41 1814–18
13Доступно в Mobile Safari на iPad, но не на iPhone.
2.01.5–2.0 4.4.34.4–4.4.3
activeSourceBuffers 23 12 42 15 8 25 41 14
13Доступно в Mobile Safari на iPad, но не на iPhone.
1.5 4.4.3
addSourceBuffer 23 12 42 15 8 25 41 14
13Доступно в Mobile Safari на iPad, но не на iPhone.
1.5 4.4.3
canConstructInDedicatedWorker_static 108 108 Нет 94 18 108 Нет 73 18 21.0 108
clearLiveSeekableRange 62 17 50 49 10.1 62 50 46
13Доступно в Mobile Safari на iPad, но не на iPhone.
8.0 62
duration 23 12 42 15 8 25 41 14
13Доступно в Mobile Safari на iPad, но не на iPhone.
1.5 4.4.3
endOfStream 23 12 42 15 8 25 41 14
13Доступно в Mobile Safari на iPad, но не на iPhone.
1.5 4.4.3
handle 108 108 Нет 94 18 108 Нет 73 18 21.0 108
isTypeSupported_static
23["codecs string can contain any subset of optional parameters (should be all or none).", "Errors if codecs string contains unexpected characters (should evaluate string up to character)."]
12["codecs string can contain any subset of optional parameters (should be all or none).", "Errors if codecs string contains unexpected characters (should evaluate string up to character)."]
42Before Firefox 101, isTypeSupported() ignored codecs parameter options for av01 codecs (treating them as av1).
15["codecs string can contain any subset of optional parameters (should be all or none).", "Errors if codecs string contains unexpected characters (should evaluate string up to character)."]
8
25["codecs string can contain any subset of optional parameters (should be all or none).", "Errors if codecs string contains unexpected characters (should evaluate string up to character)."]
41Before Firefox 101, isTypeSupported() ignored codecs parameter options for av01 codecs (treating them as av1).
14["codecs string can contain any subset of optional parameters (should be all or none).", "Errors if codecs string contains unexpected characters (should evaluate string up to character)."]
13Доступно в Mobile Safari на iPad, но не на iPhone.
1.5["codecs string can contain any subset of optional parameters (should be all or none).", "Errors if codecs string contains unexpected characters (should evaluate string up to character)."]
4.4.3["codecs string can contain any subset of optional parameters (should be all or none).", "Errors if codecs string contains unexpected characters (should evaluate string up to character)."]
readyState 23 12 42 15 8 33 41 14
13Доступно в Mobile Safari на iPad, но не на iPhone.
2.0 4.4.3
removeSourceBuffer 23 12 42 15 8 25 41 14
13Доступно в Mobile Safari на iPad, но не на iPhone.
1.5 4.4.3
setLiveSeekableRange 62 17 50 49 10.1 62 50 46
13Доступно в Mobile Safari на iPad, но не на iPhone.
8.0 62
sourceBuffers 23 12 42 15 8 25 41 14
13Доступно в Mobile Safari на iPad, но не на iPhone.
1.5 4.4.3
sourceclose_event 53
31–53Свойство обработчика событий onsourceclose не поддерживается.
17
12–17Свойство обработчика событий onsourceclose не поддерживается.
87
42–87Свойство обработчика событий onsourceclose не поддерживается.
40
18–40Свойство обработчика событий onsourceclose не поддерживается.
10.1
8–10.1Свойство обработчика событий onsourceclose не поддерживается.
53
31–53Свойство обработчика событий onsourceclose не поддерживается.
87
41–87Свойство обработчика событий onsourceclose не поддерживается.
41
18–41Свойство обработчика событий onsourceclose не поддерживается.
13Доступно в Mobile Safari на iPad, но не на iPhone.
6.0
2.0–6.0Свойство обработчика событий onsourceclose не поддерживается.
53
4.4.3–53Свойство обработчика событий onsourceclose не поддерживается.
sourceended_event 53
31–53Свойство обработчика событий onsourceended не поддерживается.
17
12–17Свойство обработчика событий onsourceended не поддерживается.
42 40
18–40Свойство обработчика событий onsourceended не поддерживается.
10.1
8–10.1Свойство обработчика событий onsourceended не поддерживается.
53
31–53Свойство обработчика событий onsourceended не поддерживается.
41 41
18–41Свойство обработчика событий onsourceended не поддерживается.
13Доступно в Mobile Safari на iPad, но не на iPhone.
6.0
2.0–6.0Свойство обработчика событий onsourceended не поддерживается.
53
4.4.3–53Свойство обработчика событий onsourceclose не поддерживается.
sourceopen_event 53
31–53Свойство обработчика событий onsourceopen не поддерживается.
17
12–17Свойство обработчика событий onsourceopen не поддерживается.
42 40
18–40Свойство обработчика событий onsourceopen не поддерживается.
10.1
8–10.1Свойство обработчика событий onsourceopen не поддерживается.
53
31–53Свойство обработчика событий onsourceopen не поддерживается.
41 41
18–41Свойство обработчика событий onsourceopen не поддерживается.
13Доступно в Mobile Safari на iPad, но не на iPhone.
6.0
2.0–6.0Свойство обработчика событий onsourceopen не поддерживается.
53
4.4.3–53Свойство обработчика событий onsourceopen не поддерживается.
worker_support 108 108 Нет 94 Нет 108 Нет 73 Нет 21.0 108

См. также

  • SourceBuffer
  • SourceBufferList

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/MediaSource

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API