要重现该问题,您可以使用JavaFX示例项目AdvancedMedia。将 flv 视频替换为 JavaFX 支持的编码类型的 mp4 视频。
编辑:我想也许人们在编辑样本时遇到了麻烦。只需将视频放在项目根文件夹中,然后将MEDIA_URL
设置为new File("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
我看到MacBook Pro,Air,i5/i7处理器等会发生此错误。有没有办法解决口吃/错误消息?
我测试了使用-Dprism.verbose=true
运行,我看到了Windows和Mac平台之间的主要区别:在Windows上Prism platform init order
是d3d sw
,而在Mac上是es2 sw
;Prism pipeline name
分别是com.sun.prism.d3d.D3DPipeline
和com.sun.prism.es2.ES2Pipeline
。
也许一个可能的解决方案是在Mac上使用相同的D3D管道?但是,如果使用-Dprism.order=d3d,sw
运行,则会产生java.lang.ClassNotFoundException: com.sun.prism.d3d.D3DPipeline
.
我还尝试使用-Xms
选项增加 JVM 内存,但没有效果。因此,即使视频在其他平台上流畅播放,这似乎确实是一个编解码器问题。
我正在Mac上测试Windows生成的jar,所以现在我也尝试在Mac上构建AdvancedMedia示例,认为它可以有所作为,但没有任何改变。
似乎这更像是一个JavaFX错误报告,而不是一个问题。
有点跑题了,但我不得不说,在此之前,我为我的应用程序尝试了C++和 VLCj 方法,我只是因为 Mac 功能问题而更改了它......
我发现此错误发生在带有任何 H.264 编码视频的 Mac 上,无论文件扩展名如何。因此,如文档中所述,JavaFX 提供的唯一其他替代方法是使用 VP6 编码,这并不容易获得 - 请参阅我的另一个问题 - 但至少视频将流畅运行并且没有任何渲染错误消息。