Java 如何从其URL获取MP3的长度?
如果我知道MP3文件的URL,那么获取其长度、比特率、大小等的最简单/最快方法是什么Java 如何从其URL获取MP3的长度?,java,url,properties,mp3,Java,Url,Properties,Mp3,如果我知道MP3文件的URL,那么获取其长度、比特率、大小等的最简单/最快方法是什么 如何仅下载MP3的ID3标签部分来获取这些详细信息?您无法仅从URL获取这些信息 您必须加载前几K个内容,并使用mp3库对标题进行解码并获取值。您需要查看mp3文件中的ID3标记 除非您在其他地方跟踪所需的元数据 要具体获取文件的跟踪长度,您需要查看ID3元数据标记,特别是标记的“TRCK”框架 要仅下载ID3标记部分,必须首先下载文件的ID3头部分 这包含关于ID3标记格式的非常具体的信息。您需要查看ID3标
如何仅下载MP3的ID3标签部分来获取这些详细信息?您无法仅从URL获取这些信息
您必须加载前几K个内容,并使用mp3库对标题进行解码并获取值。您需要查看mp3文件中的ID3标记 除非您在其他地方跟踪所需的元数据 要具体获取文件的跟踪长度,您需要查看ID3元数据标记,特别是标记的“TRCK”框架 要仅下载ID3标记部分,必须首先下载文件的ID3头部分 这包含关于ID3标记格式的非常具体的信息。您需要查看ID3标记的版本号,然后在此基础上,您需要找到有关ID3标记的长度的信息。然后,您必须下载整个标记,因为帧没有任何特定的顺序
然后,您应该能够使用第三方库来查找TRCK帧及其数据。该数据编码在id3标记中,因此您至少需要下载该文件的大部分,这是在开始时,因此您很幸运
或者,您可以查看http响应标头中的content length标头值以了解长度,如果服务器告诉您可能不知道该值。以下是获取文件大小的方法,但如何获取比特率和磁道长度
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();
}
}
}
import java.io.*;
导入java.net。*;
公共类FileSizeFromURL{
公共静态最终void main(字符串[]args){
网址;
连接连接;
整数大小;
如果(args.length!=1){
System.out.println(“用法:FileSizeFromURL”);
返回;
}
试一试{
url=新url(参数[0]);
conn=url.openConnection();
size=conn.getContentLength();
如果(尺寸<0)
System.out.println(“无法确定文件大小”);
其他的
System.out.println(参数[0]+“\n大小:”+size);
conn.getInputStream().close();
}
捕获(例外e){
e、 printStackTrace();
}
}
}
获取其长度、比特率、大小等的最简单/最快方法是什么
通过HTTP头请求可以获得的文件大小。如果“长度”指的是以秒为单位的播放时间,则在不获取整个文件的情况下,无法获取该长度。通过获取前几个MP3帧,查看它们的比特率,并假设文件的其余部分具有相同的比特率,您可以猜测,但鉴于可变比特率编码的流行,接近准确的可能性非常低
ID3标签理论上可以包含一些信息,这些信息可以让您更好地猜测ASPI和ETCO标签中的长度。但在实践中,这些情况很少出现
我如何下载MP3的ID3标签部分来获得这些详细信息
对于ID3v2标记,抓取文件的开头。(ID3v2帧可能位于其他位置,但实际上它们总是在那里。)您无法预知标记将提前多长时间。对于纯文本标记,您可能会在前512-1024字节中找到所需的信息。不幸的是,越来越多的MP3嵌入了“相册艺术”图片,这些图片可能会更长;尝试选择一个ID3库,它将优雅地忽略截断的ID3信息
ID3v1标记位于文件的末尾。同样,你也不知道它们会持续多久。当然,您事先不知道文件是否有ID3v1标记,ID3v2标记,两者都有,或者两者都没有。一般来说,现在ID3v2是一个更好的选择
要通过HTTP读取文件的一部分,需要标头。并非所有地方都支持这一点
总之,这方面的问题已经够多了,最好的选择可能是放弃,只获取整个文件。我在被问到这个问题一年多后才回答这个问题,但我确实有一些信息要补充,以供以后参考。我回答了一个类似的问题,即从远程服务器上的图像获取图像尺寸,而不下载整个图像。请参见以下URL上的讨论: 您完全可以使用相同的技术从ID3标签中提取信息,而无需从远程服务器下载整个MP3
我希望这对未来的过路人有所帮助。尝试其他答案中的建议?最好是将此作为一个头部请求,而不是获得。请参见例如HttpURLConnection.setRequestMethod。