0

我正在开发一个使用 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流具有内容/字节。然而,它可以用 audacity 和 ffplay 打开,所以我相信应该有一个解决方法。任何想法如何应对它?

4

1 回答 1

1

您可以使用代码冗余来提高可靠性。查看替代库,例如 Xuggler 或 JLayer。

于 2012-08-09T11:39:00.737 回答