以下是我加载视频的方式(在实际代码中,变量是播放器类的成员变量)。我不希望立即播放视频,这是我使用prepareMedia()的原因。当应用程序准备播放视频时,我调用player.play()。
但是,我的播放器视图(我将EmbeddedMediaPlayerComponent添加到JPanel,设置为JFrame的ContentPane)仍然会在使用新的" videoPath"运行以下代码后显示旧视频。值。播放器视图仅在我调用player.play()之后显示新视频。
EmbeddedMediaPlayerComponent mediaPlayerComponent = new EmbeddedMediaPlayerComponent();
MediaPlayer player = mediaPlayerComponent.getMediaPlayer();
player.prepareMedia(videoPath);
有没有什么方法可以让播放器显示新的视频图像(或者至少删除旧的视频图像)而不开始播放?我尝试从mediaPlayerComponent调用repaint()方法,在播放器中调用stop(),在mediaFlayerEventAdpater方法中覆盖,例如mediaFreed(),但到目前为止我没有尝试过任何工作。
答案 0 :(得分:0)
VLC / LibVLC的一项功能是在视频结束时显示视频的最后一帧,因此您必须找到解决方法。
一个好的解决方案是使用带有两个视图的CardLayout
,一个用于媒体播放器组件(或用于视频表面的Canvas
),另一个视图只用一个空白(黑色){ {1}}。
接下来的想法是听取视频开始/停止/结束并在卡片布局中显示相应的视图。
如果您添加JPanel
并实施播放,停止,完成和错误事件,则应涵盖所有情况。
例如:在“正在播放”事件中,您可以切换卡片布局以显示视频视图,在“已停止”,“已完成”和“错误”事件中切换卡片布局以显示空白视图。
当然,视图不一定是黑色,你可以随心所欲地做任何事情,比如显示图像。
另请注意,媒体播放器事件不会在Swing Event Dispatch Thread上传递,因此您需要使用MediaPlayerEventListener
来正确切换视图。