Как заставить элемент аудио HTML5 буферировать всю песню?

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

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

Ответы

Ответ 1

Я нашел это решение:

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

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

Ответ 2

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

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

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

Другим вариантом является загрузка данных через XMLHttpRequest в виде двоичного blob и установка атрибута <audio> element src в URI блоба.

(Мне лично не очень нравится взлом/пауза).

Ответ 3

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