我知道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();
};
};
有人建议我得到原木,但是当我做这篇文章时(我回到生活的土地时,我会看到什么),我必须等待,因为我会陷入昏迷状态。我可以发一些)。如果有更好的方法来实现这一目标,那么如果有人能指导我,我会全力以赴。感谢...
答案 0 :(得分:1)
Github项目中的vlcj-javafx示例工作正常。
你在问题中说vlcj“没有错误,但它没有做任何事情”。
嗯,有两种方法可以检查您在问题中发布的代码中未显示的错误。
mediaPlayer.playMedia()
方法会返回boolean
来说明VLC是否接受了您的MRL - 您是否检查了返回值?请注意,即使此方法返回true,也不能明确表示VLC可以播放您的媒体,但如果它返回false,则分类意味着它无法播放。MediaPlayerEventLister
并提供“播放()”和“错误()”的实现。这些回调将以异步方式触发 - 因为这就是LibVLC的工作方式 - 只有这样才能得出结论vlcj“不出错”或“什么也不做”。我怀疑你的媒体无法启动,可能是因为文件名错误。