VLCJ EmbeddedMediaPlayerComponent播放器在准备新视频后仍会显示旧视频图像

时间:2017-01-23 10:48:43

标签: vlcj

以下是我加载视频的方式(在实际代码中,变量是播放器类的成员变量)。我不希望立即播放视频,这是我使用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(),但到目前为止我没有尝试过任何工作。

1 个答案:

答案 0 :(得分:0)

VLC / LibVLC的一项功能是在视频结束时显示视频的最后一帧,因此您必须找到解决方法。

一个好的解决方案是使用带有两个视图的CardLayout,一个用于媒体播放器组件(或用于视频表面的Canvas),另一个视图只用一个空白(黑色){ {1}}。

接下来的想法是听取视频开始/停止/结束并在卡片布局中显示相应的视图。

如果您添加JPanel并实施播放,停止,完成和错误事件,则应涵盖所有情况。

例如:在“正在播放”事件中,您可以切换卡片布局以显示视频视图,在“已停止”,“已完成”和“错误”事件中切换卡片布局以显示空白视图。

当然,视图不一定是黑色,你可以随心所欲地做任何事情,比如显示图像。

另请注意,媒体播放器事件不会在Swing Event Dispatch Thread上传递,因此您需要使用MediaPlayerEventListener来正确切换视图。