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));
int index;
var type = Guid.Empty;
for (index = 0; index < 1000 && type != MediaType.Video; index++)
{
mediaDet.put_CurrentStream(index);
mediaDet.get_StreamType(out type);
}
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);
return mediaLength.ToString();
}