Seite 1 von 2

ADM Dateien öffnen...

Verfasst: 11.01.2012 18:24
von Stuhli
Hallo, ich habe hier eine Aneinanderreihung von JPEG-Bildern in einer Datei. Diese Datei wurde von einem Überwachungssystem erstellt, welches nur BILDER macht... kein Video. Die Bilder werden hintereinander in 1 Datei geschrieben und diese Datein endet mit ".adm" wie kann ich nun die Bilder anzeigen lassen. Gibt esnicht bei Jpeg einen Header, den ich suchen kann. Wo ist Anfang und wo ende eines Bildes...?

Habe schon nen Link im Internet gefunden, wo es wohl sowas auch gibt :

http://www.sicherheitsteam.de/systeme/v ... tware.html

Re: ADM Dateien öffnen...

Verfasst: 11.01.2012 18:47
von Kiffi
Stuhli hat geschrieben:Wo ist Anfang und wo ende eines Bildes...?
es gibt im englischen Forum ein Snippet von netmaestro, in dem
er eine Datei in den Speicher liest, den Memory-Pointer in einer
Schleife hochzählen lässt und innerhalb der Schleife ein CatchImage()
ausführt. Liefert diese Funktion einen Wert ungleich 0, dann hast
Du ein Bild.

http://www.purebasic.fr/english/viewtop ... 73#p369373

Keine Ahnung, ob das eine praktikable Lösung ist; finde sie allerdings
recht pfiffig. :-)

Grüße ... Kiffi

Re: ADM Dateien öffnen...

Verfasst: 11.01.2012 19:04
von NicTheQuick
Normalerweise nennt sich sowas ein MJPEG-Stream. Mit Ffmpeg lässt sich so ein Stream ganz einfach in seiner Einzelbilder zerlegen.

Re: ADM Dateien öffnen...

Verfasst: 12.01.2012 08:22
von Stuhli
Moin,

vielen Dank für die schnellen Antworten.... den Code habe ich mal ausprobiert aber der läuft ohne Ergebnis durch. Auch FFMPEG findet keine Ergebnisse. VLC Player, Camtasia, und DIVX finden nix. Aber die Bilder sind da - nur in welchem Format. Die Dateien sind ab 150 MB groß, kann sie daher nicht posten... Andere Ansätze sind gern gesehen... :(

Re: ADM Dateien öffnen...

Verfasst: 12.01.2012 09:18
von dige
Vielleicht sind die Bilder/Videos verschlüsselt wegen Datenschutz

Re: ADM Dateien öffnen...

Verfasst: 12.01.2012 09:26
von Stuhli
ganau daran hatte ich gestern Abend auch gedacht... :( das wäre jetzt blöd.....

habe jetzt schonmal rausbekommen, das es BILDER sind, 720 x 576 Pixel bei 70% Kompression.... kann man mit diesen Daten nicht schon was rausbekommen ??

Re: ADM Dateien öffnen...

Verfasst: 12.01.2012 12:14
von HeX0R
Ein JPEG beginnt immer mit $FFD8 und endet mit $FFD9.
Vielleicht findest du ja doch irgendwas in deiner fetten Datei.

Hier gibts auch noch ein paar Informationen.

Re: ADM Dateien öffnen...

Verfasst: 12.01.2012 12:52
von Stuhli
Erfolg ! Erfolg ! Erfolg !

Habe mit nem HEX-Editor die Datei geöffnet und siehe da FFD8 finde ich und vorher ist auch ein FFD9 vom vorherigen Bild zu finden.... kann mir jetzt jemand auf die Sprünge helfen mit nem passenden Code-Ansatz...

Wie öffne ich die Datei und schreibe den gelesenen CODE wie in welche Datei... ich fummle zwar selbst gleich, aber es wäre hilfreich, wenn da jemand pfiffiger wäre als ich. Es geht hier um etwas, was mir von der Theke geklaut wurde.... und auf dem Video ist bestimmt was zu sehen...

Re: ADM Dateien öffnen...

Verfasst: 12.01.2012 15:18
von NicTheQuick
Ich hab mal was kleines dazu gecodet. Das ist zwar unübersichtlich und kurz, funktioniert aber wie gewollt.

Code: Alles auswählen

EnableExplicit
Procedure.i SplitJPEGStream(file.s)
	Protected counter.i
	Protected path.s = GetPathPart(file)
	Protected fileId.i
	Protected Dim bytes.a(4)
	Protected pos.i = 0
	Protected writeFileId.i = 0

	fileId = ReadFile(#PB_Any, file)
	If (Not fileId)
		Debug "Konnte Datei nicht öffnen."
		ProcedureReturn #False
	EndIf
	
	While Not Eof(fileid)
		bytes(pos) = ReadAsciiCharacter(fileId)
		If (bytes(pos) = $D8 And bytes((pos + 3) % 4) = $FF And (counter = 0 Or (bytes((pos + 2) % 4) = $D9 And bytes((pos + 1) % 4) = $FF)))
			If (writeFileId)
				WriteAsciiCharacter(writeFileId, bytes((pos + 2) % 4))
				CloseFile(writeFileId)
			EndIf
			counter + 1
			writeFileId = CreateFile(#PB_Any, path + RSet(Str(counter), 4, "0") + ".jpg")
			If (Not writeFileId)
				Debug "Konnte Datei nicht zum Schreiben öffnen."
				ProcedureReturn #False
			EndIf
		ElseIf (writeFileId)
			WriteAsciiCharacter(writeFileId, bytes((pos + 2) % 4))
		EndIf
		pos = (pos + 1) % 4
	Wend
	
	If (writeFileId)
		WriteAsciiCharacter(writeFileId, bytes((pos + 2) % 4))
		WriteAsciiCharacter(writeFileId, bytes((pos + 3) % 4))
		CloseFile(writeFileId)
	EndIf
	
	CloseFile(fileId)
	
	ProcedureReturn #True
EndProcedure

SplitJPEGStream("/home/nicolas/test.mjpeg")
Bei Fragen einfach fragen.

///Edit:
Ich habe das ganze mal mit 537 JPEGs versucht. Also zuerst alle nacheinander in eine Datei geschrieben und dann mittels 'SplitJPEGStream()' wieder entpackt. Es gab keine Fehler beim Entpacken und ohne Debugger geht es innerhalb einer Sekunde. Je nach Bildgröße natürlich.

Re: ADM Dateien öffnen...

Verfasst: 12.01.2012 15:58
von Stuhli
DU BIST MEIN HELD !!! Ich habe mit nem HEX Editor alles rauskopert, weil ich keinen klaren Kopf hatte um was zu schreiben.... aber es funzt einwandfrei !!!!! DANKE !!!!