Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi DSPack / DirectShow Problem (https://www.delphipraxis.net/198076-dspack-directshow-problem.html)

sebLA 2. Okt 2018 13:25

DSPack / DirectShow Problem
 
Hallo zusammen,

Ich durfte vor Kurzem ein Projekt eines Kollegen übernehmen, der nun leider nicht mehr erreichbar ist und habe eine Frage bzw. ein Problem. Normalerweise beschäftige ich mich mit Java und muss mich nun um die Softwarepflege des bestehenen Delphi-Programms kümmern. Bislang klappt das ganz gut, nur muss ich nun eine andere IP-Kamera in das Projekt einbinden und stoße auf einige Probleme.

Im Programm wird ein MJPEG-Stream per HTTP über die Axis Media Control API als AVI-Datei eingelesen und gespeichert. Dieser wird anschließend per DirectShow9 ausgegeben.

Code:
FilterGraph.ClearGraph;
FilterGraph.RenderFile(Datei); //Datei ist hierbei Pfad zur AVI-Datei
FilterGraph.Pause;
Nun habe ich das Problem, dass ich bei manchen Dateien die Exception "EDirectShowException" erhalte. Ich habe mir die entsprechenden Dateien und ihre Metadaten angeschaut und musste dabei feststellen, dass korrekte Dateien folgende Metadaten für die Auflösung anzeigen "Width : 1 280 pixels, Height : 720 pixels" und fehlerhafte Dateien "Width : 83128 644 pixels , Height : pixel0". Im VLC-Player lassen sich aber beide Dateien darstellen. Ich schätze also, dass beim Abspielen mittels DirectShow die Metadaten zu einem Problem führen.

Gibt es eine Möglichkeit die Metadaten zu ignorieren oder zu ändern? Mir fehlen leider weitere Ideen und ich bin solangsam am verzweifeln... Dokumentation gibt es leider auch keine.

Vielen Dank und viele Grüße,
Sebastian

EWeiss 2. Okt 2018 14:38

AW: DSPack / DirectShow Problem
 
Sieh dir mal meinen Player an vielleicht kannst du ja meine DLL dafür verwenden.
Aber auch diese funktioniert nur mit Korrekten Daten die vom Axis Media Control gespeichert wurden.
Wenn hier schon die falschen Auflösungen in der AVI abgelegt werden dann geht es genauso wenig.

die API und die DLL kannst du unter finden..

Zitat:

Im VLC-Player lassen sich aber beide Dateien darstellen.
Ich denke die fangen das intern ab.
Also wenn die W/H nicht korrekt sind dann wird versucht diese auf die Aktuelle Video Window Größe zu setzen erst wenn das fehlschlägt bzw. der Typ nicht unterstützt wird gibt's ne Fehlermeldung.

try.. except bla, bla setze die größe selbst und versuche es nochmal.
Zitat:

"Width : 83128 644 pixels , Height : pixel0".
Da liegt wohl ein Speicherproblem vor.. Nulle die Höhe und die Weite bevor du sie abfragst.
Wenn du die vorher nicht abfragen kannst dann liegt ein Design Problem vor. (Schlecht programmiert, nun dann viel spaß dabei)

Wenn eins der beiden 0 dann setze die größe selbst.
Und starte erst dann den stream.

gruss

KodeZwerg 2. Okt 2018 19:29

AW: DSPack / DirectShow Problem
 
Gut wäre, um es nachzuvollziehen, die ersten 2-3 Chunks der .avi einsehen zu können. Metadaten greifen eigentlich nicht in den Abspielpin ein, die dienen nur visuelles blabla darzustellen.

sebLA 4. Okt 2018 10:27

AW: DSPack / DirectShow Problem
 
Ich habe die Dateien nun noch weiter verglichen und es liegt tatsächlich nur am Header. In den funktionsfähigen Dateien ist die richtige Auflösung hinterlegt und in den nicht funktionsfähigen Dateien eine falsche Auflösung. Wenn ich nun im Hex-Editor den Header entsprechend anpasse, so sind alle Dateien lauffähig. Nun werde ich versuchen das irgendwie in Delphi automatisch anzupassen.

Vielen Dank nochmal und viele Grüße,
Sebastian

TomyN 2. Jan 2019 15:00

AW: DSPack / DirectShow Problem
 
Hi,
das klingt eher nach einem Problem des 'Datenlieferanten', hast Du schon mal beim Kamerahersteller nach einem Update der Kamerasoftware gefragt?

Tomy


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz