MediaSource
Ограниченная доступность
Эта функция не относится к Baseline, так как она не работает в некоторых из наиболее широко используемых браузеров.
Примечание: Эта функция доступна в посвященных веб-воркерах.
Интерфейс MediaSource API расширений для источника медиаданных представляет собой источник данных медиа для объекта HTMLMediaElement. Объект MediaSource может быть присоединён к HTMLMediaElement для воспроизведения в пользовательском агенте.
Конструктор
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 |
5331–53Свойство обработчика событийonsourceclose не поддерживается. |
1712–17Свойство обработчика событийonsourceclose не поддерживается. |
8742–87Свойство обработчика событийonsourceclose не поддерживается. |
4018–40Свойство обработчика событийonsourceclose не поддерживается. |
10.18–10.1Свойство обработчика событийonsourceclose не поддерживается. |
5331–53Свойство обработчика событийonsourceclose не поддерживается. |
8741–87Свойство обработчика событийonsourceclose не поддерживается. |
4118–41Свойство обработчика событийonsourceclose не поддерживается. |
13Доступно в Mobile Safari на iPad, но не на iPhone. |
6.02.0–6.0Свойство обработчика событийonsourceclose не поддерживается. |
534.4.3–53Свойство обработчика событийonsourceclose не поддерживается. |
sourceended_event |
5331–53Свойство обработчика событийonsourceended не поддерживается. |
1712–17Свойство обработчика событийonsourceended не поддерживается. |
42 | 4018–40Свойство обработчика событийonsourceended не поддерживается. |
10.18–10.1Свойство обработчика событийonsourceended не поддерживается. |
5331–53Свойство обработчика событийonsourceended не поддерживается. |
41 | 4118–41Свойство обработчика событийonsourceended не поддерживается. |
13Доступно в Mobile Safari на iPad, но не на iPhone. |
6.02.0–6.0Свойство обработчика событийonsourceended не поддерживается. |
534.4.3–53Свойство обработчика событийonsourceclose не поддерживается. |
|---|---|---|---|---|---|---|---|---|---|---|---|
sourceopen_event |
5331–53Свойство обработчика событийonsourceopen не поддерживается. |
1712–17Свойство обработчика событийonsourceopen не поддерживается. |
42 | 4018–40Свойство обработчика событийonsourceopen не поддерживается. |
10.18–10.1Свойство обработчика событийonsourceopen не поддерживается. |
5331–53Свойство обработчика событийonsourceopen не поддерживается. |
41 | 4118–41Свойство обработчика событийonsourceopen не поддерживается. |
13Доступно в Mobile Safari на iPad, но не на iPhone. |
6.02.0–6.0Свойство обработчика событийonsourceopen не поддерживается. |
534.4.3–53Свойство обработчика событийonsourceopen не поддерживается. |
worker_support |
108 | 108 | Нет | 94 | Нет | 108 | Нет | 73 | Нет | 21.0 | 108 |
См. также
© 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