如何从其URL获取MP3的长度?

时间:2009-03-09 01:43:37

标签: java url properties mp3

如果我知道MP3文件的URL,获取其长度,比特率,大小等的最简单/最快的方法是什么?

如何只下载MP3的ID3标签部分以获取这些详细信息?

6 个答案:

答案 0 :(得分:5)

您需要查看mp3文件中的ID3标签。

除非您在其他地方跟踪您想要的元数据。

要专门获取文件的跟踪长度,您需要查看ID3元数据标记,特别是标记的“TRCK”框架。

要仅下载ID3标记部分,必须先下载文件的ID3标题部分。

website包含有关ID3标记格式的非常具体的信息。您需要查看ID3标签的版本号,然后,基于此,您需要找到有关ID3标签的时间长度的信息。然后,您必须下载WHOLE标记,因为框架没有任何特定顺序。

然后您应该能够使用第三方库来查找TRCK帧及其数据。

答案 1 :(得分:1)

以下是获取文件大小的方法,但是如何获得比特率和跟踪长度?

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();
  }
}
}

答案 2 :(得分:1)

  

获得长度,比特率,大小等最简单/最快捷的方式是什么?

使用HTTP HEAD请求可以获得的文件大小。如果按“长度”表示以秒为单位播放时间,则无法获取整个文件。您可以猜测,通过获取前几个MP3帧,查看它们的比特率,并假设文件的其余部分具有相同的比特率,但考虑到可变比特率编码的普及,这可能性将接近准确的是相当低的。

理论上,ID3标签可以包含可能允许您在ASPI和ETCO标签中更好地猜测长度的信息。但在实践中,这些很少出现。

  

如何只下载MP3的ID3标签部分以获取这些详细信息?

对于ID3v2标签,请抓取文件的开头。 (ID3v2帧可能在其他地方,但实际上它们总是在那里。)你无法预先确定标签的长度。对于纯文本标签,您可能会在前512-1024字节中找到所需的信息。不幸的是,越来越多的MP3嵌入了“专辑艺术”图片,这可能会更长;尝试选择一个优雅地忽略截断的ID3信息的ID3库。

ID3v1标签位于文件末尾。再一次,你无法分辨他们将会有多长时间。当然,您事先并不知道该文件是否具有ID3v1标签,ID3v2标签,两者都有或两者都没有。一般来说,这些天ID3v2是更好的选择。

要通过HTTP读取文件的一部分,您需要Range标头。这在任何地方都不受支持。

总之,这方面存在足够的问题,最好的选择可能就是放弃并只提取整个文件。

答案 3 :(得分:1)

我问了一年后这个问题+问题,但我确实有一些信息可以在以后添加。我回答了类似的问题,关于从远程服务器上的图像获取图像尺寸而不下载整个图像。请通过以下网址查看该讨论:

Get image dimensions with Curl

您绝对可以使用相同的技术从ID3标签中提取信息,而无需从远程服务器下载整个MP3。

我希望这有助于未来的路人。

答案 4 :(得分:0)

您无法仅通过网址获取此信息。

您必须加载前几K内容并使用mp3库解码标头并获取值。

答案 5 :(得分:0)

该数据在id3标签中进行编码,因此您需要至少下载该文件的大部分内容,这样您就很幸运。

或者,您可以查看http响应标头中的content-length标头值,以了解长度,如果服务器告诉您它可能不是。