SourceBuffer
Ограниченная доступность
Эта функция не относится к Baseline, так как она не работает в некоторых из самых широко используемых браузеров.
Примечание: Эта функция доступна в Посвящённых веб-рабочих процессах.
Интерфейс SourceBuffer представляет собой фрагмент медиаданных, которые будут переданы в HTMLMediaElement и воспроизведены через объект MediaSource. Он может состоять из одного или нескольких медиасегментов.
Свойства экземпляра
SourceBuffer.appendWindowEnd-
Управляет меткой времени конца окна добавления.
SourceBuffer.appendWindowStart-
Управляет меткой времени начала окна добавления. Это диапазон меток времени, который может использоваться для фильтрации медиаданных, добавляемых к
SourceBuffer. Кодированные кадры медиа с метками времени в этом диапазоне будут добавлены, а те, что вне диапазона, будут отфильтрованы. -
SourceBuffer.audioTracksТолько для чтения -
Список аудиодорожек, содержащихся в настоящее время в
SourceBuffer. -
SourceBuffer.bufferedТолько для чтения -
Возвращает диапазоны времени, которые в настоящее время буферизованы в
SourceBuffer. SourceBuffer.mode-
Управляет тем, как обрабатывается порядок медиасегментов в
SourceBuffer, в зависимости от того, могут ли они быть добавлены в любом порядке или должны сохраняться в строгой последовательности. -
SourceBuffer.textTracksТолько для чтения Экспериментальный -
Список текстовых дорожек, в настоящее время содержащихся в
SourceBuffer. SourceBuffer.timestampOffset-
Управляет смещением, применяемым к меткам времени внутри медиасегментов, которые впоследствии добавляются к
SourceBuffer. -
SourceBuffer.updatingТолько для чтения -
Булевое значение, указывающее, обновляется ли в настоящее время
SourceBuffer— то есть, выполняется ли в настоящее время операцияSourceBuffer.appendBuffer()илиSourceBuffer.remove(). -
SourceBuffer.videoTracksТолько для чтения -
Список видеодорожек, содержащихся в настоящее время в
SourceBuffer.
Методы экземпляра
Наследует методы от своего родительского интерфейса, EventTarget.
SourceBuffer.abort()-
Прерывает текущий сегмент и сбрасывает парсер сегментов.
SourceBuffer.appendBuffer()-
Добавляет данные медиасегмента из объекта
ArrayBuffer,TypedArrayилиDataViewвSourceBuffer. -
SourceBuffer.appendBufferAsync()Нестандартный Экспериментальный -
Запускает процесс асинхронного добавления указанного буфера в
SourceBuffer. ВозвращаетPromise, который выполняется, как только буфер будет добавлен. SourceBuffer.changeType()-
Изменяет MIME-тип, который будущие вызовы
appendBuffer()будут ожидать от новых данных. SourceBuffer.remove()-
Удаляет медиасегменты в определенном диапазоне времени из
SourceBuffer. -
SourceBuffer.removeAsync()Нестандартный Экспериментальный -
Запускает процесс асинхронного удаления медиасегментов в указанном диапазоне из
SourceBuffer. ВозвращаетPromise, который выполняется после удаления всех соответствующих сегментов.
События
abort-
Срабатывает всякий раз, когда
SourceBuffer.appendBuffer()завершается вызовомSourceBuffer.abort().SourceBuffer.updatingизменяется сtrueнаfalse. error-
Срабатывает всякий раз, когда во время
SourceBuffer.appendBuffer()возникает ошибка.SourceBuffer.updatingизменяется сtrueнаfalse. update-
Срабатывает всякий раз, когда
SourceBuffer.appendBuffer()илиSourceBuffer.remove()завершается.SourceBuffer.updatingизменяется сtrueнаfalse. Это событие срабатывает доupdateend. updateend-
Срабатывает после завершения
SourceBuffer.appendBuffer()илиSourceBuffer.remove(). Это событие срабатывает послеupdate. updatestart-
Срабатывает всякий раз, когда значение
SourceBuffer.updatingизменяется сfalseнаtrue.
Примеры
Загрузка видео по частям
Следующий пример загружает видео по частям как можно быстрее, воспроизводя его, как только это возможно.
Полный код вы можете посмотреть на https://github.com/mdn/dom-examples/tree/main/sourcebuffer, а демо-версию попробовать на https://mdn.github.io/dom-examples/sourcebuffer/.
const video = document.querySelector("video");
const assetURL = "frag_bunny.mp4";
// Need to be specific for Blink regarding codecs
const mimeCodec = 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"';
function loadVideo() {
if (MediaSource.isTypeSupported(mimeCodec)) {
const 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);
}
}
async function sourceOpen() {
console.log(this.readyState); // open
const mediaSource = this;
const sourceBuffer = mediaSource.addSourceBuffer(mimeCodec);
const response = await fetch(assetURL);
const buffer = await response.arrayBuffer();
sourceBuffer.addEventListener("updateend", () => {
mediaSource.endOfStream();
video.play();
console.log(mediaSource.readyState); // ended
});
sourceBuffer.appendBuffer(buffer);
}
const load = document.querySelector("#load");
load.addEventListener("click", loadVideo);
Спецификации
| Спецификация |
|---|
| Media Source Extensions™ # sourcebuffer |
Совместимость браузеров
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
SourceBuffer |
3123–31 | 12 | 42 | 1815–18 | 8 | 3125–31 | 42 | 1814–18 | 13Доступно в Mobile Safari на iPad, но не на iPhone. |
3.02.0–3.0 | 4.4.34.4–4.4.3 |
|---|---|---|---|---|---|---|---|---|---|---|---|
abort |
23 | 12 | 42 | 15 | 8 | 25 | 42 | 14 | 13Доступно в Mobile Safari на iPad, но не на iPhone. |
2.0 | 4.4.3 |
abort_event |
5331–53Свойство обработчика событийonabort не поддерживается. |
1712–17Свойство обработчика событийonabort не поддерживается. |
42 | 4018–40Свойство обработчика событийonabort не поддерживается. |
10.18–10.1Свойство обработчика событийonabort не поддерживается. |
5331–53Свойство обработчика событийonabort не поддерживается. |
42 | 4118–41Свойство обработчика событийonabort не поддерживается. |
13Доступно в Mobile Safari на iPad, но не на iPhone. |
6.02.0–6.0Свойство обработчика событийonabort не поддерживается. |
534.4.3–53Свойство обработчика событийonabort не поддерживается. |
appendBuffer |
23 | 12 | 42 | 15 | 8 | 33 | 42 | 14 | 13Доступно в Mobile Safari на iPad, но не на iPhone. |
3.0 | 4.4.3 |
appendBufferAsync |
Нет | Нет | 62 | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет |
appendWindowEnd |
23 | 12 | 42 | 15 | 8 | 33 | 42 | 14 | 13Доступно в Mobile Safari на iPad, но не на iPhone. |
3.0 | 4.4.3 |
appendWindowStart |
23 | 12 | 42 | 15 | 8 | 33 | 42 | 14 | 13Доступно в Mobile Safari на iPad, но не на iPhone. |
3.0 | 4.4.3 |
audioTracks |
70 | 7912–79 | Нет | 57 | 8 | 70 | Нет | Нет | 13Доступно в Mobile Safari на iPad, но не на iPhone. |
Нет | Нет |
buffered |
23 | 12 | 42 | 15 | 8 | 33 | 42 | 14 | 13Доступно в Mobile Safari на iPad, но не на iPhone. |
3.0 | 4.4.3 |
changeType |
70 | 79 | 63 | 57 | 12.1 | 70 | 63 | 49 | 13Доступно в Mobile Safari на iPad, но не на iPhone. |
10.0 | 70 |
error_event |
5331–53Свойство обработчика событийonerror не поддерживается. |
1712–17Свойство обработчика событийonerror не поддерживается. |
42 | 4018–40Свойство обработчика событийonerror не поддерживается. |
10.18–10.1Свойство обработчика событийonerror не поддерживается. |
5331–53Свойство обработчика событийonerror не поддерживается. |
42 | 4118–41Свойство обработчика событийonerror не поддерживается. |
13Доступно в Mobile Safari на iPad, но не на iPhone. |
6.02.0–6.0Свойство обработчика событийonerror не поддерживается. |
534.4.3–53Свойство обработчика событийonerror не поддерживается. |
mode |
23 | 12 | 42 | 15 | 8 | 33 | 42 | 14 | 13Доступно в Mobile Safari на iPad, но не на iPhone. |
3.0 | 4.4.3 |
remove |
23 | 12 | 42 | 15 | 8 | 33 | 42 | 14 | 13Доступно в Mobile Safari на iPad, но не на iPhone. |
3.0 | 4.4.3 |
removeAsync |
Нет | Нет | 62 | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет |
textTracks |
Нет | Нет | Нет | Нет | 8 | Нет | Нет | Нет | 13Доступно в Mobile Safari на iPad, но не на iPhone. |
Нет | Нет |
timestampOffset |
23 | 12 | 42 | 15 | 8 | 33 | 42 | 14 | 13Доступно в Mobile Safari на iPad, но не на iPhone. |
3.0 | 4.4.3 |
update_event |
5331–53Свойство обработчика событийonupdate не поддерживается. |
1712–17Свойство обработчика событийonupdate не поддерживается. |
42 | 4018–40Свойство обработчика событийonupdate не поддерживается. |
10.18–10.1Свойство обработчика событийonupdate не поддерживается. |
5331–53Свойство обработчика событийonupdate не поддерживается. |
42 | 4118–41Свойство обработчика событийonupdate не поддерживается. |
13Доступно в Mobile Safari на iPad, но не на iPhone. |
6.02.0–6.0Свойство обработчика событийonupdate не поддерживается. |
534.4.3–53Свойство обработчика событийonupdate не поддерживается. |
updateend_event |
5331–53Свойство обработчика событийonupdateend не поддерживается. |
1712–17Свойство обработчика событийonupdateend не поддерживается. |
42 | 4018–40Свойство обработчика событийonupdateend не поддерживается. |
10.18–10.1Свойство обработчика событийonupdateend не поддерживается. |
5331–53Свойство обработчика событийonupdateend не поддерживается. |
42 | 4118–41Свойство обработчика событийonupdateend не поддерживается. |
13Доступно в Mobile Safari на iPad, но не на iPhone. |
6.02.0–6.0Свойство обработчика событийonupdateend не поддерживается. |
534.4.3–53Свойство обработчика событийonupdateend не поддерживается. |
|---|---|---|---|---|---|---|---|---|---|---|---|
updatestart_event |
5331–53Свойство обработчика событийonupdatestart не поддерживается. |
1712–17Свойство обработчика событийonupdatestart не поддерживается. |
42 | 4018–40Свойство обработчика событийonupdatestart не поддерживается. |
10.18–10.1Свойство обработчика событийonupdatestart не поддерживается. |
5331–53Свойство обработчика событийonupdatestart не поддерживается. |
42 | 4118–41Свойство обработчика событийonupdatestart не поддерживается. |
13Доступно в Mobile Safari на iPad, но не на iPhone. |
6.02.0–6.0Свойство обработчика событийonupdatestart не поддерживается. |
534.4.3–53Свойство обработчика событийonupdatestart не поддерживается. |
updating |
23 | 12 | 42 | 15 | 8 | 33 | 42 | 14 | 13Доступно в Mobile Safari на iPad, но не на iPhone. |
3.0 | 4.4.3 |
videoTracks |
70 | 7912–79 | Нет | 57 | 8 | 70 | Нет | Нет | 13Доступно в Mobile Safari на iPad, но не на iPhone. |
Нет | Нет |
См. также
© 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/SourceBuffer