2010-02-05 62 views

回答

2

是的,你可以用DirectShow做到这一点。有很多种方法可以做到这一点。一种方法是查询图形对象上的IMediaSeeking接口,然后在该接口上调用GetDuration方法。

GetDuration将返回一个64位整数值,以表示播放文件需要多长时间。

您需要调用GetTimeFormat方法来找出持续时间所处的单位。最可能的默认值是TIME_FORMAT_MEDIA_TIME,它是微秒的十分之一秒。

在这种情况下,您会将持续时间除以10 * 1000 * 1000以获得秒数。

如果您要强制设备,您也可以在致电GetDuration之前致电SetTimeFormat

+0

我会试试看。谢谢。 – 2010-02-05 14:08:49

+0

我试过了,起初它不起作用。如果我先调用graph.RenderFile,然后调用GetDuraction,它就起作用了。谢谢您的帮助! – 2010-02-07 22:17:10

+0

@Judah:是的,图表必须知道哪个文件可以告诉你多久。 – 2010-02-07 22:23:33

1

您也可以使用IMediaPosition接口中的get_Duration()。

这会以秒为单位返回一个double值和视频持续时间。

Double Lenght; 

    m_FilterGraph = new FilterGraph() 

//Configure the FilterGraph() 

    m_mediaPosition = m_FilterGraph as IMediaPosition; 
    m_mediaPosition.get_Duration(out Length);