VLCJ 在暂停()后跟播放()后无法显示视频
VLCJ cannot display video after pause() followed by play()
我正在使用 VLCJ 在我的 swing 应用程序中播放 mp4 视频。它可以正常播放但是当我暂停()视频后跟播放()时它无法显示视频但它能够恢复音频。如果我调用 stop() 而不是 pause() 一切正常,但它从头开始播放。如何正确暂停视频以便继续播放视频?
我正在尝试以下 class:
public class JVLCPlayerPanel extends javax.swing.JPanel
{
private File vlcPath = new File("C:\Program Files\VideoLAN\VLC");
private EmbeddedMediaPlayer player;
public JVLCPlayerPanel() {
initComponents();
NativeLibrary.addSearchPath("libvlc", vlcPath.getAbsolutePath());
EmbeddedMediaPlayerComponent videoCanvas = new EmbeddedMediaPlayerComponent();
this.setLayout(new BorderLayout());
this.add(videoCanvas, BorderLayout.CENTER);
this.player = videoCanvas.getMediaPlayer();
this.player.setPause(true);
}
public void play(String media)
{
player.prepareMedia(media);
player.parseMedia();
player.play();
}
public void pause()
{
player.pause();
}
public void resume()
{
player.play();
}
}
尝试使用此代码使用 MediaPlayer 的 pause() 方法
并使用相同的 pause() 方法播放它对我有用
pauseButton.addActionListener((ActionEvent e) -> {
mediaPlayerComponent.getMediaPlayer().pause();
});
根据您的 post 和评论,您正试图在多个面板之间切换单个媒体播放器组件。
这根本行不通。
使用 vlcj/LibVLC 时,承载视频表面的组件必须 "displayable" 并且必须始终如此。你不能 "re-parent" 视频表面到另一个组件,你甚至不能隐藏组件(你可以将它设置为 1x1,或者最好的解决方案是使用 CardLayout 来隐藏它)。
当您先停止 然后 播放时它起作用的原因是,在这种情况下,vlcj 将 "re-associate" 使用本机媒体播放器播放视频表面。播放视频时无法执行此操作。你对此无能为力。
可能每个面板保留一个媒体播放器并使用 CardLayout 是最好的解决方案。
我正在使用 VLCJ 在我的 swing 应用程序中播放 mp4 视频。它可以正常播放但是当我暂停()视频后跟播放()时它无法显示视频但它能够恢复音频。如果我调用 stop() 而不是 pause() 一切正常,但它从头开始播放。如何正确暂停视频以便继续播放视频?
我正在尝试以下 class:
public class JVLCPlayerPanel extends javax.swing.JPanel
{
private File vlcPath = new File("C:\Program Files\VideoLAN\VLC");
private EmbeddedMediaPlayer player;
public JVLCPlayerPanel() {
initComponents();
NativeLibrary.addSearchPath("libvlc", vlcPath.getAbsolutePath());
EmbeddedMediaPlayerComponent videoCanvas = new EmbeddedMediaPlayerComponent();
this.setLayout(new BorderLayout());
this.add(videoCanvas, BorderLayout.CENTER);
this.player = videoCanvas.getMediaPlayer();
this.player.setPause(true);
}
public void play(String media)
{
player.prepareMedia(media);
player.parseMedia();
player.play();
}
public void pause()
{
player.pause();
}
public void resume()
{
player.play();
}
}
尝试使用此代码使用 MediaPlayer 的 pause() 方法 并使用相同的 pause() 方法播放它对我有用
pauseButton.addActionListener((ActionEvent e) -> {
mediaPlayerComponent.getMediaPlayer().pause();
});
根据您的 post 和评论,您正试图在多个面板之间切换单个媒体播放器组件。
这根本行不通。
使用 vlcj/LibVLC 时,承载视频表面的组件必须 "displayable" 并且必须始终如此。你不能 "re-parent" 视频表面到另一个组件,你甚至不能隐藏组件(你可以将它设置为 1x1,或者最好的解决方案是使用 CardLayout 来隐藏它)。
当您先停止 然后 播放时它起作用的原因是,在这种情况下,vlcj 将 "re-associate" 使用本机媒体播放器播放视频表面。播放视频时无法执行此操作。你对此无能为力。
可能每个面板保留一个媒体播放器并使用 CardLayout 是最好的解决方案。