Hallo zusammen. Ich bin was Java angeht Neueinsteiger und ich arbeite sein ca 5 Monaten an einem Schulprojekt. Ich soll einen Kamera über eine IP ansteuern und Bilder sowie Videos speichern können.
Die Software ist soweit fertig aber das mit dem Video Speichern funktioniert leider nicht. Habe nun das Problem das die Software einfriert gelöst aber wenn ich die Aufnahme starte nimmt das Programm eine video auf das wird auch größer von der MByte desto länger es aufnimmt. Aber bei Abspielen sieht es so aus als ob das Programm nur paar Millisekunden aufnimmt. Hat jemand ne Idee wo der Fehler liegen könnte?
Bin für jede Hilfe sehr Dankbar.
Gruß David
Hier der Code in der Main für den Button
btnVideoSave = new JButton("Video speichern");
btnVideoSave.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
VideoSpeichern video = new VideoSpeichern(Daten);
VideoSpeichern = new Thread(video);
VideoSpeichern.start();
}
});
btnVideoSave.setBounds(670, 327, 89, 23);
getContentPane().add(btnVideoSave);
Hier der Code für das Speichern des Videos
import java.io.BufferedInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
import java.text.SimpleDateFormat;
import java.util.Date;
public class VideoSpeichern implements Runnable {
String Daten[];
public VideoSpeichern(String [] Daten){
this.Daten = Daten;
}
public void run(){
//Thread thisThread = Thread.currentThread();
BufferedInputStream stream = null;
FileOutputStream fos = null;
try {
Date dt = new Date();
SimpleDateFormat dtformat = new SimpleDateFormat("dd.MM.yyyy 'at' HH.mm.ss");// Datumsformat festlegen
URL url = new URL("http://" + Daten[0] + ":" + Daten[1]);
URLConnection conn = url.openConnection();
stream = new BufferedInputStream(conn.getInputStream());
fos = new FileOutputStream(Daten[4] + "\\"+ dtformat.format(dt) +".mpeg");
// Die ausgelesenen Daten liegen als byte vor, nicht als char
byte buffer[] = new byte[256];
int nbytes ;
/*
* Hier wird nicht immer nur ein byte gelesen, sondern gleich
* maximal 256. Bringt bessere Performance.
*/
while((nbytes=stream.read(buffer, 0, 256)) != 1) {
fos.write(buffer, 0, nbytes);
}
/*
* Buffer leeren, Speicher freigeben
*/
buffer = null;
} catch(IOException e1) {
e1.printStackTrace();
} finally {
/*
* Die Streams schließen, egal ob Exception kommt oder nicht
*/
if(fos != null) {
try {
fos.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
if(stream != null) {
try {
stream.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}}