![]() |
Verwenden der MediaInfo.DLL
Hallo,
es gibt mehrere Befehlszeilenprogramme, mit denen man Informationen zu Videodateien erhalten kann. Für mein Programm benötige ich die Spieldauer von MPEG-2-Videos. Beim Projekt MediaInfo ( ![]() ![]() Die DLL ist in C++ geschrieben und in der Dokumentation steht: Zitat:
Delphi-Quellcode:
Der Wert für den Fehler beträgt jedoch weder 0 noch 1 sondern bei zwei verschiedenen MPEG-2-Videos zuerst 17245408 und danach 170861792. Eine Fehlermeldung bekomme ich von Delphi 3 Prof nicht.
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, MPlayer; ... procedure TForm1.LiesDLLClick(Sender: TObject); type TMediaOpen = function (Name: string) : Integer; var Fehler: integer; LibHandle: THandle; MediaOpen: TMediaOpen; procedure add(Zeile : string); begin with Memo.Lines do Append(Zeile); end; begin try LibHandle := LoadLibrary ('MediaInfo.dll'); MediaOpen := GetProcAddress (LibHandle, 'MediaInfo_Open'); if assigned(MediaOpen) then begin Fehler := MediaOpen (Datei); add (IntToStr(Fehler)); end; finally FreeLibrary (LibHandle); end; end; Nachtrag: Das einzig brauchbare erschien mir ![]() |
Re: Verwenden der MediaInfo.DLL
Zitat:
Delphi-Quellcode:
TMediaOpen = function (Name: string) : Integer; // Falsch
TMediaOpen = function (Name: PChar) : Integer; // Richtig |
Re: Verwenden der MediaInfo.DLL
Zitat:
Zitat:
Ich habe jetzt mehrere Wochen nach Informationen gesucht und eben bin ich über das gestolpert: ![]() Ist ein Delphi 7 Projekt. Mal sehen, ob es auch unter Delphi 3 Prof funktioniert. |
Re: Verwenden der MediaInfo.DLL
Das Delphi Projekt läuft unter Delphi 7 Personal. In den USES ist tntstdctrls eingetragen, was nicht dabei ist. Man kann es ohne Fehlermeldung löschen. Es existiert kein Dateiöffnendialog und dementsprechend ist die Anzeige im Beispiel äußerst sinnfrei.
Nachtrag: Unter Delphi 3 Prof gibt es den Fehler: HowToUse_Dll Modul-Header fehlt oder ist beschädigt. |
Re: Verwenden der MediaInfo.DLL
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe versucht das gestern gefundene Delphi-Example unter D7 Personal zum Laufen zu bringen. Leider funktionierte es nicht auf Anhieb. Nach einigem Probieren habe ich es so geschafft:
1. Die MediaInfoLib - DLL (MediaInfo.DLL) und die von ihr benötigte MSVCR70.DLL gibt es auf ![]() 2. Das Example gab es ebenfalls bei ![]() 3. Das Example habe ich angepasst. a) In der 'HowToUse_Dll.pas' wurden die TNTSTDCTRLS aus den USES gestrichen, da die Benutzung des TntMemos anstelle des normalen Memos nur eine etwas veränderte Darstellung brachte. b) In der 'MediaInfoDll.pas' wurden bei der Deklaration der Functions und Procedures die Variablentypen PWideChar in PChar geändert. Nun konnte der Dateiname übergeben werden und aus den vielen ? wurde lesbarer Text. Bei D3 Prof bekam ich allerdings beim Öffnen der Datei eine Fehlermeldung. c) Nebenbei habe ich die Größe des Fensters geändert und es zentriert. Wenn ich das ganze noch in mein D3 Prof Projekt unterbekomme, ist das Problem gelöst. |
Re: Verwenden der MediaInfo.DLL
Liste der Anhänge anzeigen (Anzahl: 2)
Nun will ich diese recht einseitige Diskussion abschließen.
Die wie oben modifizierte MediaInfoDll.pas wird über USES eingebunden. Anschließend kann man die Mediadatei öffnen:
Delphi-Quellcode:
Dabei ist Datei vom Typ String und wurde über einen Dialog eingegeben. Handle ist vom Typ Cardinal.
Handle := MediaInfo_Open(PChar(Datei));
Es können Info Sets oder Einzelinformationen abgefordert werden. Die Sets dürften Stringlisten sein. Die Einzelinformationen sind Strings. Beispiel Set:
Delphi-Quellcode:
Das Memo ist, wie kann es anders sein, ein TMemo. Einzelinfos werden mit
MediaInfo_Complete_Set(false);
Memo.Text := MediaInfo_Inform(Handle);
Delphi-Quellcode:
abgerufen. InfoText ist vom Typ String. Was die letzten beiden Parameter bedeuten, weiß ich nicht. Dafür habe ich die Werte aus dem Beispiel genommen. Das Handle gab es beim Öffnen der Datei. Das StreamKind bezeichnet einen bestimmten Abschnitt im InfoSet. Das sind General, Video, Audio, Text, Chapters, Image und Max. Die StreamNumber ist der Zähler für den gewünschten Stream. Der Parameter ist ein in '' eingeschlossener casesenstiver String. Er bezeichnet die gewünschte Information.
InfoText := MediaInfo_Get(Handle, StreamKind, StreamNumber, Parameter, KindOfInfo, KindOfSearch)
Beispiel: Abtastfrequenz der zweiten Tonspur
Delphi-Quellcode:
Handle - gab's beim Öffnen der Datei,
InfoText := MediaInfo_Get(Handle, 2, 1, 'SamplingRate_String', 1, 0);
2 - Audio, 1 - zweiter Stream, 'SamplingRate_String' - Abtastfrequenz als String, wird in kHz mit Einheit zurückgegeben, 1 - ?, 0 - ?. Hat man alle Informationen, wird die Mediadatei wieder geschlossen:
Delphi-Quellcode:
Das war es schon. Unten habe ich meine BeispielGUI angehängt. In der GUI werden in einem Memo ein InfoSet und in Editfenstern Einzelinformationen ausgegeben. Es sind einmal Source mit den beiden notwendigen DLL und einmal EXE mit DLLs. Unter D3Prof kompiliert ist die EXE 208 kB, unter D7Pers 399 kb.
MediaInfo_Close(Handle);
|
Re: Verwenden der MediaInfo.DLL
Ergänzung zu
Delphi-Quellcode:
InfoText := MediaInfo_Get(Handle, StreamKind, StreamNumber, Parameter, KindOfInfo, KindOfSearch)
Delphi-Quellcode:
{ KindOfInfo - 0 = Info_Name : Unique name of parameter
1 = Info_Text : Value of parameter 2 = Info_Measure : Unique name of measure unit of parameter 3 = Info_Options : InfoOption_ShowInInform = 0 InfoOption_Support = 1 -> could be N (No), R (Read only), W (Read/Write), space (Non applicable) InfoOption_ShowInSupported = 2, -> Internal use only (info : Must be showed in Info_Capacities() ) InfoOption_Max = 3 4 = Info_Name_Text : Translated name of parameter 5 = Info_Measure_Text: Translated name of measure unit 6 = Info_Info : More info about the parameter 7 = Info_HowTo : Information : how data is found 8 = Info_Max KindOfSearch - Where to look for the parameter} |
Re: Verwenden der MediaInfo.DLL
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab mal Deine Source auf Version 0.7.1.2 upgedated.
![]() |
Re: Verwenden der MediaInfo.DLL
Danke, Amnon82.
Das Handling der DLL hat sich jeweils mit den Versionen 0.5.0.0 und 0.7.0.0 geändert. Beim letzten Mal waren die Änderungen umfangreicher, so dass die Aktualisierung notwendig war. Bei ![]() |
Re: Verwenden der MediaInfo.DLL
Ich denke wegen
Delphi-Quellcode:
sollte nach
{*******************************************************************}
{*** Öffnen der Mediadatei / Open media file ***} {*******************************************************************} Handle := MediaInfoA_New(); MediaInfoA_Open(Handle,PChar(Datei));
Delphi-Quellcode:
noch ein
{ Mediadatei schließen , close media file}
MediaInfoA_Close(Handle);
Delphi-Quellcode:
eingefügt werden.
MediaInfoA_Delete(Handle);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz