Einzelnen Beitrag anzeigen

Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: WMV-Dauer ermitteln

  Alt 2. Feb 2011, 20:44
Gefällt jetze

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

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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat