【发布时间】:2015-08-12 16:39:39
【问题描述】:
我在本地 MP3file 上成功使用 getDuration,但是当远程 MP3stream 上的 getDuration 导致错误:java.io.IOException: mark/reset not supported.
本地 MP3 上的成功 getDuration:
public static void getDurationOff() throws UnsupportedAudioFileException, IOException {
int sumtime = 0;
File file = new File("D:\\java\\MusicMP3\\src\\Images\\Water_Lily.mp3");
AudioFileFormat fileFormat = AudioSystem.getAudioFileFormat(file);
if (fileFormat instanceof TAudioFileFormat) {
Map<?, ?> properties = ((TAudioFileFormat) fileFormat).properties();
Long microseconds = (Long) properties.get("duration");
//total seconds
sumtime = (int)(microseconds / 1000000);
System.out.println("Total seconds :"+sumtime);
}
}
远程 MP3 上的 getDuration 失败:
public static void getDurationOn() throws UnsupportedAudioFileException, IOException {
int sumtime = 0;
String linkonline="http://api.mp3.zing.vn/api/mobile/source/song/LmJnykGNlNmnNkuTZvctbGZm";
URLConnection urlConnection = new URL(linkonline).openConnection();
urlConnection.connect();
AudioFileFormat fileFormat = AudioSystem.getAudioFileFormat(urlConnection.getInputStream());
if (fileFormat instanceof TAudioFileFormat) {
Map<?, ?> properties = ((TAudioFileFormat) fileFormat).properties();
Long microseconds = (Long) properties.get("duration");
//total seconds
sumtime = (int)(microseconds / 1000000);
System.out.println("Total seconds :"+sumtime);
}
}
错误:
Exception in thread "main" java.io.IOException: mark/reset not
supported at
sun.net.www.http.KeepAliveStream.reset(KeepAliveStream.java:122) at
java.io.FilterInputStream.reset(FilterInputStream.java:226) at
sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.reset(HttpURLConnection.java:3299)
at
org.tritonus.share.sampled.file.TAudioFileReader.getAudioFileFormat(TAudioFileReader.java:184)
at
javax.sound.sampled.AudioSystem.getAudioFileFormat(AudioSystem.java:1004)
at musicmp3.demoGetlink.getDurationOn(demoGetlink.java:99) at
musicmp3.demoGetlink.main(demoGetlink.java:118) Java Result: 1
【问题讨论】:
-
修正语法和格式,添加到 Javasound 标签。
-
非常感谢,非常抱歉能够写出我的英语