0

私はmp3エンコーディング/デコーディングを使用するアプリケーションを開発しています。原則として、ほとんどのファイルで正しく動作しますが、いくつかの例外があります。これらのファイルにヘッダーがないことを検出しました。デコードしようとすると、配列の範囲外の例外が発生します。私は2つのアプローチを使用しましたが、どちらも失敗しました。

最初:

    DecodedMpegAudioInputStream dais = (DecodedMpegAudioInputStream) AudioSystem.getAudioInputStream(daisf, ais);
    byte[] audioData = IOUtils.toByteArray(dais);//exception here

そして2番目:

    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で開くことができるので、回避策があるはずです。それに対抗する方法はありますか?

4

1 に答える 1

1

コードの冗長性を使用して、信頼性を向上させることができます。XugglerやJLayerなどの代替ライブラリを調べてください。

于 2012-08-09T11:39:00.737 に答える