Как заставить аудио-элемент HTML5 буферизовать всю песню? - PullRequest
14 голосов
/ 22 января 2011

Я разрабатываю локальный сервер, который будет транслировать аудиофайлы пользователя, чтобы они могли обращаться к ним через веб-браузеры, используя аудиообъект HTML5. Поскольку эти файлы находятся на компьютере пользователя, я ожидаю, что файлы будут полностью буферизироваться при загрузке, но для некоторых больших файлов песни буферизуются частично, затем останавливаются и возобновляют буферизацию через некоторое время.

Мой вопрос: как я могу заставить аудиообъект буферизовать всю песню сразу? Могу ли я сделать это из javascript, мне нужно установить атрибут для аудиообъекта или есть что-то еще, что я могу сделать?

Ответы [ 3 ]

7 голосов
/ 10 февраля 2012

Решение, которое я нашел, было таким:

function load() {
    a.play();
    setTimeout("a.pause()", 10);
}

Воспроизведите файл и приостановите его через 10 мс, после чего браузер сохранит в буфере всю песню.

3 голосов
/ 27 февраля 2013

Вы можете использовать метод load(). Это в основном заставляет preload="auto". Но это, вероятно, не буферизирует все это.

У меня была проблема с тем, что звук не был предварительно загружен на мобильные устройства (даже с preload=auto), но этот метод работал.

http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#dfnReturnLink-2

Другой вариант - загрузить данные через XMLHttpRequest в виде двоичного двоичного объекта и установить для атрибута src элемента <audio> значение URI BLOB-объекта.

(мне лично не очень нравится взломать play / pause.)

1 голос
/ 22 января 2011

Вы можете установить атрибут preload = "auto".Ничего не гарантируется, но предполагается, что пользовательский агент должен буферизовать столько, сколько хочет, не заботясь об удаленном конце.http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#attr-media-preload

...