![]() |
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. |
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:
|
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. |
AW: WMV-Dauer ermitteln
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:11 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