我正在使用我的HTTP服务器,目前我正在实现向客户端读取和显示媒体标签和文件信息(如mp4,m4a,wav等)的功能。到目前为止,我有标题,如标题,曲目编号,年份,相册,艺术家,版权等,使用JAudioTagger(可用二进制文件here,网站here)完美地处理多个文件扩展名
我现在要做的是实现读取和转换图像数据或专辑图片/封面数据的能力,并将这些数据分别作为png,jpeg等发送给客户端。我访问并阅读了有关APIC标记here的官方部分,但我无法弄清楚如何转换数据或数据实际在标记中的开始位置。
以下是我为从包含它的文件中检索专辑图片数据而编写的代码:
public static final byte[] readFileArtwork(File file) {
if(file == null || !file.isFile()) {
return null;
}
AudioFile afile = null;
try {
afile = AudioFileIO.read(file);
} catch(CannotReadException e) {
System.err.print("Unable to read file: ");
e.printStackTrace();
} catch(IOException e) {
System.err.print("An I/O Exception occurred: ");
e.printStackTrace();
} catch(TagException e) {
System.err.print("Unable to read file's tag data: ");
e.printStackTrace();
} catch(ReadOnlyFileException e) {//???
System.err.print("Unable to read file: File is read only: ");
e.printStackTrace();
} catch(InvalidAudioFrameException e) {
System.err.print("Unable to read file's audio frame data: ");
e.printStackTrace();
}
byte[] data = new byte[0];
if(afile == null) {
return data;
}
Iterator<TagField> tags = afile.getTag().getFields();
while(tags.hasNext()) {
TagField tag = tags.next();
if(tag.isBinary()) {
if(tag.getId().equals("APIC")) {
try {
data = tag.getRawContent();
} catch(UnsupportedEncodingException e) {
System.err.print("Unable to read file's image data: ");
e.printStackTrace();
}
}
}
}
return data == null ? new byte[0] : data;
}
答案 0 :(得分:2)