C# で WMPLib を使用していますが、ビデオ時間をミリ秒単位で取得したいと考えています。これらのミリ秒値を使用して別のプログラムを構成します。VMP データをミリ秒単位で取得する方法はありますか? また、私は試しました:
double temp = axWindowsMediaPlayer1.Ctlcontrols.currentPosition;
C# で WMPLib を使用していますが、ビデオ時間をミリ秒単位で取得したいと考えています。これらのミリ秒値を使用して別のプログラムを構成します。VMP データをミリ秒単位で取得する方法はありますか? また、私は試しました:
double temp = axWindowsMediaPlayer1.Ctlcontrols.currentPosition;
申し訳ありませんが、それは非常に明白であるため、質問の仕方が間違っているか、いくつかの大きなことを見逃しているという印象を持たずにはいられません。
みたいな、基本的な数学。
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;
あなたが得ることができる最も近いものはcurrentPositionTimecode
プロパティであると思います。これは、現在の位置とともにフレーム番号を提供します。フレーム レートがわかれば、位置をミリ秒単位で概算できます。
var frameRateMs = frameRate/1000;
var positionMs = currentFrameNumber/frameRateMs