我在 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 上看到了这些问题。