Hallo,
wenn Du DirectShow verwenden willst, kannst Du folgende Funktion verwenden (Ergebnis in Millisekunden):
Delphi-Quellcode:
uses
ActiveX, DirectShow9;
...
function GetDuration(
const FileName: WideString): Cardinal;
var
GB: IGraphBuilder;
MediaSeeking: IMediaSeeking;
RefTime: Int64;
begin
Result := 0;
if Succeeded(CoCreateInstance(CLSID_FilterGraph,
nil, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, GB))
and
Succeeded(GB.RenderFile(PWideChar(FileName),
nil))
and
Succeeded(GB.QueryInterface(IMediaSeeking, MediaSeeking))
then
begin
MediaSeeking.GetDuration(RefTime);
Result := Cardinal(RefTime
div 10000);
end;
end;
Gruß
xaromz