无法读取已解码的mp3流

时间:2012-08-09 09:59:16

标签: java audio javasound

我正在开发一个使用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打开,所以我相信应该有一个解决方法。任何想法如何应对它?

1 个答案:

答案 0 :(得分:1)

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