2015-09-14 4 views
0

Я использую VLCJ для воспроизведения видео mp4 в своем приложении swing. Он может воспроизводиться правильно, но когда я приостанавливаю() видео, за которым следует воспроизведение(), он не может отображать видео, но он может возобновить звук. Если я вызову stop() вместо pause(), все будет хорошо, но начнется с самого начала. Как правильно приостановить видео, чтобы возобновить видео?VLCJ не может отображать видео после паузы(), за которым следует воспроизведение()

Я пытался со следующим классом:

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(); 
    } 

}

+0

Открытый класс JVLCPlayer расширяет JPanel {private File vlcPath = новый файл ("vlcpath"); частный игрок EmbeddedMediaPlayer; public JVLCPlayer() {NativeLibrary.addSearchPath ("libvlc", vlcPath.getAbsolutePath()); EmbeddedMediaPlayerComponent videoCanvas = new EmbeddedMediaPlayerComponent(); setLayout (новый BorderLayout()); add (videoCanvas, BorderLayout.CENTER); Игрок = videoCanvas.getMediaPlayer(); 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();}} – epsylon

+0

Я попробовал videoCanvas как переменную кучи для класса, но все же поведение как это было раньше. – epsylon

+0

Правильно ли работает воспроизведение/пауза в проекте vlcj-player (также доступно на Github)? – caprica

ответ

0

Согласно вашему сообщению и комментариям, вы пытаетесь переключить один компонент мультимедийного проигрывателя между несколькими панелями.

Это просто не работает.

С vlcj/LibVLC компонент, который размещает видео поверхность, должен быть «отображаемым» и должен оставаться таким же всегда. Вы не можете «переименовать» поверхность видео на другой компонент, вы даже не можете скрыть компонент (вы можете установить его в 1x1, или наилучшим решением будет использовать CardLayout, чтобы скрыть его).

Причина, по которой она срабатывает при первой остановке , тогда Игра состоит в том, что в этом случае vlcj будет «повторно ассоциировать» поверхность видео с родным медиаплеером. Это невозможно сделать во время воспроизведения видео. Вы ничего не можете с этим поделать.

Вероятно, одним из медиаплееров на панели и с использованием CardLayout является наилучшим решением.

+0

Я получил вашу точку зрения, но только один из JPanels имеет MediaPlayer. Другие Jpanels используются для отображения другой информации. Только контентная панель JFrame изменяется с помощью разных JPanels, но видео поверхность всегда привязана к одной и той же JPanel. – epsylon

+0

Тогда я не знаю. Но поведение, которое вы описываете, видео исчезает, но звук продолжается, точно соответствует * с тем, что я описываю. – caprica

+0

Вы говорите, что поверхность видео всегда прикреплена к той же панели, что недостаточно. Сама панель должна * всегда * быть прикреплена и «отображаться» в JFrame. Поэтому, если вы поменяете панели в своем JFrame, это будет не так точно, как я описал. Вам нужно сделать что-то еще, как CardLayout или пользовательский менеджер макета, чтобы достичь необходимого эффекта. – caprica

0

попробуйте использовать этот метод используйте код паузы() в MediaPlayer и использовать метод же паузы(), чтобы играть это работает для меня

  pauseButton.addActionListener((ActionEvent e) -> { 

     mediaPlayerComponent.getMediaPlayer().pause(); 
     }); 
+0

Я использую EmbeddedMediaPlayer и MediaListPlayer вместо EmbeddedMediaPlayerComponent. pause() MediaListPlayer работает нормально, то есть может приостановиться, но потом, когда я вызываю play(), он просто возобновляет звук, но видео не отображается в отличие от stop(), за которым следует воспроизведение() – epsylon

+0

Вам действительно нужен MediaListPlayer –

+0

I ' m добавление нескольких медиафайлов в MediaList и воспроизведение их в режиме LOOP. – epsylon

 Смежные вопросы

  • Нет связанных вопросов^_^