我在Winforms C#应用程序中使用AxWindowsMediaPlayer控件,我想将播放器设置为在视频播放结束时在最后一帧暂停。我已经处理了这样一个事实:视频已完成显示另一个控件,其中包含不同内容的播放器,但我想避免显示在其间的空白帧。
是否可以将播放器配置为在最后一帧暂停?或者是否有一个事件我可以设置视频在最后一帧或最后几毫秒暂停?
PS。只有当用户或代码设置位置时才会引发PositionChange事件,因此我无法使用它。 MarkerHit事件似乎很有希望,但我找不到任何方法在视频中设置标记,这样也无法正常工作。
答案 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。