2014-08-27 256 views
0

我在C#中使用WMPLib,我想以毫秒为单位获取视频时间。我将使用这些毫秒值配置另一个程序。是否有任何方法可以以毫秒为单位获取VMP数据? 另外我想:我怎样才能获得视频时间为毫秒

double temp = axWindowsMediaPlayer1.Ctlcontrols.currentPosition; 

回答

0

我认为最接近你可以得到的是currentPositionTimecode属性,它在时间的当前位置沿给你一个帧数。了解帧速率可以让你接近毫秒的位置:

var frameRateMs = frameRate/1000; 

var positionMs = currentFrameNumber/frameRateMs 
+0

我试图写axWindowsMediaPlayer1.Controls.CurrentPositionTimeCode但编译器不喜欢这个。你有什么想法吗? – dodotu 2014-08-27 13:18:01

+0

@dodotu“时间码”和“当前”中的小写字母“c”。编译器应该已经向您显示了一条明确的错误消息,而不是“我不喜欢这条消息”。 – BartoszKP 2014-08-27 13:19:13

+0

我知道,但当按Ctrl +空格后控件,currentPositionTimecode不显示。其实我的问题是这样的。 – dodotu 2014-08-27 13:23:31

0

你知道,很抱歉,但是这太明显了,我不能有一个印象,无论你在一个错误的方式指出你的问题帮助,或你错过了一些巨大的东西。

像基本的数学。

currentPosition提供,这是一个double所以它具有馏分。以毫秒为单位,只需乘以1000即可。

// get your player from UI 
AxWindowsMediaPlayer player1 = .....; 

// not even a cast is needed 
double millis = player1.Ctlcontrols.currentPosition * 1000; 

因此,要以毫秒为单位的位置,你不需要任何东西,除了基本的AxWMP接口。

如果你真的想把它作为文本或时间码,他们也可以被获取,但是需要强制转换才能在正确的界面上工作(因为AxWindowsMediaPlayer默认使用IWMPControls,并且需要IWMPControls2/3):

string text = ((IWMPControls2)player1.Ctlcontrols).currentPositionString; 
string text2 = ((IWMPControls2)player1.Ctlcontrols).currentPositionTimecode;