0

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

4

0 回答 0