我正在开发一个从互联网上流式传输音乐的程序。当我流式传输歌曲时,我无法访问它的 URL。我只得到一个输入流和一些信息,如字节长度等。我想实现一个类似于 youtube 等上的搜索栏。到目前为止,我已经设法将搜索栏显示为 JSlider,最大值是流的长度(以字节为单位),值根据歌曲中的当前位置(以字节为单位)而变化.
现在 BasicPlayer 有一个名为 seek(long bytesToSkip) 的函数,当滑块被用户输入移动和释放时,我尝试调用它。但是 seek() 不会做任何事情。没有日志消息,什么都没有。所以我下载了 BasicPlayer 的源代码,发现 seek(long bytesToSkip) 调用了 skipBytes(long bytesToSkip) 来检查要播放的数据是否是文件。如果不是,它什么也做不了。
所以我删除了那个 if 子句,看看它会把我带到哪里。现在我遇到了一个例外
initAudioInputStream();
这将检查它正在处理的数据类型并为该类型的数据调用适当的方法。就我而言
initAudioInputStream(InputStream inputStream) {
m_audioInputStream = AudioSystem.getAudioInputStream(inputStream);
m_audioFileFormat = AudioSystem.getAudioFileFormat(inputStream);
}
在这两行的第一行中,我得到了我的例外。这是一个EOFException,所以我认为流没有“缓冲”到足以获取audioInputStream。如果该方法需要整个文件,我想我不走运。
我真的希望有人可以帮助我完成这项工作。我已经为此工作了很长时间..