我知道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“没有错误,但它什么也没做”。
嗯,有两种方法可以检查您在问题中发布的代码中未显示的错误。
mediaPlayer.playMedia()
方法返回一个boolean
来表示 VLC 是否接受您的 MRL - 您检查了返回值吗?请注意,即使此方法返回 true,也并不明确意味着 VLC 可以播放您的媒体,但如果它返回 false,则明确意味着无法播放该媒体。- 您应该向媒体播放器添加一个
MediaPlayerEventLister
并提供“playing()”和“error()”的实现。这些回调将被异步触发 - 因为这就是 LibVLC 的工作原理 - 只有这样你才能断定 vlcj 是“不出错”还是“什么都不做”。
我怀疑您的媒体无法启动,可能是因为文件名错误。
关于java - 如何使用 VLCJ 和 JavaFX 播放视频文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27469265/