Java vlcj JPanel draw-over mediaPlayerComponent
我有一个功能齐全的基于VLCj的视频播放器,如下图所示 工作代码Java vlcj JPanel draw-over mediaPlayerComponent,java,swing,video,vlc,vlcj,Java,Swing,Video,Vlc,Vlcj,我有一个功能齐全的基于VLCj的视频播放器,如下图所示 工作代码 import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Graphics; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingUtilities; import uk.co.caprica.vlcj.component.Embedde
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import uk.co.caprica.vlcj.component.EmbeddedMediaPlayerComponent;
import uk.co.caprica.vlcj.discovery.NativeDiscovery;
/**
* Minimal quick-start example.
*/
public class Example1 {
private final JFrame frame;
private final EmbeddedMediaPlayerComponent mediaPlayerComponent;
public static void main(String[] args) {
new NativeDiscovery().discover();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Example1().start("file:///C:/video.avi");
}
});
}
public Example1() {
mediaPlayerComponent = new EmbeddedMediaPlayerComponent();
frame = new JFrame("vlcj quickstart");
frame.setLocation(50, 50);
frame.setSize(1400, 800);
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add(mediaPlayerComponent, BorderLayout.CENTER);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setPreferredSize(new Dimension(320, 240));
frame.pack();
frame.setVisible(true);
}
private void start(String mrl) {
mediaPlayerComponent.getMediaPlayer().playMedia(mrl);
}
}
修改代码以便在视频上画图
我需要的是画在视频上(例如一个矩形)。为此,我创建了MyJPanel
class MyPanel extends JPanel {
private EmbeddedMediaPlayerComponent comp;
public MyPanel(EmbeddedMediaPlayerComponent mediaPlayerComponent) {
add(this.comp = mediaPlayerComponent);
}
@Override
public void paint(Graphics g) {
super.paint(g);
g.drawRect(10, 10, 200, 100);
}
}
而不是线:
frame.getContentPane().add(mediaPlayerComponent, BorderLayout.CENTER);
我补充说:
frame.getContentPane().add(new MyPanel(mediaPlayerComponent), BorderLayout.CENTER);
问题:
添加MyPanel后,我遇到了这个错误:没有显示任何视频
[00000000 29D930E0]avi解复用错误:没有为轨道0设置关键帧
[00000000 29E035D0]核心vout显示错误:未能设置在顶部
您根本无法使用Java2D在重量级AWT
Canvas
video界面上绘制
但是,您可以使用许多其他方法在视频顶部进行渲染: