如何通过MediaView播放音频流

时间:2019-05-12 12:54:14

标签: java javafx audio audio-streaming

我正在使用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播放,但是什么也没发生,或者下载整个媒体花费的时间很长。

1 个答案:

答案 0 :(得分:0)

我使用VLCJ使其工作,如问题评论中的@Samuel Philipp所示。

LINK