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

时间:2014-12-14 12:25:02

标签: java video javafx vlc vlcj

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

我已经按照Caprical在他的VLCJ-JavaFX GitHub中发布的示例,但它确实没有。 它没有错误,但它什么也没做。

查看代码,似乎问题出现在Timeline事件处理程序中:

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();
    };
};

有人建议我得到原木,但是当我做这篇文章时(我回到生活的土地时,我会看到什么),我必须等待,因为我会陷入昏迷状态。我可以发一些)。如果有更好的方法来实现这一目标,那么如果有人能指导我,我会全力以赴。感谢...

1 个答案:

答案 0 :(得分:1)

Github项目中的vlcj-javafx示例工作正常。

你在问题​​中说vlcj“没有错误,但它没有做任何事情”。

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

  1. mediaPlayer.playMedia()方法会返回boolean来说明VLC是否接受了您的MRL - 您是否检查了返回值?请注意,即使此方法返回true,也不能明确表示VLC可以播放您的媒体,但如果它返回false,则分类意味着它无法播放。
  2. 您应该向媒体播放器添加MediaPlayerEventLister并提供“播放()”和“错误()”的实现。这些回调将以异步方式触发 - 因为这就是LibVLC的工作方式 - 只有这样才能得出结论vlcj“不出错”或“什么也不做”。
  3. 我怀疑你的媒体无法启动,可能是因为文件名错误。