Ответ 1
Я нашел это решение:
function load() {
a.play();
setTimeout("a.pause()", 10);
}
Воспроизвести файл и приостановить его через 10 мс, затем браузер будет буферизовать всю песню.
Я разрабатываю локальный сервер, который будет передавать аудиофайлы пользователя, чтобы они могли получить к ним доступ через веб-браузеры, используя аудио-объект HTML5. Поскольку эти файлы находятся на пользовательском компьютере, я ожидаю, что файлы будут полностью заполнены буфером, когда они будут загружены, но для некоторых больших файлов песни будут затушевываться частично, а затем остановятся и возобновят буферизацию через некоторое время.
Мой вопрос: как я могу заставить аудиообъект одновременно сохранить всю песню? Могу ли я сделать это из javascript, нужно ли мне устанавливать атрибут на аудиообъект или что-нибудь еще, что я могу сделать?
Я нашел это решение:
function load() {
a.play();
setTimeout("a.pause()", 10);
}
Воспроизвести файл и приостановить его через 10 мс, затем браузер будет буферизовать всю песню.
Вы можете использовать метод 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 блоба.
(Мне лично не очень нравится взлом/пауза).
Вы можете установить атрибут preload = "auto". Он не гарантирует ничего, но должен сказать, что пользовательский агент должен буферировать столько, сколько он хочет, не заботясь о удаленном конце. http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#attr-media-preload