IP-Cam live stream speichern

David84

Mitglied
Hi zusammen.

Ich arbeite seit ca 3 Monaten an meinem Schulprojekt wo man über eine Java Software den Stream der Camera anzeigen und speichern kann. Den Stream kann ich mittlerweile in meiner GUI anzeigen und einzelne Bilder abspeichern. wenn ich aber den kompletten Stream speichern möchte stürzt das komplette Programm ab. In den Ordner wo der Stream gespeichert werden soll wird eine .mpeg Datei erstellt aber beim abspielen ist es wenn da nur so wie ein bild vorhanden wäre.

Könnt ihr mir da bitte weiterhelfen da ich im Internet leider zu diesem Thema keine Informationen gefunden habe.

den Sourcecode vom Button habe ich mit eingefügt vielleicht hat jemand eine Idee.

Gruß David
Java:
btnVideoSave = new JButton("Video speichern");
        btnVideoSave.addActionListener(new ActionListener() {
        	public void actionPerformed(ActionEvent e) {
        		BufferedInputStream stream = null;
                FileOutputStream fos = null;
                Thread thisThread = Thread.currentThread();
                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) +".mjpg");
                    
                    // 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();
                        }
                    }
                }

        	}
        });
        btnVideoSave.setBounds(670, 327, 89, 23);
        getContentPane().add(btnVideoSave);
 

Sen-Mithrarin

Gesperrter Benutzer
wie dein programm stürzt ab ? ... ach so ... du meinst es "friert ein" ... na is doch auch ganz klar : du blockierst den EDT

korrekter weise arbeitet man mit events in etwa so

Java:
public void actionPerformed(ActionEvent e)
{
	(new Thread(new Runnable()
	{
		public void run()
		{
			// ... verarbeiten des events
			SwingUtilities.invokeLater(new Runnable()
			{
				public void run()
				{
					// ... ergebnis-meldung durch ändern der GUI
				}
			});
		}
	})).start();
}

du musst deine i/o-ops in einen thread auslagern ... und wenn du dann wieder die gui manipulieren willst dies wieder in den edt einglieder ...

frag noch mal google wie man richtig mit gui's und events umgeht
 

Sen-Mithrarin

Gesperrter Benutzer
ein s***** wird es auf der gelinkten seite erklärt ... dort ist nichts davon zu finden das man i/o-ops in nem neuen thread auslagern muss .. geschweige denn ein sample ... sondern nur wie man über die event-queue wieder daten in den edt einspeist ...
 

David84

Mitglied
Ja du hast recht das Programm friert ein, so das man nichts mehr machen kann.

Wie baue ich das richtig in so einen Thread ein?

Ich will z.B. mit dem Speichern Button den stream speichern und dann noch einen Stop Button.

Thread bedeutet soviel wie Nebenläufigkeit oder?
Sprich das z.B. zwei Threads parallel laufen.
 

NoXiD

Bekanntes Mitglied
ein s***** wird es auf der gelinkten seite erklärt ... dort ist nichts davon zu finden das man i/o-ops in nem neuen thread auslagern muss .. geschweige denn ein sample ... sondern nur wie man über die event-queue wieder daten in den edt einspeist ...

brems dich mal etwas ein :noe:

Der TO hat ja allen anscheins nach nicht umbedingt viel Ahnung von Threads, also wäre doch eine Allgemeine Erklärung wie man üblicherweise mit GUI und lang andauernder Operationen umgeht sinnvoll, oder nicht? Ein Sample ist im Link nicht, hab ich auch nicht gesagt. Aber es wird gut erklärt wie man lang andauernde Aktionen normalerweise durchführt.

So a classic example is that you need to run a long running operation like downloading a file. So you launch a thread to perform this action then when it is completed you will use invokeLater to update the UI. If you didn't use invokeLater and instead you just updated the ui directly you might have a race condition and undefined behavior could occur.
 

David84

Mitglied
Ich habe jetzt den code etwas angepasst aber bekomme folgende fehlermeldung:
Java:
Exception in thread "Thread-4" java.lang.NullPointerException
	at RaspiSpy.VideoSpeichern.run(VideoSpeichern.java:27)
	at java.lang.Thread.run(Unknown Source)

Der Code sind so aus in der Main:
Java:
        btnVideoSave = new JButton("Video speichern");
        btnVideoSave.addActionListener(new ActionListener() {
        	public void actionPerformed(ActionEvent e) {
        	    VideoSpeichern video = new VideoSpeichern();
        	    VideoSpeichern = new Thread(video);
        	    VideoSpeichern.start();
        		
        	}
        });
        btnVideoSave.setBounds(670, 327, 89, 23);
        getContentPane().add(btnVideoSave);

