我在 C# 中使用 WMPLib,我想以毫秒为单位获取视频时间。我将使用这些毫秒值配置另一个程序。有没有办法以毫秒为单位获取 VMP 数据?我也试过:
double temp = axWindowsMediaPlayer1.Ctlcontrols.currentPosition;
我在 C# 中使用 WMPLib,我想以毫秒为单位获取视频时间。我将使用这些毫秒值配置另一个程序。有没有办法以毫秒为单位获取 VMP 数据?我也试过:
double temp = axWindowsMediaPlayer1.Ctlcontrols.currentPosition;
我认为你能得到的最接近的是currentPositionTimecode
属性,它和当前的时间位置一起给你一个帧号。知道帧速率将使您以毫秒为单位估算位置:
var frameRateMs = frameRate/1000;
var positionMs = currentFrameNumber/frameRateMs
你知道,对不起,但这太明显了,我不禁有一种印象,要么你以错误的方式陈述你的问题,要么你错过了一些重要的事情。
比如,基础数学。
currentPosition
以秒为单位提供,它是 adouble
所以它有 fractions。要以毫秒为单位,只需将其乘以 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;