Под длиной в данном случае подразумевается продожительность.
С самого начала разработки наступил на очень интересные "грабли".
Изначально хотелось в выдаче указывать продолжительность найденых mp3 файлов(в купе с физической длиной и id3 информацией) для того, чтобы пользователи могли определить - соответсвует результат запросу или нет. Естественно - качать каждый файл желания никакого не было и нет.
И тут началось самое интересное.
Немного о формате.
Формат mp3 имеет фреймовую структуру(это от того, что файл кодируется не сразу и целиком, а делится сначала на определенного размера блоки(фреймы) и эти блоки кодируются отдельно). И вот таких фреймов может быть не один и не два.
Первое, что бросилось в глаза в формате заголовка фрейма - отсутсвие информации о длине. Второй неприятный момент - это то, что битрейт может быть разным (т.н. VBR)для различных фреймов.
Что ж, длинну композиции, не имея в своем распоряжении всего файла точно определить неудастся. А жаль.
Конечно, можно было пойти другим путем - если битрейт постоянный и известен размер файла можно _примерно_ определить продолжительность(что не есть хорошо, но лучше, чем ничего). Т.е. этот вариант отпадает также (т.к. все фреймы без файла не получим, битрейты соответсвенно - тоже не знаем).
Но и на этом неприятности не кончились.
Как известно - существует две версии ID3 Tag'ов - первая и вторая. Так вот, первая версия распологается в конце файла(последние 128 байт, если не ошибаюсь), а вторая - в начале. Т.е. для получения ID3v1 опять же необходимо скачивать полностью весь файл.
Не хочется отказываться от таких, достаточно важных, для сервиса функциональностей, но, видимо придется на некоторое время отложить их реализацию.
Время - деньги.
PS: возможно кто-то cможет дать совет, как бороться с вышеописанными проблемами ?
Wednesday, March 28, 2007
Определение длины mp3 файла (удаленного)
Subscribe to:
Post Comments (Atom)
2 комментария(ев):
Ну, на сколько я помню, тэг вообще может распологаться хоть между фреймами... я не уверен в этом конечно, но вроде как такое тоже бывает. Я бы почитал на этот счет описание формата. Кроме того, есть еще проблема с (а) кодировкой (б) несоответствием информации тэга ID3v1 и ID3v2.
Скорее всего -да. Это 128 байт, в которой первый 3 символа - слово TAG.
На необходимость расположения в определенной части файла указаний в спеке не нашел.
Несоответсвие информации - это просто два отдельных класса для двух форматов. Или один в зависимсоти от степени отличий.
Вот с кодировкой - это да. Извечная проблема.
Post a Comment