Sto realizzando un software di videosorveglianza devo leggere le immagini da una IP-Cam.
Le IP-Cam sono delle telecamere di sicurezza dotate di interfaccia di rete, web server e di indirizzo IP.
Per es. è possibile, quindi, prelevare le immagini in questo modo:
http://xxx.xxx.xxx.xxx/image.cgi?width=XXX&height=XXX
Io ho implementato una soluzione però analizzando il software in funzione, mi sono reso conto che dopo un po' ci sono moltissime connessioni aperte e aumentano in continuazione.
codice:
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
class Monitor extends JPanel implements Runnable {
private URL source;
private int rate;
private Thread thread;
private BufferedImage image;
/**
* Crea un nuovo pannello "monitor".
*
* @param source La sorgente video (IP CAM).
* @param rate I fotogrammi al secondo (fps).
*/
public Monitor(URL source, int rate) {
super(true); // Double Buffered
this.source = source;
this.rate = rate;
play();
}
public synchronized void play() {
if (thread == null) {
thread = new Thread(this);
thread.start();
}
}
public synchronized void pause() {
if(thread != null) {
thread = null;
}
}
public void run() {
while (thread != null) {
try {
setImage(ImageIO.read(source));
Thread.sleep(Math.round(1000 / rate));
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
private void setImage(BufferedImage bi) {
this.image = bi;
this.updateUI();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, null);
}
}
Ecco le mie domande:
1. Come posso leggere le immagini in sequenza in modo più efficiente?
2. E se volessi fare lo streaming di video M-JPEG (video.cgi) come potrei fare?
Ringrazio per l'attenzione.