Используйте клонированный VLCJ в нескольких окнах

Я хочу иметь две копии одного и того же видео в двух разных JFrames! На данный момент я добился того, что отображаются 2 видео, но только одно «интегрировано» в 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());
        }
    }
}

person Payerl    schedule 01.08.2016    source источник
comment
Я хочу иметь две копии одного и того же видео в двух разных JFrames! ...почему?   -  person Andrew Thompson    schedule 01.08.2016
comment
Это было задумано как пример! Реальное использование будет похоже на PowerPoint, но для видео, интегрированного в мою собственную программу. Один видеодисплей на экран.   -  person Payerl    schedule 01.08.2016
comment
Одно видео на экране. Почему пользователю нужно, чтобы две версии одного и того же видео отображались на экране одновременно? Я не говорю, что для этого нет причин, мне любопытно, в чем причина в данном случае.   -  person Andrew Thompson    schedule 01.08.2016
comment
Одна миниатюра, где оператор может управлять видео, и одна полноэкранная версия, предназначенная для публичного показа.   -  person Payerl    schedule 01.08.2016


Ответы (2)


Это невозможно сделать.

API LibVLC и, следовательно, vlcj не поддерживает передачу более одного собственного идентификатора окна для встраивания.

person caprica    schedule 01.08.2016
comment
Можно ли использовать DirectMediaPlayer (кажется, он так назывался?), а затем рисовать две поверхности из одного и того же буфера? - person Payerl; 01.08.2016
comment
Это, вероятно, сработает, но производительность пострадает, и у вас будут другие ограничения, связанные с прямым медиаплеером (например, ограничения на изменение размера) - собственный встроенный способ всегда является предпочтительным, ИМХО. - person caprica; 01.08.2016
comment
ну, если это единственный способ для моих нужд, то, к сожалению, я вижу не так много альтернатив... :/ - person Payerl; 02.08.2016

Почти год спустя я решил, что для полноты картины я опубликую здесь свое окончательное решение, если кто-нибудь еще когда-нибудь найдет здесь свой путь!

Я создал проект библиотеки, используя VLCJ в качестве основы, способной очень просто использовать DirektMediaPlayer для воспроизведения одного и того же видео на нескольких кадрах/окнах/поверхностях/JComponents/что угодно очень простым способом. По моему неопытному опыту, это не так уж и тяжело. 100 окон одновременно воспроизводят одно и то же видео и все равно без задержек!

Не стесняйтесь проверить это!

https://github.com/APayerl/VlcjWind

person Payerl    schedule 10.08.2017