AxWindowsMediaPlayer:在最后一帧暂停

时间:2013-02-03 01:03:04

标签: c# winforms axwindowsmediaplayer

我在Winforms C#应用程序中使用AxWindowsMediaPlayer控件,我想将播放器设置为在视频播放结束时在最后一帧暂停。我已经处理了这样一个事实:视频已完成显示另一个控件,其中包含不同内容的播放器,但我想避免显示在其间的空白帧。

是否可以将播放器配置为在最后一帧暂停?或者是否有一个事件我可以设置视频在最后一帧或最后几毫秒暂停?

PS。只有当用户或代码设置位置时才会引发PositionChange事件,因此我无法使用它。 MarkerHit事件似乎很有希望,但我找不到任何方法在视频中设置标记,这样也无法正常工作。

2 个答案:

答案 0 :(得分:1)

这并不像Nadhmi(@ user5330265)所描述的那么简单。视频可能会完成播放,并在计时器滴答之间重置为空白帧,在这种情况下,永远不会执行暂停。

我找到了以下作品,但是却错过了视频的最后iInterval毫秒。 tmrVideo计时器间隔设置为1毫秒。在我的系统上,它似乎每15毫秒运行一次,但是诊断会降低速度。它似乎并没有增加总体CPU负载。我为iInterval使用250的值-currentPosition似乎从未达到持续时间。较小的值表示丢失的视频较少,但是出现空白帧的机会更大。

在视频加载期间currentPosition为零,这就是为什么需要对该条件进行测试的原因。

在每一个axWindowsMediaPlayer1.Ctlcontrols.play()命令之后都需要启用tmrVideo。

private void tmrVideo_Tick(object sender, EventArgs e)
    {
        if ((axWindowsMediaPlayer1.currentMedia.duration - axWindowsMediaPlayer1.Ctlcontrols.currentPosition)*1000 < 
            iInterval) && 
            axWindowsMediaPlayer1.Ctlcontrols.currentPosition!= 0)
        {
            axWindowsMediaPlayer1.Ctlcontrols.pause();
            tmrVideo.Enabled = false;
        }                           
    }

答案 1 :(得分:0)

您好

就像这一样简单。

首先,您需要添加计时器。现在处理Timer1_Tick事件:

if (AxWindowsMediaPlayer1.Ctlcontrols.currentPosition == AxWindowsMediaPlayer1.currentMedia.duration) {
    AxWindowsMediaPlayer1.Ctlcontrols.pause();
}

就是这样

PS:确保启动计时器。

Nadhmi。