昨天在APlayer官方群讨论如何让视频拉伸铺满窗口,因为觉得这个会引起视频严重变形,体验并不好,所以之前一直也没有做。
AP的SDK没有直接提供单一的接口来设置,但利用设置视频比例API把视频设置为播放窗口的比例就可以达到效果。
旧方案
一般情况下这些问题我都是在成功打开视频后进行配置,但当时做的时候使用 AP控件的 OnOpenSucceeded 事件并不能成功设置视频比例,然而在打开视频后通过点击设置按钮可以正确进行配置,因此发现在 OnOpenSucceeded 后还需要进行一点延迟才能配置视频比例。
1、定义一个定时器
Timer timer3; timer3 = new System.Windows.Forms.Timer();//延时设置画面比例 timer3.Tick += new EventHandler(time3_Tick);//注册绑定事件 timer3.Interval = 400; //每隔 400ms 执行一次 time3_Tick(); private void time3_Tick(object sender, EventArgs e)//定时器执行函数 { if (time3_1 >= 1) { Set_AxplayerBL(); //设置视频比例处理函数 timer3.Enabled = false; timer3.Dispose(); time3_1 = 0; } time3_1++; }
2、APlayer控件的OnOpenSucceeded事件处理
private void axPlayer1_OnOpenSucceeded(object sender, EventArgs e) { timer3.Enabled = true;//视频比例延迟设置-开启定时器 }
3、如果是要拉伸铺满窗口还需要解决的是在视频播放窗口大小改变的情况下也同步的改变播放视频的比例,因此我用了AP控件的 SizeChanged 事件(即控件大小发生改变时触发)来处理。
private void axPlayer1_SizeChanged(object sender, EventArgs e) { if (铺满窗口toolStripMenuItem.Checked)//如果右键菜单铺满窗口被选中 { //改变播放视频比例使其跟播放窗口比例一致 铺满窗口toolStripMenuItem_Click(null, null); } }
效率很低,但是总算是解决了问题。
解决方法
经群主指点使用AP控件 OnVideoSizeChanged 事件处理,效果完美。
- 减少了系统资源的消耗;
- 事件驱动,提高视频比例配置的响应速度;
private void axPlayer1_OnVideoSizeChanged(object sender, EventArgs e) { //视频比例设置处理 string strF = String.Format("{0};{1}",axPlayer1.Width.ToString(),axPlayer1.Height.ToString()); this.axPlayer1.SetConfig(204, strF); //视频拉伸铺满窗口 }
翻看官方论坛帖子早在2017年10月份左右就提供了解决方案。此问题也是困扰许久,现在得以解决略微感慨,记录之。
博主,播放期间会黑屏,求修复啊