要做一个视频无缝切换的程序,所谓无缝就是在一个视频结束时立即开始另一个视频,中间不要有切换的黑屏
实现思路是放两个wmp播放控件,其中每个时刻只有一个在播放,另外一个处于暂停状态,并隐藏
当一个视频播放完后,切换显示另一个视频,同时这个视频隐藏起来并加载下一段视频,视频加载完成后(wmp会有事件通知)暂停
这样就去除了加载时的短暂空挡
有时可能会有键盘鼠标事件影响wmp的状态,所以使用定时器虽然监测wmp的播放状态
<span>private</span>
<span>void</span> Form1_Load(<span>object</span><span> sender, EventArgs e)
{
timer1.Enabled </span>= <span>true</span><span>;
wmp1.URL </span>= ConfigurationManager.AppSettings[<span>"</span><span>File1Path</span><span>"</span><span>];
wmp2.URL </span>= ConfigurationManager.AppSettings[<span>"</span><span>File1Path</span><span>"</span><span>];
playnow </span>= <span>1</span><span>;
wmpnow </span>= <span>1</span><span>;
wmp1.Visible </span>= <span>true</span><span>;
wmp2.Visible </span>= <span>false</span><span>;
wmp1pause </span>= <span>0</span><span>;
wmp2pause </span>= <span>0</span><span>;
}</span>
<span>private</span>
<span>bool</span> isFullScreen = <span>false</span><span>;
</span><span>private</span><span>int</span> playnow = <span>1</span><span>;
</span><span>private</span><span>int</span> wmp1pause = <span>0</span><span>;
</span><span>private</span><span>int</span> wmp2pause = <span>0</span><span>;
</span><span>private</span><span>int</span> wmpnow = <span>1</span><span>;
</span><span>private</span><span>void</span> timer1_Tick(<span>object</span><span> sender, EventArgs e)
{
</span><span>if</span> (wmp1.Ctlcontrols.currentPosition == <span>0</span><span>)
wmp1.Ctlcontrols.play();
</span><span>else</span><span>
{
</span><span>if</span> (wmp1.Ctlcontrols.currentPosition > <span>0</span> && wmp1pause==<span>0</span> && wmpnow==<span>2</span><span>)
{
</span><span>if</span> (playnow == <span>2</span><span>)
{
wmp1.Visible </span>= <span>true</span><span>;
wmp1.settings.volume </span>=<span> wmp2.settings.volume;
wmpnow </span>= <span>1</span><span>;
playnow </span>= <span>1</span><span>;
wmp2.Visible </span>= <span>false</span><span>;
wmp2.Ctlcontrols.stop();
wmp2pause </span>= <span>0</span><span>;
}
</span><span>else</span><span>
wmp1.Ctlcontrols.pause();
wmp1pause </span>= <span>1</span><span>;
}
</span><span>if</span> (wmp1.currentMedia.duration - wmp1.Ctlcontrols.currentPosition < <span>0.05</span><span>)
{
wmpnow </span>= <span>2</span><span>;
wmp2.Visible </span>= <span>true</span><span>;
wmp2.settings.volume </span>=<span> wmp1.settings.volume;
wmp2.Ctlcontrols.play();
wmp1.Visible </span>= <span>false</span><span>;
wmp1.Ctlcontrols.stop();
wmp1.URL </span>= ConfigurationManager.AppSettings[<span>"</span><span>File1Path</span><span>"</span><span>];
wmp1pause </span>= <span>0</span><span>;
}
}
</span><span>if</span> (wmp2.Ctlcontrols.currentPosition == <span>0</span><span>)
wmp2.Ctlcontrols.play();
</span><span>else</span><span>
{
</span><span>if</span> (wmp2.Ctlcontrols.currentPosition > <span>0</span> && wmp2pause == <span>0</span> && wmpnow==<span>1</span><span>)
{
</span><span>if</span> (playnow == <span>2</span><span>)
{
wmp2.Visible </span>= <span>true</span><span>;
wmp2.settings.volume </span>=<span> wmp1.settings.volume;
wmpnow </span>= <span>2</span><span>;
playnow </span>= <span>1</span><span>;
wmp1.Visible </span>= <span>false</span><span>;
wmp1.Ctlcontrols.stop();
wmp1pause </span>= <span>0</span><span>;
}
</span><span>else</span><span>
wmp2.Ctlcontrols.pause();
wmp2pause </span>= <span>1</span><span>;
}
</span><span>if</span> (wmp2.currentMedia.duration - wmp2.Ctlcontrols.currentPosition < <span>0.05</span><span>)
{
wmpnow </span>= <span>1</span><span>;
wmp1.Visible </span>= <span>true</span><span>;
wmp1.settings.volume </span>=<span> wmp2.settings.volume;
wmp1.Ctlcontrols.play();
wmp2.Visible </span>= <span>false</span><span>;
wmp2.Ctlcontrols.stop();
wmp2.URL </span>= ConfigurationManager.AppSettings[<span>"</span><span>File1Path</span><span>"</span><span>];
wmp2pause </span>= <span>0</span><span>;
}
}
}</span>
原文:http://www.cnblogs.com/erictanghu/p/3760956.html
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!