2012-06-18 5 views
3

Je crée plusieurs panneaux vidéo en utilisant vlcj. Pour chaque fenêtre vidéo j'ajouter le code:VLCJ Création de plusieurs panneaux vidéo

factory0 = new MediaPlayerFactory(); 
mediaPlayer0 = factory0.newEmbeddedMediaPlayer(); 
mediaPlayer0.setVideoSurface(factory0.newVideoSurface(videoCanvas[0])); 
mediaPlayer0.setPlaySubItems(true); 
... 

Si je veux avoir 8 panneaux vidéo alors je vais devoir répéter ces codes (non dynamique). Ma question est: Je voudrais avoir MediaPlayerFactory et MediaPlayerFactory en tant que tableaux afin que je puisse raccourcir mon code et que cela se comporte dynamiquement en changeant juste Num_Video.

Mon code complet est le suivant. Je crée 4 panneaux de vidéos dans mainPanel.

Merci.

import uk.co.caprica.vlcj.binding.internal.libvlc_media_t; 
import uk.co.caprica.vlcj.player.MediaPlayer; 
import uk.co.caprica.vlcj.player.MediaPlayerEventAdapter; 
import uk.co.caprica.vlcj.player.MediaPlayerFactory; 
import uk.co.caprica.vlcj.player.embedded.EmbeddedMediaPlayer; 


public class MultiThreadedWindow extends JFrame implements ActionListener { 

    private JPanel topPanel = new JPanel(); 
    private JPanel statusPanel = new JPanel(); 
    private JButton playButton = new JButton("Play");private JButton btnStop = new JButton("Stop"); 
    private JButton btnPause = new JButton("Pause"); 
    private MediaPlayerFactory factory0, factory1, factory2, factory3; 
    private EmbeddedMediaPlayer mediaPlayer0, mediaPlayer1, mediaPlayer2, mediaPlayer3; 




    int Video_Width = 200; 
    int Video_Height = 150; 
    int Num_Video = 4; 

