1.download DirectShowLib,I use the version DirectShowLibV2-1
its website: http://directshownet.sourceforge.net/
and download page:http://sourceforge.net/projects/directshownet/files/ 2.using the lib in c#
3.code using MediaDet class
reference:
using System.Runtime.InteropServices;
using DirectShowLib;
using DirectShowLib.DES;
code:
public static string GetDuration(string fileName)
{
var mediaDet = (IMediaDet)new MediaDet();
DsError.ThrowExceptionForHR(mediaDet.put_Filename(fileName));
// find the video stream in the file
int index;
var type = Guid.Empty;
for (index = 0; index < 1000 && type != MediaType.Video; index++)
{
mediaDet.put_CurrentStream(index);
mediaDet.get_StreamType(out type);
}
// retrieve some measurements from the video
double frameRate;
mediaDet.get_FrameRate(out frameRate);
var mediaType = new AMMediaType();
mediaDet.get_StreamMediaType(mediaType);
var videoInfo = (VideoInfoHeader)Marshal.PtrToStructure(mediaType.formatPtr, typeof(VideoInfoHeader));
DsUtils.FreeAMMediaType(mediaType);
var width = videoInfo.BmiHeader.Width;
var height = videoInfo.BmiHeader.Height;
double mediaLength;
mediaDet.get_StreamLength(out mediaLength);
//var frameCount = (int)(frameRate * mediaLength);
//var duration = frameCount / frameRate;
return mediaLength.ToString();
}