我正在开发一个使用mp3编码/解码的应用程序。虽然原则上它对大多数文件都是正确的,但也有一些例外。我检测到这些文件缺少标题。尝试解码时,我得到一个超出绑定异常的数组。我使用了两种方法,但都失败了。
第一个:
DecodedMpegAudioInputStream dais = (DecodedMpegAudioInputStream) AudioSystem.getAudioInputStream(daisf, ais);
byte[] audioData = IOUtils.toByteArray(dais);//exception here
第二个:
ByteOutputStream bos = new ByteOutputStream();
// Get the decoded stream.
byte[] byteData = new byte[1];
int nBytesRead = 0;
int offset = 0;
int cnt=1;
while (nBytesRead != -1) {
System.out.println("cnt="+cnt);
nBytesRead = dais.read(byteData, offset, byteData.length);//exception here at first loop
if (nBytesRead != -1) {
int numShorts = nBytesRead >> 1;
for (int j = 0; j < numShorts; j++) {
bos.write(byteData[j]);
}
}
cnt+=1;
}
byte[] audioData = bos.getBytes();
似乎标题或其结构存在问题,因为 dais 流具有内容/字节。但是它可以用大胆和ffplay打开,所以我相信应该有一个解决方法。任何想法如何应对它?
答案 0 :(得分:1)
您可以使用代码冗余来提高可靠性。查看替代库,例如Xuggler或JLayer。