Programmierung > Delphi > MediaInfoLib - DLL

Anwendung der Units

(Units zur statischen und dynamischen Einbindung der MediaInfo.Dll v0.5.0.0 und v0.6.0.0)

Vorbereitungen

unit unit1;
 
uses
  ... MediaInfoDll, ...;                // bzw MediaInfoDllmod
 
...
 
procedure MediaInfo_holen (var Datei : String);
var
  Handle : Cardinal;
  ...

In der Unit, in welcher die MediaInfo.DLL aufgerufen wird, wird unter Uses zur statischen Einbindung die MediaInfoDLL bzw zur dynamischen Einbindung die MediaInfoDLLmod eingetragen und in der entsprechenden Procedure die Variable Handle von Typ Cardinal deklariert. Der Procedure wird der Name der Mediadatei als String übergeben. Daraufhin werden die Daten an bestimmte Elemente zur Darstellung der Informationen (Memo, Edit, Label) zurückgegeben.

Öffnen der Mediadatei

begin
 
  if GetEntryPoints                  // Nur bei der Verwendung
  then begin                         // der MediaInfoDLLmod.pas
   
    Handle := MediaInfoA_Open(PChar(Datei));

Mit der Function GetEntryPoints werden die Einstiegspunkte für die Function und Procedure der DLL geholt. Werden alle gefunden, wird der Wert True zurückgegeben. Der Dateiname wird zum Öffnen der Datei als PChar übergeben.

Holen der Informationen

Es gibt die Möglichkeit, einen gesamten Informationssatz abzuholen und in ein Memo zu schreiben. Hierin unterschieden sich die DLLs:

    MediaInfoA_Option (0, 'Complete', '');          // '' = true, '1' = false
  
  { true  - ausführliche Information. Die Daten in werden teilweise in
            mehreren Formatierungen ausgegeben.                           }

  { false - kurze Information, Daten werden nur in einer Formatierung
            ausgegeben                                                    }
 
    Memo1.Text := MediaInfoA_Inform(Handle);

Das folgende ist bei beiden DLL identisch. Um einzelne Informationen erhalten, wird die MediaInfo wie folgt aufgerufen:

   Edit1.Text := MediaInfoA_Get(Handle,
                                StreamKind,
                                StreamNumber,
                                Parameter,
                                KindOfInfo,
                                KindOfSearch);