    public MultiThreadedWindow() { 
     final String jnaLibraryPath = System.getProperty("jna.library.path"); 
     final StringBuilder newJnaLibraryPath = new StringBuilder(jnaLibraryPath != null ? (jnaLibraryPath + ":") : ""); 
     newJnaLibraryPath.append("/Applications/VLC.app/Contents/MacOS/lib"); 
     System.setProperty("jna.library.path", newJnaLibraryPath.toString()); 



     playButton.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       play(); 
      } 
     }); 

     btnStop.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       stop(); 
      } 
     }); 

     btnPause.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       pause(); 
      } 
     }); 


     topPanel.add(playButton); 
     topPanel.add(btnStop); 
     topPanel.add(btnPause); 

     this.setSize(1000, 800); 
     this.setLayout(new BorderLayout()); 
     this.setVisible(true); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JPanel mainPanel = new JPanel(new FlowLayout()); 


     Canvas[] videoCanvas = new Canvas[Num_Video]; 
     JPanel[] vidPanel = new JPanel[Num_Video]; 

     for (int i = 0; i < Num_Video; i++) { 
      vidPanel[i] = new JPanel(); 
      videoCanvas[i] = new Canvas(); 

      vidPanel[i].setPreferredSize(new Dimension(Video_Width, Video_Height)); 
      vidPanel[i].setBackground(Color.black); 
      vidPanel[i].setLayout(new BorderLayout()); 

      videoCanvas[i].setBackground(Color.black); 
      vidPanel[i].add(videoCanvas[i], BorderLayout.CENTER); 

      mainPanel.add(vidPanel[i]); 

     } 





     factory0 = new MediaPlayerFactory(); 
     mediaPlayer0 = factory0.newEmbeddedMediaPlayer(); 
     mediaPlayer0.setVideoSurface(factory0.newVideoSurface(videoCanvas[0])); 
     mediaPlayer0.setPlaySubItems(true); 
     mediaPlayer0.addMediaPlayerEventListener(new MediaPlayerEventAdapter() { 

      @Override 
      public void mediaSubItemAdded(MediaPlayer mediaPlayer, libvlc_media_t subItem) { 
       List<String> items = mediaPlayer.subItems(); 
       System.out.println(items); 
      } 
     }); 

     factory1 = new MediaPlayerFactory(); 
     mediaPlayer1 = factory1.newEmbeddedMediaPlayer(); 
     mediaPlayer1.setVideoSurface(factory1.newVideoSurface(videoCanvas[1])); 
     mediaPlayer1.setPlaySubItems(true); 
     mediaPlayer1.addMediaPlayerEventListener(new MediaPlayerEventAdapter() { 

      @Override 
      public void mediaSubItemAdded(MediaPlayer mediaPlayer, libvlc_media_t subItem) { 
       List<String> items = mediaPlayer.subItems(); 
       System.out.println(items); 
      } 
     }); 

     factory2 = new MediaPlayerFactory(); 
     mediaPlayer2 = factory2.newEmbeddedMediaPlayer(); 
     mediaPlayer2.setVideoSurface(factory2.newVideoSurface(videoCanvas[2])); 
     mediaPlayer2.setPlaySubItems(true); 
     mediaPlayer2.addMediaPlayerEventListener(new MediaPlayerEventAdapter() { 

      @Override 
      public void mediaSubItemAdded(MediaPlayer mediaPlayer, libvlc_media_t subItem) { 
       List<String> items = mediaPlayer.subItems(); 
       System.out.println(items); 
      } 
     }); 

     factory3 = new MediaPlayerFactory(); 
     mediaPlayer3 = factory3.newEmbeddedMediaPlayer(); 
     mediaPlayer3.setVideoSurface(factory3.newVideoSurface(videoCanvas[3])); 
     mediaPlayer3.setPlaySubItems(true); 
     mediaPlayer3.addMediaPlayerEventListener(new MediaPlayerEventAdapter() { 

      @Override 
      public void mediaSubItemAdded(MediaPlayer mediaPlayer, libvlc_media_t subItem) { 
       List<String> items = mediaPlayer.subItems(); 
       System.out.println(items); 
      } 
     }); 

     this.add(topPanel, BorderLayout.NORTH); 
     this.add(mainPanel, BorderLayout.CENTER); 
     this.add(statusPanel, BorderLayout.SOUTH); 
    } 

    public void actionPerformed(ActionEvent e) throws IllegalStateException { 

     if (e.getActionCommand().equals("OK")) { 
      this.dispose(); 
     } 
    } 

    private void start() { 
     this.setVisible(true); 
    } 

    private void play() { 
     mediaPlayer0.playMedia("/Users/pujan/1-pix.mp4"); 
     mediaPlayer1.playMedia("/Users/pujan/1-shakira.mp4"); 
     mediaPlayer2.playMedia("/Users/pujan/1-flowers.mp4"); 
     mediaPlayer3.playMedia("/Users/pujan/1-aam.mp4"); 
    } 

    private void stop() { 
     mediaPlayer0.stop(); 
     mediaPlayer1.stop(); 
     mediaPlayer2.stop(); 
     mediaPlayer3.stop(); 
    } 

    private void pause() { 
     mediaPlayer0.pause(); 
     mediaPlayer1.pause(); 
     mediaPlayer2.pause(); 
     mediaPlayer3.pause(); 
    } 

    public static void main(String[] args) throws Exception { 

     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new MultiThreadedWindow().start(); 
      } 
     }); 
    } 
} 

Répondre

1

Je suis en mesure d'atteindre par ce

EmbeddedMediaPlayer mediaPlayer[] = new EmbeddedMediaPlayer[Num_Video]; 

puis dans la boucle

factory[i] = new MediaPlayerFactory(); 
mediaPlayer[i] = factory[i].newEmbeddedMediaPlayer(); 
mediaPlayer[i].setVideoSurface(factory[i].newVideoSurface(videoCanvas[i])); 
mediaPlayer[i].setPlaySubItems(true); 
Questions connexes