java - 如何使用 VLCJ 和 JavaFX 播放视频文件?

标签 java video javafx vlc vlcj

我知道JavaFX有它自己的媒体播放器,但我不知道它是否可以播放MP4文件。 即使可以,我仍然更喜欢使用 VLCJ,因为 VLC 支持的格式和种类比我在近乎紧张的状态下所能计算的还要多。

我遵循了 Caprical 在他的 VLCJ-JavaFX GitHub 中发布的示例,但它什么也没做。 它没有错误,但什么也没做。

查看代码,问题似乎出在时间轴事件处理程序中:

private final EventHandler<ActionEvent> nextFrame = new EventHandler<ActionEvent>() {
    @Override
    public void handle(ActionEvent t) {
        Memory[] nativeBuffers = mediaPlayerComponent.getMediaPlayer().lock();
        if (nativeBuffers != null) { //<-----This is always NULL so everything in the block is skipped . . . 
            // FIXME there may be more efficient ways to do this...
            // Since this is now being called by a specific rendering time, independent of the native video callbacks being
            // invoked, some more defensive conditional checks are needed
            Memory nativeBuffer = nativeBuffers[0];
            if (nativeBuffer != null) {
                ByteBuffer byteBuffer = nativeBuffer.getByteBuffer(0, nativeBuffer.size());
                BufferFormat bufferFormat = ((DefaultDirectMediaPlayer) mediaPlayerComponent.getMediaPlayer()).getBufferFormat();
                if (bufferFormat.getWidth() > 0 && bufferFormat.getHeight() > 0) {
                    pixelWriter.setPixels(0, 0, bufferFormat.getWidth(), bufferFormat.getHeight(), pixelFormat, byteBuffer, bufferFormat.getPitches()[0]);
                }
            }
        }
        mediaPlayerComponent.getMediaPlayer().unlock();
    };
};

有人建议我获取日志,但这必须等待,因为我在发表这篇文章时陷入了昏迷(当我回到生者之地时,我会看看我能做些什么来发布一些日志)。如果有更好的方法来实现这一点,如果有人可以指导我,我会全力支持。谢谢...

最佳答案

Github 项目上的 vlcj-javafx 示例运行良好。

您在问题中说 vlcj“没有错误,但它什么也没做”。

嗯,有两种方法可以检查您在问题中发布的代码中未显示的错误。

  1. mediaPlayer.playMedia() 方法返回一个 boolean 来表示 VLC 是否接受您的 MRL - 您检查了返回值吗?请注意,即使此方法返回 true,也并不明确意味着 VLC 可以播放您的媒体,但如果它返回 false,则明确意味着无法播放该媒体。
  2. 您应该向媒体播放器添加一个 MediaPlayerEventLister 并提供“playing()”和“error()”的实现。这些回调将被异步触发 - 因为这就是 LibVLC 的工作原理 - 只有这样你才能断定 vlcj 是“不出错”还是“什么都不做”。

我怀疑您的媒体无法启动,可能是因为文件名错误。

关于java - 如何使用 VLCJ 和 JavaFX 播放视频文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27469265/

相关文章:

java - 如何从另一个Java类中的JTextfield读取用户输入

java - 在 BigDecimal 中修剪两个以上的尾随零

iphone - MPMoviePlayerController 预加载进度

matlab - 如何使用 MATLAB 消除视频中相机抖动造成的影响?

java - 使用运行/调试配置在 IntelliJ IDEA 中运行 JavaFX 11 Maven 项目

JavaFx 按钮设置文本与计时器任务

java - ServiceBus JAVA SDK高级重新加载错误,ServiceLoader(不是子类型)

java - nullpointerexception 错误我现在知道如何修复

python - 如何使用 pygame 播放视频?

css - 样式表和内联样式有什么区别?