Das bedeuten die einzelne Variablen:

  Handle       - Ergibt sich beim Öffnen der Datei
 
  StreamKind   - 0 = Stream_General
                 1 = Stream_Video
                 2 = Stream_Audio
                 3 = Stream_Text
                 4 = Stream_Chapters
                 5 = Stream_Image
                 6 = Stream_Max
 
  StreamNumber - 0 = Erster Stream
                 1 = Zweiter Stream
                 ...
 
  Parameter    - Eine Liste erhält man durch Aufruf der HowToUse_Dll.exe.
                 Am besten per BATCH aufrufen und die Ausgabe in eine
                 Textdatei umleiten. Ist die gewünschte Information nicht
                 verfügbar, wird ein leerer String zurückgeliefert.
 
                 Hier ein paar Beispiele (Case sensitiv!):
 
                 Stream_General
                 VideoCount           : Anzahl der Videostreams
                 AudioCount           : Anzahl der Audiostreams
                 CompleteName         : Kompletter Name der analysierten
                                        Datei (LW + Ordner + Name + Ext)
                 FileSize             : Dateigröße in Byte
                 FileSize_String4     : Dateigröße mit vier Digits (heißt,
                                        es werden die ersten vier Stellen
                                        und die Einheit angegeben.
                                        Bsp:  2.345 MB, 797.2 MB
                 Format               : Format Kurzname
                                        Bsp: MPEG-1, MPEG-2
                 PlayTime_String1     : Spieldauer mit Einheiten im Format
                                        HHh MMmn SSs MMMms
 
                 Stream_Video
                 Codec                : Benutzter Codec
                 BitRate              : Bitrate in bps
                                        Anmerkung: Wenn kein Wert zurück-
                                        gegeben wird, BitRate_String ver-
                                        wenden.
                 BitRate_Mode         : Mode (VBR, CBR)
                                        Anmerkung: Funktioniert nicht immer,
                                        im Set steht dann 'Bit rate'
                 Width                : Bildbreite
                 Height               : Bildhöhe
                 AspectRatio          : Seitenverhältnis
                 FrameRate            : Bildwiederholrate
 
                 Stream_Audio
                 Codec                : Benutzter Codec
                 BitRate              : Bitrate in bps (zB MP3)
                 Bitrate              : Bitrate in bps (zB MP2)
                 BitRate_String       : eigentlich Bitrate mit Einheit,
                                        bei MP3 nur Einheit
                 Channels             : Anzahl der Kanäle
                 ChannelMode          : Modus, zB Stereo
                 SamplingRate         : Abtastfrequenz
                 SamplingRate_String  : Abtastfrequenz mit Einheit KHz
 
  KindOfInfo   - 0 = Info_Name        : Name des Parameter
                 1 = Info_Text        : Wert des Parameter (als Text)
                 2 = Info_Measure     : Name der Einheit des Parameters
                 3 = Info_Options     : InfoOption_ShowInInform     = 0
                                        InfoOption_Support          = 1
                                        -> Möglich
                                           N (Nein),
                                           R (Nur Lesen),
                                           W (Lesen/Schreiben),
                                           space (Nicht zutrefend).
                                        InfoOption_ShowInSupported  = 2,
                                        -> Nur intern genutzt
                                           (Info : In Info_Capacities()
                                           angezeigt)
                                        InfoOption_Max              = 3
                 4 = Info_Name_Text   : Übersetzter Name des Parameter
                 5 = Info_Measure_Text: Übersetzter Name der Maszeinheit
                 6 = Info_Info        : Mehr Info über den Parameter
                 7 = Info_HowTo       : Information : Wie wurden die
                                        Daten gefunden
                 8 = Info_Max
 
  KindOfSearch - Wo den Parameter suchen                                 }

Nun ein paar praktische Beispiele:

  { Generalinformationen: }

  { Spieldauer            StreamKind   - 0 = Stream_General
                          StreamNumber - 0 = Erster Stream
                          Parameter    - PlayTime_String1
                          KindOfInfo   - 1 = Info_Text
                          KindOfSearch - 0                           }
 
    Edit1.Text := MediaInfoA_Get(Handle, 0, 0, 'PlayTime_String1', 1, 0);
 

  { Anzahl der Tonspuren  Parameter    - Stream_General
                                         AudioCount                  }
    Edit2.Text := MediaInfoA_Get(Handle, 0, 0, 'AudioCount', 1, 0);
 

  { Videoinformationen: }

  { Videocodec            StreamKind   - 1 = Stream_Video
                          StreamNumber - 0 = Erster Stream
                          Parameter    - Codec_String
                          KindOfInfo   - 1 = Info_Text
                          KindOfSearch - 0                           }
 
    Edit3.Text := MediaInfoA_Get(Handle, 1, 0, 'Codec_String', 1, 0);
 

  { Framerate             Parameter    - FrameRate                   }
 
    Edit4.Text := MediaInfoA_Get(Handle, 1, 0, 'FrameRate', 1, 0);
 

  { Audioinformationen: }

  { Audiocodec Stream 1:  StreamKind   - 2 = Stream_Audio
                          StreamNumber - 0 = Erster Stream
                          Parameter    - Codec
                          KindOfInfo   - 1 = Info_Text
                          KindOfSearch - 0                           }
 
    Edit5.Text := MediaInfoA_Get(Handle, 2, 0, 'Codec_String', 1, 0);
 

  { Abtastfreq. Stream 2: StreamNumber - 1 = Zweiter Stream
                          Parameter    - SamplingRate_String         }
 
    Edit6.Text := MediaInfoA_Get(Handle, 2, 0, 'SamplingRate_String', 1, 0);

Diese Beispiele sollten genügen.

Schließen der Mediadatei

    MediaInfoA_Close(Handle);
 
  end;                               // Nur bei der Verwendung
                                     // der MediaInfoDLLmod.pas
end;