AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Verwenden der MediaInfo.DLL

Verwenden der MediaInfo.DLL

Ein Thema von Garfield · begonnen am 25. Okt 2004 · letzter Beitrag vom 5. Nov 2018
Antwort Antwort
Seite 1 von 5  1 23     Letzte » 
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#1

Verwenden der MediaInfo.DLL

  Alt 25. Okt 2004, 17:28
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 (http://mediainfo.sourceforge.net/, http://sourceforge.net/projects/mediainfo/) gibt es neben einem Befehlszeilentool und einer GUI auch eine DLL. Diese MediaInfo.DLL würde ich gern benutzen. Jedoch scheitere ich bereits beim Öffnen der Datei.

Die DLL ist in C++ geschrieben und in der Dokumentation steht:

Zitat:
int MediaInfoLib::MediaInfo::Open ( const std::string & File )

Open a file.


Parameters:
File File to open

Return values:
0 File not opened
1 File opened
Meine Procedure sieht so aus:

Delphi-Quellcode:
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;
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.

Nachtrag:

Das einzig brauchbare erschien mir http://www.delphipraxis.net/internal...ct.php?t=29012 zu sein. Allerdings scheitert der Import mit der Meldung, dass Selbstregistrierungsinformationen fehlen.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Verwenden der MediaInfo.DLL

  Alt 25. Okt 2004, 18:11
Zitat von Garfield:
Das einzig brauchbare erschien mir http://www.delphipraxis.net/internal...ct.php?t=29012 zu sein. Allerdings scheitert der Import mit der Meldung, dass Selbstregistrierungsinformationen fehlen.
Es handelt sich nicht um eine ActiveX-DLL, sondern um eine "normale" DLL.
Delphi-Quellcode:
TMediaOpen = function (Name: string) : Integer; // Falsch
TMediaOpen = function (Name: PChar) : Integer; // Richtig
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#3

Re: Verwenden der MediaInfo.DLL

  Alt 25. Okt 2004, 19:21
Zitat von shmia:
Es handelt sich nicht um eine ActiveX-DLL, sondern um eine "normale" DLL.
Stimmt leider.

Zitat von shmia:
Delphi-Quellcode:
TMediaOpen = function (Name: string) : Integer; // Falsch
TMediaOpen = function (Name: PChar) : Integer; // Richtig
Danke für den Hinweis. Ich habe es geändert. Aber leider hat sich am Ergebnis nichts geändert.

Ich habe jetzt mehrere Wochen nach Informationen gesucht und eben bin ich über das gestolpert:

http://cvs.sourceforge.net/viewcvs.p...elphi/Example/

Ist ein Delphi 7 Projekt. Mal sehen, ob es auch unter Delphi 3 Prof funktioniert.
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#4

Re: Verwenden der MediaInfo.DLL

  Alt 25. Okt 2004, 21:05
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.
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#5

Re: Verwenden der MediaInfo.DLL

  Alt 26. Okt 2004, 18:42
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 Sourceforge (Auch unten im Archiv enthalten).

2. Das Example gab es ebenfalls bei Sourceforge.

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.
Angehängte Dateien
Dateityp: rar delphi-example.rar (790,6 KB, 140x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#6

Re: Verwenden der MediaInfo.DLL

  Alt 27. Okt 2004, 10:48
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:
Handle := MediaInfo_Open(PChar(Datei)); Dabei ist Datei vom Typ String und wurde über einen Dialog eingegeben. Handle ist vom Typ Cardinal.

Es können Info Sets oder Einzelinformationen abgefordert werden. Die Sets dürften Stringlisten sein. Die Einzelinformationen sind Strings.

Beispiel Set:
Delphi-Quellcode:
MediaInfo_Complete_Set(false);
Memo.Text := MediaInfo_Inform(Handle);
Das Memo ist, wie kann es anders sein, ein TMemo. Einzelinfos werden mit
InfoText := MediaInfo_Get(Handle, StreamKind, StreamNumber, Parameter, KindOfInfo, KindOfSearch) 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.

Beispiel: Abtastfrequenz der zweiten Tonspur
InfoText := MediaInfo_Get(Handle, 2, 1, 'SamplingRate_String', 1, 0); Handle - gab's beim Öffnen der Datei,
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:
MediaInfo_Close(Handle); 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.
Angehängte Dateien
Dateityp: rar beispielgui_programm.rar (465,7 KB, 103x aufgerufen)
Dateityp: rar beispielgui_source.rar (381,6 KB, 123x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#7

Re: Verwenden der MediaInfo.DLL

  Alt 28. Okt 2004, 08:54
Ergänzung zu

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}
  Mit Zitat antworten Zitat
Benutzerbild von Amnon82
Amnon82

Registriert seit: 5. Jan 2005
186 Beiträge
 
FreePascal / Lazarus
 
#8

Re: Verwenden der MediaInfo.DLL

  Alt 17. Mär 2006, 15:51
Ich hab mal Deine Source auf Version 0.7.1.2 upgedated.

http://img95.imageshack.us/img95/7383/mdll07124xp.png
Angehängte Dateien
Dateityp: rar beispielgui_source0712_310.rar (1,01 MB, 161x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#9

Re: Verwenden der MediaInfo.DLL

  Alt 25. Mär 2006, 09:26
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 Fr_An gibt es auch eine GUI mit Source für MediaInfo Version 0.4.*.* und 0.5.*.*. Ein Update auf die 0.7.*.* hatte er eigentlich auch geplant. In SVCDPal2DVD ist es jedenfalls enthalten.
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#10

Re: Verwenden der MediaInfo.DLL

  Alt 25. Mär 2006, 22:12
Ich denke wegen
Delphi-Quellcode:
{*******************************************************************}
{*** Öffnen der Mediadatei / Open media file                     ***}
{*******************************************************************}
    Handle := MediaInfoA_New();
    MediaInfoA_Open(Handle,PChar(Datei));
sollte nach
Delphi-Quellcode:
   { Mediadatei schließen , close media file}

    MediaInfoA_Close(Handle);
noch ein
    MediaInfoA_Delete(Handle); eingefügt werden.
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:07 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