Camera display mosaic freezing images
Posted: 29 Oct 2019 13:46
I'm making a mosaic for viewing videos. I build a JFrame with some components, including Canvas. I place an instance of a MediaPlayer on each Canvas and play the video. But I'm having problems with frame loss, delayed display and even complete freezing of images. Is there anything that can be done to solve this problem?
Code:
You can see my post at StackOverflow with images:
[url]https://stackoverflow.com/questions/58486575/images-being-frozen-delayed-using-vlcj-and-java-swing?noredirect=1#comment103446432_58486575[/url]
Code:
Code: Select all
public class ViewerController {
private List<EmbeddedMediaPlayer> playerList = new ArrayList<>();
private List<Canvas> canvasList = new ArrayList<>();
public ViewerController() {
gerarTela();
}
private void gerarTela() {
String[] args = {
"--rtsp-tcp",
"--network-caching=1000",
"--file-caching=300",
"--clock-jitter=0",
"--clock-synchro=0"
};
JFrame janela = geraJframe();
var painelDaJanela = new JPanel(new GridLayout(0, 4, 5, 5));
var factory = new MediaPlayerFactory(args);
for (int i = 0; i < 16; i++) {
var containerDoVideo = new Canvas();
containerDoVideo.setBackground(Color.BLACK);
JPanel painelDoContainer = new JPanel();
painelDoContainer.setBackground(new Color(31, 27, 36));
painelDoContainer.setLayout(new BorderLayout());
painelDoContainer.add(containerDoVideo, BorderLayout.CENTER);
var player = factory.newEmbeddedMediaPlayer();
player.setVideoSurface(factory.newVideoSurface(containerDoVideo));
playerList.add(player);
painelDaJanela.add(painelDoContainer);
canvasList.add(containerDoVideo);
}
painelDaJanela.setBackground(new Color(31, 27, 36));
janela.add(painelDaJanela, BorderLayout.CENTER);
janela.setResizable(true);
janela.setExtendedState(JFrame.MAXIMIZED_BOTH);
janela.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent windowEvent) {
stop();
super.windowClosing(windowEvent);
}
});
janela.setVisible(true);
}
public void play(List<Camera> lista) {
int limiteLista = lista.size();
for (int i = 0; i < 16; i++) {
if (!(i < limiteLista)) {
canvasList.get(i).setBackground(new Color(31, 27, 36));
} else {
Camera camera = lista.get(i);
playerList.get(i).playMedia(camera.getUrl_video());
}
}
}
private void stop() {
playerList.forEach(MediaPlayer::stop);
}
private JFrame geraJframe() {
Toolkit tk = Toolkit.getDefaultToolkit();
Dimension d = tk.getScreenSize();
JFrame jFrame = new JFrame();
jFrame.setMinimumSize(new Dimension(d.width, d.height));
jFrame.setLayout(new BorderLayout());
jFrame.setIconImage(tk.getImage(getClass().getResource("/imgs/icon.png")));
jFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);
return jFrame;
}
}
[url]https://stackoverflow.com/questions/58486575/images-being-frozen-delayed-using-vlcj-and-java-swing?noredirect=1#comment103446432_58486575[/url]