java - 如何在没有可显示组件的情况下使用 Java 获得 VLC 媒体播放器?

标签 java javafx vlc audio-player vlcj

我正在使用 VLCJ 绑定(bind),并最终克服了一些障碍。现在我在这里。 我(此时)不需要,也不渴望可见的媒体播放器组件(EmbeddedMediaPlayerComponent)。我现在需要的只是播放音频文件。 我有以下方法来为我处理这个问题:

public static void Play(File AudioFile){
    if (!LibVLCLoader.Loaded) LibVLCLoader.loadLibVLC();
    EmbeddedMediaPlayerComponent EMPC = new EmbeddedMediaPlayerComponent();
    if (EMPC.getMediaPlayer().prepareMedia(AudioFile.getAbsolutePath())){
        EMPC.getMediaPlayer().addMediaPlayerEventListener(new MediaPlayerEventAdapter(){
            @Override public void subItemFinished(MediaPlayer p, int i){
                EMPC.release(true);
            }
        });
        Platform.runLater(() -> EMPC.getMediaPlayer().play());
    }
}

但我不断收到此异常:

Exception in thread "JavaFX Application Thread" java.lang.IllegalStateException: The video surface component must be displayable

我明白了。这说得通。但我不需要它可见。我只需要声音。我怎样才能做到这一点?

最佳答案

EmbeddedMediaPlayer 仅适用于您想要在应用程序中实际嵌入视频表面的情况。

如果您只需要音频,可以使用 AudioMediaPlayerComponent 来明确此目的。

要创建这样的组件,只需:

AudioMediaPlayerComponent audioMediaPlayerComponent = 
    new AudioMediaPlayerComponent();

您可以对其进行子类化,例如自定义行为并轻松实现事件处理程序。

使用所谓的“组件”媒体播放器为您提供比使用通过 MediaPlayerFactory 创建的非“组件”媒体播放器稍微更好/更简单的 API。

如果您的媒体是音频文件,则效果很好。

如果您的媒体实际上是视频,但您只想播放音轨,那么即使您使用 AudioMediaPlayerComponent,默认情况下 VLC 也会打开一个视频窗口。在这种情况下,您仍然需要实际禁用视频输出 - 最简单的方法是告诉 VLC 使用 vcodec=dummy

我真的不同意创建窗口并将其移出屏幕或将其大小缩小到 1x1 之类的技巧,这是没有必要的。

在原始问题中发布的代码中存在一个不相关的问题。当 Play() 方法终止时,EMPCEMP 变量将超出范围,从而使媒体播放器符合垃圾回收的条件。将会发生的情况是,一段随机时间后,您的应用程序可能会崩溃,因为 vlcj 使用的 native Hook 将回调到不再存在的 Java 对象。您需要通过硬引用使媒体播放器引用保持 Activity 状态。

关于java - 如何在没有可显示组件的情况下使用 Java 获得 VLC 媒体播放器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25756172/

相关文章:

java - 无法在Android 6.0上加载vlcjni库

java - JNI 调用.NET dll

java.lang.ArrayIndexOutOfBoundsException : -1 future. get() 多线程

java - 对齐 Javafx 按钮的问题

java - 使用监听器动态添加文本字段

android - 无法在 vlc 上播放 android h264 编码的视频

java - 如何检查是否设置了表单或值?

java - 通过删除 Java 中的前导零来缩短十六进制数

java - 如何使用 gradle-launch4j 插件将 gradle 项目编译为 exe

javascript - 在 GWT 中嵌入 VLC 播放器