Как узнать длину MP3 из его URL? - PullRequest
3 голосов
/ 09 марта 2009

Если я знаю URL файла MP3, какой самый простой / быстрый способ получить его длину, битрейт, размер и т. Д.?

Как я могу загрузить только часть тега ID3 в MP3, чтобы получить эту информацию?

Ответы [ 6 ]

5 голосов
/ 09 марта 2009

Вам нужно будет посмотреть на теги ID3 в файле mp3.

Если вы не отслеживаете нужные метаданные где-либо еще.

Чтобы конкретно определить длину дорожки файла, вам нужно обязательно заглянуть в тег метаданных ID3, в частности, в кадр TRCK.

Чтобы загрузить только часть тега ID3, сначала необходимо загрузить часть заголовка ID3 файла.

Этот веб-сайт содержит очень конкретную информацию о формате тега ID3. Вам нужно будет посмотреть номер версии тега ID3, а затем, исходя из этого, вам нужно будет найти информацию о том, какова длина тега ID3. Затем необходимо загрузить тег ВЕСЬ, поскольку кадры расположены не в определенном порядке.

Тогда вы сможете использовать стороннюю библиотеку, чтобы найти кадр TRCK и его данные.

1 голос
/ 06 июля 2010

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

Получить размеры изображения с помощью Curl

Вы можете определенно использовать ту же технику для извлечения информации из тегов ID3 ​​без загрузки всего MP3 с удаленного сервера.

Надеюсь, это поможет будущим прохожим.

1 голос
/ 09 марта 2009

Какой самый простой / быстрый способ получить его длину, битрейт, размер и т. Д.?

Размер файла вы можете получить с помощью запроса HTTP HEAD. Если под «длиной» вы подразумеваете время воспроизведения в секундах, вы не сможете получить его, не загрузив весь файл. Вы можете догадаться , выбрав первые несколько кадров MP3, посмотрев на их битрейт и предположив, что остальная часть файла имеет тот же битрейт, но учитывая популярность кодирования с переменной битовой скоростью, вероятность этого быть близким к точному - довольно низкий.

Теги ID3 теоретически могут содержать информацию, которая может позволить вам лучше угадать длину в тегах ASPI и ETCO. Но на практике они встречаются очень редко.

Как я могу загрузить только часть тега ID3 в MP3, чтобы получить эту информацию?

Для тегов ID3v2 захватить начало файла. (Возможно, что кадры ID3v2 будут где-то еще, но на практике они всегда есть.) Вы не можете сказать, как долго тег будет впереди. Для текстовых тегов вы, вероятно, найдете нужную информацию в первых 512-1024 байтах. К сожалению, все больше и больше MP3-файлов имеют встроенные изображения обложек альбомов, которые могут быть намного длиннее; попытайтесь выбрать библиотеку ID3, которая будет изящно игнорировать усеченную информацию ID3.

Теги ID3v1 находятся в конце файла. Опять же, вы не можете сказать, как долго они будут. И, конечно, вы не знаете заранее, есть ли в файле теги ID3v1, теги ID3v2, оба или нет. Обычно в наши дни лучше использовать ID3v2.

Чтобы прочитать часть файла через HTTP, вам нужен заголовок Range . Это тоже не везде поддерживается.

Таким образом, с этим достаточно проблем, поэтому лучшим вариантом может быть отказ от простого извлечения всего файла.

1 голос
/ 09 марта 2009

Вот как вы получаете размер файла, но как вы получаете битрейт и длину трека?

import java.io.*;
import java.net.*;

public class FileSizeFromURL {
public static final void main(String[] args) {
URL url;
URLConnection conn;
int size;

if(args.length != 1) {
  System.out.println("Usage: FileSizeFromURL ");
  return;
  }

try {
  url = new URL(args[0]);
  conn = url.openConnection();
  size = conn.getContentLength();
  if(size < 0)
     System.out.println("Could not determine file size.");
  else
    System.out.println(args[0] + "\nSize: " + size);
  conn.getInputStream().close();
  } 
catch(Exception e) {
  e.printStackTrace();
  }
}
}
0 голосов
/ 09 марта 2009

Эти данные закодированы в теге id3, поэтому вам нужно загрузить хотя бы большую часть файла, который находится в начале, поэтому вам повезло.

В качестве альтернативы вы можете посмотреть значение заголовка content-length в заголовке ответа http, чтобы узнать длину, если сервер сообщает вам, что это не так.

0 голосов
/ 09 марта 2009

Вы не можете получить эту информацию только из URL.

Вам нужно будет загрузить первые несколько K контента и использовать библиотеку mp3 для декодирования заголовка и получения значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...