我在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 control - get/set video position?显示设置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附带的东西来解决这个问题。
另一点:我需要支持Windows Vista计算机,我不能指望他们使用.NET 3.5或更新版本。目前我的目标是.NET 2,但如果有必要,我可以针对.NET 3。我在Windows 8.1上看到了这些问题。