Winforms アプリで Windows メディア コントロール (AxWMPLib.AxWindowsMediaPlayer) を使用して mp4 ビデオを再生しています。特定の位置でビデオを開始し、特定の秒数後に再生を停止できるようにしたいと考えています。
私の問題は、現在の位置を設定しようとすると、現在の位置がゼロ (再生開始前または一時停止時) に設定されるか、6 などの小さな数値 (既に再生されている場合) に設定されることです。
これは私が現在の位置を変更しようとしている方法です:
m_windowsMediaPlayer.Ctlcontrols.currentPosition = value;
この質問Embedded Windows Media Player Set Position is slowは、キー フレームの数が少ないために問題が発生する可能性があることを示唆していますが、30 秒または 1200 秒に設定しようとしても問題ありません。それはまだ6秒で再び再生を開始します。
この質問Windows Media Player コントロール - ビデオの位置を取得/設定しますか? currentPosition の設定が一部の人に有効であることを示しています。
関連するコードは次のとおりです。
m_windowsMediaPlayer.URL = GetVideoFileFullPath();
RestartVideo();
private void RestartVideo()
{
m_windowsMediaPlayer.Ctlcontrols.currentPosition = StartTime;
StopTimer();
StartTimer();
m_windowsMediaPlayer.Ctlcontrols.play();
}
すべてが遅れているのではないかと考えたので、OpenStateChanged イベントを追加してみました。そのため、ファイルが実際に開かれた後にのみ設定する必要があります。しかし、それも役に立ちませんでした。
private void m_windowsMediaPlayer_OpenStateChange(object sender, AxWMPLib._WMPOCXEvents_OpenStateChangeEvent e)
{
if (m_windowsMediaPlayer.playState == WMPLib.WMPPlayState.wmppsPlaying)
{
if (m_start)
{
m_windowsMediaPlayer.Ctlcontrols.pause();
m_start=false;
RestartVideo();
}
}
}
表示している mp4 ファイルは、別のアプリによってまだ追加されています。しかし、問題は静的 mp4 ファイルにも存在します。別のビデオ形式がうまく機能する場合は、そのビデオ形式を使用するように他のアプリを変更できるはずです。vlcDotNetForms を使用して検討しましたが、できるだけ外部依存関係を少なくしてこのアプリを配布できるようにしたいので、Windows に同梱されているものを使用してこれを解決したいと考えています。
もう 1 点: Windows Vista マシンをサポートする必要がありますが、それらのマシンが .NET 3.5 以降を搭載しているとは期待できません。現在、私は .NET 2 をターゲットにしていますが、必要に応じて .NET 3 をターゲットにすることもできます。Windows 8.1 でこれらの問題が発生しています。