Как воспроизводить аудиопотоки через MediaView - PullRequest
0 голосов
/ 12 мая 2019

Я настраиваю медиаплеер с 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 голосов
/ 13 июня 2019

Я заставил это работать, используя VLCJ, как показал @Samuel Philipp в комментарии к вопросу.

LINK

...