Определить длину аудиофайла, если загрузка аудиотега src не удалась Javascript

хорошо, поэтому я провел некоторое исследование, и мне показалось, что лучший способ определить длину аудиофайла с помощью javascript — это создать тег <audio>, установить путь к файлу для атрибута src, добавить дочерний элемент в DOM, а затем привязать loadedmetadata eventListener в теге <audio> и используйте свойство duration аудиотега, чтобы получить длину аудиофайла. Это прекрасно работает, за исключением...

иногда и случайным образом загрузка аудиофайла завершается ошибкой. мой код делает запрос на файл, но никогда не получает ответа. Тег по-прежнему создается и добавляется к DOM, но tag.duration = NaN.

Есть ли другой способ определить длину аудиофайла с помощью javascript? все это часть взлома опроса Qualtrics, который невероятно ограничителен, поэтому я хотел бы придерживаться обычного javascript (без jquery), потому что это серьезная проблема и ошибка, чтобы попытаться использовать jquery с qualtrics.

чтобы сделать вещи более раздражающими, файл, который я запрашиваю, на самом деле является файлом php с именем файла в качестве параметра запроса, например File.php?F=92kls02jf9. вот как это делает qualtrics, так что не спрашивайте... не уверен, помогает это или вредит, но я решил добавить это.


person celeriko    schedule 26.01.2014    source источник


Ответы (1)


Вы можете попробовать запрос AJAX, отправив HTTP HEAD. Ссылка:

Заголовок Content-Length с запросами HEAD?

person pid    schedule 26.01.2014
comment
хорошо, но это браузер, который запрашивает аудиофайл, когда я добавляю тег <audio>, поэтому я действительно не могу контролировать, как он выполняет этот запрос. Правильно? - person celeriko; 26.01.2014
comment
В JS вам действительно не нужно прикреплять тег <audio>, вы можете создать new Audio() без узла DOM и потоковой передачи данных с помощью URI. Посмотрите здесь: position-absolute. ком/статьи/ - person pid; 26.01.2014
comment
хорошо, но new Audio() делает то же самое, что и прикрепление тега <audio>, просто делает все это за один шаг. это все еще не решает мою проблему, что src иногда не загружается - person celeriko; 26.01.2014
comment
Неправильный. При загрузке вручную возникают события, похожие на AJAX, например onerror: htmlgoodies.com/html5/tutorials/ - person pid; 26.01.2014
comment
хорошо, но это все еще не помогает мне получить продолжительность аудиофайла при сбое загрузки. - person celeriko; 26.01.2014
comment
Ну... нет, это тебе мало поможет. Это может дать вам какой-то запасной вариант, действовать при повторной попытке перезапуска и тому подобное. Но да, в конце концов, это не быстрое решение вашей проблемы. Я не могу помочь вам больше, чем это. Вы должны перефразировать вопрос, добавить немного кода и опубликовать его снова, надеясь, что вы сможете получить ответ от кого-то еще. Тем не менее, хорошего дня! - person pid; 26.01.2014
comment
хорошо, да, у меня уже есть запасной вариант, когда возникают ошибки, когда нужно просто угадать, как долго будет аудиофайл. это просто хромое решение. в любом случае, спасибо за помощь, я не думаю, что есть способ сделать то, что я хочу, в рамках ограничений этого дерьмового программного обеспечения Qualtrics ... ну ладно - person celeriko; 26.01.2014
comment
По моему опыту, такая проблема часто связана с сервером, а не с клиентом. С идеальным сервером (без задержек, ничего не замедляющего) очень хорошо работают очень простые действия JS (например, new Audio() или добавление аудиоузла). Как только это настоящий сервер с трафиком и всем остальным, это неизбежно случается время от времени. - person pid; 26.01.2014
comment
да... и, конечно же, у меня нет доступа к серверу, еще раз спасибо, приятель! - person celeriko; 27.01.2014