在多个 windows 中使用克隆的 VLCJ
Use cloned VLCJ in multiple windows
我想在两个不同的 JFrames 中拥有相同视频的两个副本!
目前我已经实现了 2 个视频正在显示,但只有一个是 "integrated" 到 JFrame 中。据我所知,它还没有完全发展到可以与所有副本集成。我错了吗?还有其他方法可以实现我想要的吗?
这是我在 2 个 JFrames 中播放内容的代码,为了简单起见,还有一个 JFileChooser。
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());
}
}
}
做不到。
LibVLC API,因此 vlcj 不支持传递多个本机 window ID 用于嵌入目的。
将近一年后,我决定,为了完整起见,我将 post 我的最终解决方案放在这里,如果有人在这里找到他们的方式的话!
我使用 VLCJ 作为基础创建了一个库项目,能够以非常简单的方式使用 DirektMediaPlayer 以非常简单的方式向多个 frames/windows/surfaces/JComponents/whatever 播放相同的视频。在我没有经验的情况下,这也不是那么重的资源。 100个windows同时播放同一个视频仍然没有延迟!
随时查看!
我想在两个不同的 JFrames 中拥有相同视频的两个副本! 目前我已经实现了 2 个视频正在显示,但只有一个是 "integrated" 到 JFrame 中。据我所知,它还没有完全发展到可以与所有副本集成。我错了吗?还有其他方法可以实现我想要的吗?
这是我在 2 个 JFrames 中播放内容的代码,为了简单起见,还有一个 JFileChooser。
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());
}
}
}
做不到。
LibVLC API,因此 vlcj 不支持传递多个本机 window ID 用于嵌入目的。
将近一年后,我决定,为了完整起见,我将 post 我的最终解决方案放在这里,如果有人在这里找到他们的方式的话!
我使用 VLCJ 作为基础创建了一个库项目,能够以非常简单的方式使用 DirektMediaPlayer 以非常简单的方式向多个 frames/windows/surfaces/JComponents/whatever 播放相同的视频。在我没有经验的情况下,这也不是那么重的资源。 100个windows同时播放同一个视频仍然没有延迟!
随时查看!