Macos JavaFXMediaPlayer在Mac上使用mp4文件时口吃

Macos JavaFXMediaPlayer在Mac上使用mp4文件时口吃,macos,javafx,media-player,Macos,Javafx,Media Player,要重现该问题,可以使用JavaFX示例项目AdvancedMedia。将flv视频替换为编码类型为JavaFX的mp4视频 编辑:我想也许人们在编辑样本时遇到了麻烦。只需在项目根文件夹中放置一个视频,并将媒体URL设置为新文件(“video.mp4”).toURI().toString() 它在Windows平台上非常有效。然而,在Mac上,视频在开始和结束前都会出现口吃。使用java-jar AdvancedMedia.jar在终端上运行项目时,会显示以下消息: AVF info: check

要重现该问题,可以使用JavaFX示例项目AdvancedMedia。将flv视频替换为编码类型为JavaFX的mp4视频

编辑:我想也许人们在编辑样本时遇到了麻烦。只需在项目根文件夹中放置一个视频,并将
媒体URL
设置为
新文件(“video.mp4”).toURI().toString()

它在Windows平台上非常有效。然而,在Mac上,视频在开始和结束前都会出现口吃。使用
java-jar AdvancedMedia.jar
在终端上运行项目时,会显示以下消息:

AVF info: checkDecoderUsage, vaCodecString: <Gen6> 
AVF info: pp_hw_name: RenderingEngine, id: 3ea, m_pp_nowait: 1
AVF info: RingBufferPool wr:0, rd:108, reset:93, warning:0
AVF信息:检查解码图像,取消编码:
AVF信息:pp_hw_名称:渲染引擎,id:3ea,m_pp_nowait:1
AVF信息:RingBufferPool wr:0,rd:108,复位:93,警告:0
我看到MacBook Pro、Air、i5/i7处理器等出现此错误。有没有办法解决这些口吃/错误消息

我用
-Dprism.verbose=true
测试了运行,我发现Windows和Mac平台之间有一个主要区别:在Windows上
Prism平台的初始化顺序是
d3d sw
,而在Mac上是
es2 sw
Prism管道名称
分别是
com.sun.Prism.d3d.D3DPipeline
com.sun.Prism.es2.es2ipeline

也许一个可能的解决方案是在Mac上使用相同的D3D管道?但是如果使用
-Dprism.order=d3d运行,sw
会给出
java.lang.ClassNotFoundException:com.sun.prism.d3d.D3DPipeline

我还尝试使用
-Xms
选项增加JVM内存,但没有效果。因此,尽管视频在其他平台上播放顺畅,但这似乎确实是一个编解码器问题

我在Mac上测试了一个Windows生成的jar,所以现在我也尝试在Mac上构建AdvancedMedia示例,认为这可能会有所不同,但没有任何改变

似乎这更像是一个JavaFX bug报告,而不是一个问题


一个稍微偏离的话题,但我不得不说,在此之前,我尝试了C++和VLCj方法,我只是因为MAC功能问题而改变它……

< p>我发现这个bug在任何一个H.264编码的视频上都发生在MAC上,不管文件扩展名如何。因此,如上所述,JavaFX提供的唯一其他替代方案是使用VP6编码,这不容易获得-请参见我的问题-但至少视频运行平稳,没有任何渲染错误消息。

选项d3d代表Direct3D,仅在Windows上存在。Mac使用es2管道使用的OpenGL。哦,好的,谢谢,所以我将停止在Mac上使用d3d。那么你知道为什么Mac的OpenGL在JavaFX媒体上遇到了麻烦吗?奇怪的是,一些问题指出它应该比windows好。更奇怪的是,以前似乎没有人在Mac上测试过带有mp4视频的JavaFXMediaPlayer……好吧,我很久以前就测试过了,没有任何问题。可能您的特定编码或大小有问题。你试过不同来源的不同mp4吗?是的,我试过多个mp4视频,包括来自互联网的简单示例视频,它们都有相同的行为。我认为,如果你使用了足够长的视频,你不会注意到任何错误,因为触发消息的问题出现在视频开始和结束之前。在我的应用程序中,我使用较短的视频,重要的是它们在最后都能正确显示。如果我使用flv视频,Mac上不会出现错误,因此我将看看我现在是否可以在我的应用程序中使用mp4以外的其他格式。