und das Ist die VideoSpeichern klasse:

Java:
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 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();
            }
        }
    }


}}
 

David84

Mitglied
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?

Java:
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();
            }
        }
    }


}}
 

Sen-Mithrarin

Gesperrter Benutzer
spontan : weil weder format noch start und ende definiert werden ... was aber für ein späteres abspielen eines "abgeschlossenen" video-files nötig ist ...


einfach mal so irgendeinen stream "wegcapturen" geht halt nicht
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Live-Stream einer WebCam importieren Allgemeine Java-Themen 3
D Live-Scripting im Server Allgemeine Java-Themen 6
B Game Of Live Allgemeine Java-Themen 4
B Live Search implementieren Allgemeine Java-Themen 4
F Live Ticker durch Screenshots Allgemeine Java-Themen 22
M Lautstärke von Audiosignal live berechnen Allgemeine Java-Themen 7
T Live Connect unter Linux ? Allgemeine Java-Themen 16
KonradN SonarLint: Resources should be closed bei Stream<T>? Allgemeine Java-Themen 6
S Umstellung von File auf Path - Probleme mit Stream Allgemeine Java-Themen 5
A verschachtelte for-Schleife in einen Stream umwandeln? Allgemeine Java-Themen 4
A Wie schreibe ich eine For-Schleife in ein Stream API um? Allgemeine Java-Themen 12
looparda Stream mit Sonderbehandlung des ersten Elements Allgemeine Java-Themen 17
R Java Stream: Ist es möglich, einen stream zusammenzufassen Allgemeine Java-Themen 6
S Mittelwert anhand eines Stream berechnen Allgemeine Java-Themen 5
H Stream in ArrayList umwandeln Allgemeine Java-Themen 2
M stream.Collectors Fehlermeldung Allgemeine Java-Themen 1
C TCP Server und BufferedReader Leerstring im Stream? Allgemeine Java-Themen 5
G Neues Objekt aus List<JsonObject> mit Stream Allgemeine Java-Themen 4
Y Liste in Stream Packen Allgemeine Java-Themen 1
N Java stream filtern. Allgemeine Java-Themen 19
H Collector Generics Problem (incl. Stream & Lambda) Allgemeine Java-Themen 4
N javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1] Allgemeine Java-Themen 3
N [stream-api] Parameter pro Typ zählen Allgemeine Java-Themen 1
J Stream-basierter Cache Allgemeine Java-Themen 4
B BufferedWriter in InputStream oder Zeichen-Stream in Byte-Stream Allgemeine Java-Themen 5
D Klassen Zeit aus NMEA-Stream in SimpleDateFormat Allgemeine Java-Themen 17
J Stream-Murks! Allgemeine Java-Themen 18
T Problem mit gzip Stream und Ende der Datei Allgemeine Java-Themen 2
JAVATUX Java Programm mit ATI Stream Unterstützung Allgemeine Java-Themen 3
X Audio Internet-Stream Allgemeine Java-Themen 2
B Stream Verständnisproblem Allgemeine Java-Themen 2
P Mime Type aus Stream lesen Allgemeine Java-Themen 5
C Bit Stream Klasse Allgemeine Java-Themen 9
dayaftereh Serializable und Object In/Out Stream Allgemeine Java-Themen 2
M PCL Stream lesen und schreiben Allgemeine Java-Themen 6
musiKk Stream zum Lesen von Dateien mit seek und peek Allgemeine Java-Themen 2
J Problem mit Scanner-Stream Allgemeine Java-Themen 2
O Stream unvollständig Allgemeine Java-Themen 3
0 Stream/Datei an VLC übergeben und abspielen Allgemeine Java-Themen 10
B getImage() vom Stream oder File Allgemeine Java-Themen 3
N Werte Von C++ nach Java über den Stream möglich? Allgemeine Java-Themen 8
S Stream ReadLine() Allgemeine Frage Allgemeine Java-Themen 5
S Stream ohne Referenz kopieren ? Allgemeine Java-Themen 4
D FileInputStream bzw. BufferedInput Stream Puffern Allgemeine Java-Themen 6
T Mehrere Dateien byteweise durch stream schieben Allgemeine Java-Themen 9
T Stream encodierrn und decodieren mit JSpeex Allgemeine Java-Themen 2
R Stream Byte für Byte durchgehen Allgemeine Java-Themen 5
O Input stream geht net Allgemeine Java-Themen 2
N Speichern von binären Dateien (Zip-Archiv) per Stream? Allgemeine Java-Themen 6
T Bit-Stream Allgemeine Java-Themen 12
R Stream für alle Dateiarten Allgemeine Java-Themen 9
thE_29 API für transport stream Allgemeine Java-Themen 2
M Output Stream / Protokoll does not support output Allgemeine Java-Themen 2
D GetResourceAsStream - Stream closed exception Allgemeine Java-Themen 5
G Umwandlung in Stream Allgemeine Java-Themen 5
J Output Stream Allgemeine Java-Themen 4
OnDemand Zugangsdaten externer Systeme sicher speichern Allgemeine Java-Themen 8
Z Passwort Versuche speichern Allgemeine Java-Themen 8
M Eigene Datenstruktur um eine Menge zu speichern Allgemeine Java-Themen 3
8u3631984 Bilder in Datenbank speichern - sinnvoll Allgemeine Java-Themen 5
melaniemueller Einzelne Zeile aus einer txt Datei in einem String speichern Allgemeine Java-Themen 12
I Hibernate Envers - Aufruf der Methode zum Speichern selbst ausführen oder managen? Allgemeine Java-Themen 0
killig Textdatei einlesen und in HashMap speichern (duplikate entfernen) Allgemeine Java-Themen 12
J (Geplante) Änderungen an einer Datei vorübergehend speichern und anwenden? Allgemeine Java-Themen 12
N zweidimensionalen Array in dreidimensionalen Array speichern Allgemeine Java-Themen 4
temi Lösung zum Speichern von Deltafiles Allgemeine Java-Themen 6
J Java Filechooser Speichern Allgemeine Java-Themen 8
N Arrayliste in eine Datei speichern Allgemeine Java-Themen 4
H Elemente aus ArrayList in Array speichern Allgemeine Java-Themen 8
platofan23 Wie .txtDatei im Java Eclipse-Projekt bzw. in der Jar speichern? Allgemeine Java-Themen 7
MiMa Werte in liste speichern? Allgemeine Java-Themen 3
S Swing Speichern nach Button-Klick Allgemeine Java-Themen 5
H ArrayListe in CSV Datei speichern Allgemeine Java-Themen 6
H Mehrere Datentypen in einer Arraylist speichern Allgemeine Java-Themen 9
H Objekte speichern und laden Allgemeine Java-Themen 10
H Objekte speichern und laden Allgemeine Java-Themen 1
H Objekt speichern und laden Allgemeine Java-Themen 1
H Objekt speichern und laden Allgemeine Java-Themen 1
T Speichern von Objekten Allgemeine Java-Themen 2
M Schnelleres Speichern von XML-Daten über URLConnection Allgemeine Java-Themen 4
D .txt Datei in .jar Datei speichern Allgemeine Java-Themen 3
M Key-File im selben Ordner speichern? Allgemeine Java-Themen 18
J int Werte in einer anderen Klasse in Arrays speichern Allgemeine Java-Themen 3
Aruetiise Funktion(y = mx+n) in String speichern und berechnen Allgemeine Java-Themen 9
S Eindimensionales Array in zweidimensionales Array speichern Allgemeine Java-Themen 5
offi Excel mit Inhalten aus DB öffnen ohne zu speichern Allgemeine Java-Themen 8
MiMa Speichern von Programmeinstellungen in Datei Allgemeine Java-Themen 7
F Best Practice Große Anzahl an Objekten speichern und lesen Allgemeine Java-Themen 19
B Von String zu <Objekt> ||Speichern/Laden Allgemeine Java-Themen 17
Arif Input/Output Dateien im Jar-Programm speichern Allgemeine Java-Themen 12
Q-bert Strings aus der JList in eine Datenbank speichern Allgemeine Java-Themen 1
L CSV File lesen, in ArrayList speichern und ausgeben Allgemeine Java-Themen 3
Q-bert Daten von Java Programm speichern Allgemeine Java-Themen 4
@SupressWarnings() Feste Kosten speichern Allgemeine Java-Themen 4
N ZIp datei direkt im eclipse speichern Allgemeine Java-Themen 4
N Das Ende von bestimmten zeilen in text datei ändern und speichern Allgemeine Java-Themen 3
C Best Practice Speichern kleineren Mengen Stammdaten? Allgemeine Java-Themen 3
X Mehrere booleans in Datei Speichern, Updaten und Laden Allgemeine Java-Themen 1
F Json in sql speichern und lesen Allgemeine Java-Themen 10
F Alte Passörter mit Gson und Json in SQL speichern? Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben