如何在Java中播放二进制流

时间:2014-01-23 10:09:47

标签: java audio-streaming

这个问题可能不会被正确地问,但我保证你会尽我所能。这是场景:我写了一个小Java应用程序,它接收来自服务器的音频流。现在,当我将二进制流重定向到文件,并将该文件传递给mplayer时,音频正确播放。我现在想要的是从我自己的应用程序播放音频。这是我到目前为止所得到的:

编解码器mplayer用于播放流: 音频:22050Hz,2ch,s16le,0.0kbit / 0.00%(比率:0-> 88200) 选定的音频编解码器:[ffaac] afm:ffmpeg(FFmpeg AAC(MPEG-2 / MPEG-4音频))

到目前为止我编码的内容:

public class StreamPlayer {
    public final AudioFormat audioFormat;
    public final DataLine.Info info;
    public final SourceDataLine soundLine;

    public StreamPlayer() throws LineUnavailableException {
        audioFormat = new AudioFormat(22050, 16, 2, true, true);
        info = new DataLine.Info(SourceDataLine.class, audioFormat, 1500);
        soundLine = (SourceDataLine) AudioSystem.getLine(info);
    }

    public void startSoundLine() throws LineUnavailableException {
        soundLine.open(audioFormat);
        soundLine.start();
    }

    public void playStream(byte[] buffer) {
        soundLine.write(buffer, 0, buffer.length);
    }
}

我为每个收到的数据包调用了playStream函数。没有报告错误,也没有听到声音。我甚至接近这样做,还是长时间拍摄?

P.S。我在谷歌上发现了一些第三方库,但我真的想把它们作为最后的手段。

谢谢!

1 个答案:

答案 0 :(得分:0)

将Bytes放入ByteArrayInputStream并将其反馈到streamplayer中...... ByteArrayInputStream audioStream = new ByteArrayInputStream(buffer);