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 是最好的解决方案。