Итак, я прочитал несколько старых сообщений (с 2011 года) о том, что Windows имеет проблемы с поддержкой событий мыши во время воспроизведения видео, и некоторые прокси-серверы Windows должны были использоваться. Затем я нашел более позднюю публикацию, связанную с этой проблемой: https://github.com/caprica/vlcj/issues/78VLCJ Mouse Event Input для видео
В конце этого сообщения обсуждается способ получения событий щелчка мыши, и разработчик VLCJ
сам одобрил его как обычный способ поддержки Функциональность:
Canvas videoSurface = this.mediaPlayerComponent.getVideoSurface();
videoSurface.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("Click");
media_clicked();
}
});
За исключением случаев, когда я попробовал, это не сработало.
package test;
import com.sun.jna.NativeLibrary;
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.*;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Toolkit;
import javax.swing.JFrame;
import uk.co.caprica.vlcj.component.EmbeddedMediaPlayerComponent;
import uk.co.caprica.vlcj.player.embedded.EmbeddedMediaPlayer;
import uk.co.caprica.vlcj.runtime.RuntimeUtil;
public class Test {
public static void main(String[] args) {
Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
GraphicsEnvironment environment = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice device = environment.getDefaultScreenDevice();
GraphicsConfiguration graphConfigure = device.getDefaultConfiguration();
JFrame frame = new JFrame(graphConfigure);
frame.setBackground(Color.BLACK);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setLocationRelativeTo(null);
frame.setSize(dimension);
frame.setUndecorated(true);
frame.setVisible(true);
NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "C:\\Program Files (x86)\\VideoLAN\\VLC");
EmbeddedMediaPlayerComponent component = new EmbeddedMediaPlayerComponent();
EmbeddedMediaPlayer player = component.getMediaPlayer();
Canvas videoSurface = component.getVideoSurface();
videoSurface.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("Click");
}
@Override
public void mousePressed(MouseEvent e) {
System.out.println("Click");
}
});
frame.getContentPane().add(component, BorderLayout.CENTER);
frame.repaint();
frame.setVisible(true);
String currDir = System.getProperty("user.dir");
player.playMedia(currDir + "\\sample_video_01.mp4");
}
}
Так что видео может играть, но не где в консоли фраза «Clicked» не печатается даже при нажатии на экран во время воспроизведения видео. Я также попробовал frame.getContentPane().add(videoSurface, BorderLayout.CENTER);
вместо frame.getContentPane().add(component, BorderLayout.CENTER);
, но ни один из них не смог напечатать «Щелкнуть».
Я использую NetBeans с jna-3.5.2
, platform-3.5.2
и vlcj-3.1.0
. Любой указатель был бы оценен.
Мне потребовалось некоторое время, чтобы опробовать ваше решение, но оно действительно точно выполнило задачу. Я должен был иметь как '' 'player.setEnableMouseInputHandling (false), так и' '' player.setEnableKeyInputHandling (false); '' ', чтобы получить координаты, - с отсутствием какой-либо из них, это не сработало. Спасибо. –