2016-08-01 28 views
0

Ich möchte zwei Kopien des gleichen Videos in zwei verschiedenen JFrames haben! Im Moment habe ich erreicht, dass 2 Videos angezeigt werden aber nur einer ist in einen JFrame "integriert". Soweit ich gelesen habe, ist es nicht vollständig entwickelt, um mit allen Kopien integriert zu werden. Bin ich falsch darin? Gibt es noch eine andere Möglichkeit zu erreichen, was ich will?Verwenden Sie geklonte VLCJ in mehreren Fenstern

Das ist mein Code, der Sachen in 2 JFrames spielt und auch ein JFileChooser für Einfachheit.

public class MyMultiDisplay 
{ 
    List <String> argsList; 
    MediaPlayerFactory mediaPlayerFactory; 
    EmbeddedMediaPlayer player; 
    JFrame frame1; 
    JFrame frame2; 

    public static void main(String[] args) 
    { 
     new NativeDiscovery().discover(); 

     SwingUtilities.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       new MyStart(); 
      } 
     }); 
    } 

    public MyMultiDisplay() 
    { 
     frame1 = new JFrame("My First Media Player"); 
     frame1.setBounds(100, 100, 600, 400); 
     frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame2 = new JFrame("My Second Media Player"); 
     frame2.setBounds(700, 500, 600, 400); 
     frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     argsList = new ArrayList <String>(); 
     argsList.add("--video-splitter=clone"); 
     argsList.add("--clone-count=2"); 
     mediaPlayerFactory = new MediaPlayerFactory(argsList); 
     player = mediaPlayerFactory.newEmbeddedMediaPlayer(); 
     Canvas canvas = new Canvas(); 
     player.setVideoSurface(mediaPlayerFactory.newVideoSurface(canvas)); 
     frame1.add(canvas); 
     frame1.setVisible(true); 
     frame2.setVisible(true); 
     JFileChooser chooser = new JFileChooser(); 
     int returnVal = chooser.showOpenDialog(null); 
     if (returnVal == JFileChooser.APPROVE_OPTION) 
     { 
      player.playMedia(chooser.getSelectedFile().getAbsolutePath()); 
     } 
    } 
} 
+0

* "Ich will in zwei verschiedenen JFrames zwei Kopien desselben Videos haben!" * ... warum? –

+0

Es war als ein Beispiel gemeint! Die tatsächliche Verwendung wird wie PowerPoint sein, aber für Video, das in mein eigenes Programm integriert ist. Ein Video-Display pro Bildschirm. – Payerl

+0

* "Eine Videoanzeige pro Bildschirm." * Warum möchte der Benutzer zwei Versionen desselben Videos gleichzeitig auf dem Bildschirm sehen? Ich sage nicht, dass es keine Gründe dafür gibt, ich bin neugierig, was der Grund in diesem Fall ist. –

Antwort

0

Fast ein Jahr später entschied ich, dass ich der Vollständigkeit halber hier meine endgültige Lösung posten werde, wenn jemand anders den Weg hierher finden sollte!

Ich habe ein Bibliotheksprojekt erstellt, das VLCJ als Basis verwendet, um den DirektMediaPlayer auf einfache Weise zu verwenden, um das gleiche Video auf mehrere Frames/Windows/Oberflächen/JComponents/was auch immer zu spielen. Es ist nicht diese Ressource, die in meiner unerfahrenen Erfahrung schwer ist. 100 Fenster gleichzeitig spielen das gleiche Video und immer noch keine Verzögerung!

Fühlen Sie sich frei, es zu überprüfen!

https://github.com/APayerl/VlcjWind

1

Es kann nicht getan werden.

Die LibVLC-API und daher vlcj unterstützt nicht die Übergabe von mehr als einer nativen Fenster-ID für Einbettungszwecke.

+0

Wäre es möglich, einen DirectMediaPlayer zu verwenden (ich glaube, dass es so genannt wurde) und dann zwei Oberflächen aus demselben Puffer zu malen? – Payerl

+0

Das würde wahrscheinlich funktionieren, aber die Leistung würde einen Schlag bekommen und Sie würden die anderen Einschränkungen in Bezug auf direkte Media Player (wie Größenbeschränkungen) haben - der native Embedded-Weg ist immer der bevorzugte Weg IMHO. – caprica

+0

Nun, wenn das der einzige Weg für meine Bedürfnisse ist, dann sehe ich leider nicht viele Alternativen ...: / – Payerl