java - 如何通过MediaView播放音频流

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

最佳答案

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

LINK

关于java - 如何通过MediaView播放音频流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56099441/

相关文章:

java - Hibernate Save 总是返回 0

java - 如何录制 Android 模拟器操作的屏幕

java - 字符串输入参数的 SSRF CheckMarx 漏洞

java - 在android中获取运行时权限

java - 如何正确调整大图像的大小?

actionscript-3 - 当外部文件中的数字更改时播放声音

java - 如何在 JavaFX 中双向绑定(bind)嵌套属性?

java - 找不到符号 event.getKeyCode()

python - 我如何在 python 3 中播放声音?

javascript - 将录制的音频从浏览器发送到 django 服务器并另存为 .wav