我正在使用JavaFX设置媒体播放器,但它不会播放网络上的任何音频。据我所知,是一个缓冲,先缓冲8192个字节然后播放它们。如果我尝试通过MediaPlayer进行操作,它将先下载整个音频文件,然后再开始播放。我将如何实现Android MediaPlayer#prepareAsync()
的替代方案。
我已经尝试过使用一个临时音频文件,并将其保存到/tmp/
private byte[] streamToBytes(String streamPath) {
// Doesn't work with normal inputstream either
Response r = KHttp.get(streamPath);
return r.getContent();
}
byte[] tuneAsBytes = streamToBytes(url);
File tempWebm = File.createTempFile("play", ".webm", null); //, getCacheDir()
tempWebm.deleteOnExit();
FileOutputStream fos = new FileOutputStream(tempWebm);
fos.write(tuneAsBytes);
fos.close();
Media media = new Media(tempWebm.toURI().toURL().toString());
musicMV.setMediaPlayer(new MediaPlayer(media));
musicMV.getMediaPlayer().play();
也尝试使用AudioClip
AudioClip ac = new AudioClip(tempWebm.toURI().toURL().toString());
ac.play();
我已经尽力尝试使用WebView打开文件,但是即使这样也行不通。
webView.getEngine().loadContent(audioUrl, "audio/webm");
webView.getEngine().getLoadWorker().stateProperty().addListener(
(observable, oldValue, newValue) -> {
System.out.println("oldValue: " + oldValue);
System.out.println("newValue: " + newValue);
if (newValue == Worker.State.SUCCEEDED) {
System.out.println("document finished loading");
}
}
);
此代码仅输出
oldValue: RUNNING
newValue: CANCELLED
请记住,所有URL都可以在浏览器中打开并且可以正常工作。但是URL不包含文件扩展名,所以可能是问题所在。
我希望音频可以通过MediaView播放,但是什么也没发生,或者下载整个媒体花费的时间很长。