Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   WMV-Dauer ermitteln (https://www.delphipraxis.net/157931-wmv-dauer-ermitteln.html)

stahli 2. Feb 2011 17:32

AW: WMV-Dauer ermitteln
 
Ich habe gerade festgestellt, dass es unter Delphi (Debugmodus) sehr langsam läuft (die Debuginfos zeigen mehrfach Thread- und Modusl-Infos an).
Läuft das Programm selbnständig geht es schon schneller.
Ich werde es so belassen, da es als einfachster Weg erscheint.

Die DirectX-Variante funktioniert scheinbar gleichermaßen.

Danke Euch nochmal.

lbccaleb 2. Feb 2011 17:55

AW: WMV-Dauer ermitteln
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab die DirectX Version noch einwenig überarbeitet, wenn dir das jetze nicht gefällt, dann weiß ich auch net :lol:

stahli 2. Feb 2011 19:44

AW: WMV-Dauer ermitteln
 
Gefällt jetze :-D

Ich habe es noch etwas umgestellt.
Unter Win7 ging alles perfekt. In meiner VM unter nacktem XP war jedoch keine Dauer ermittelbar. Vermutlich, weil kein passendes DirectX installiert ist!?

Ich habe jetzt einfach eine alternative Ermittlung über einen MediaPlayer eingebunden.
Ich denke, so passt das für alle Fälle...
Danke nochmal :thumb:

Delphi-Quellcode:
unit VideoDuration;

interface

function GetVideoDuration(FileName: String): TDateTime;

implementation

uses
  DirectShow9, ActiveX, Dialogs, SysUtils, MPlayer, Forms;

var
  hr: HRESULT;
  MediaDet: IMediaDet;

procedure ClearDirectShow;
begin
  MediaDet := nil;
end;

function DurationFromMediaPlayer(FileName: String): TDateTime;
var
  MediaPlayer: TMediaPlayer;
begin
  MediaPlayer := TMediaPlayer.Create(nil);
  MediaPlayer.Visible := False;
  MediaPlayer.Parent := Application.MainForm;
  MediaPlayer.FileName := FileName;
  MediaPlayer.TimeFormat := tfMilliseconds;
  MediaPlayer.Open;
  Result := MediaPlayer.Length / 1000 / (24 * 60 * 60);
  MediaPlayer.Close;
  FreeAndNil(MediaPlayer);
end;

function GetVideoDuration(FileName: String): TDateTime;
var
  Duration: Double;
  wFileName: PWideChar;
begin;
  ClearDirectShow;
  Result := 0;

  wFileName := StringToOleStr(FileName);
  try
    hr := CoCreateInstance(CLSID_MediaDet, nil, CLSCTX_INPROC, IMediaDet, MediaDet);
    if hr = S_OK then
      hr := MediaDet.put_Filename(wFileName);
    if hr = S_OK then
      hr := MediaDet.get_StreamLength(Duration);
    if hr = S_OK then
      Result := Duration / (24 * 60 * 60)
    else
      Result := DurationFromMediaPlayer(FileName);
  finally
    SysFreeString(wFileName);
  end;
  ClearDirectShow;
end;

initialization

CoInitialize(nil);

finalization

CoUnInitialize;

end.

lbccaleb 2. Feb 2011 19:47

AW: WMV-Dauer ermitteln
 
Zitat:

Zitat von stahli (Beitrag 1079178)
Gefällt jetze :-D

Ich habe es noch etwas umgestellt.
Unter Win7 ging alles perfekt. In meiner VM unter nacktem XP war jedoch keine Dauer ermittelbar. Vermutlich, weil kein passendes DirectX installiert ist!?

Ich denke eher das liegt daran das kein Codec auf dem System der VM installiert ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:11 Uhr.
Seite 2 von 2     12   

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