转载请说明出处,谢谢~~
昨天封装好了基于webkit的浏览器控件,修复了duilib的浏览器功能的不足,而我的仿酷狗播放器项目中不光需要浏览器,同时也需要视频播放功能,也就是完成MV的功能。所以我打算封装个视频播放控件。
既然要封装视频播放控件,那就应该封装一个功能强大,不只是用在这个项目,也为将来可能出现的项目做准备。以前不怎么接触视频播放这块,所以查了很多资料。目前市场上90%的视频播放器都是基于这三个构架: MPC/HC架构 、mplayer架构 、VLC架构 。关于这三个构架的介绍,国内著名的开源视频播放器射手影音的作者已经在其网站中做了介绍, http://blog.splayer.org/index.php/2010/03/%E5%AA%92%E4%BD%93%E6%92%AD%E6%94%BE%E4%B8%89%E5%A4%A7%E5%BA%95%E5%B1%82%E6%9E%B6%E6%9E%84%E7%AE%80%E6%9E%90/ 。
射手影音功能强大,软件体积小巧,是国内的开源视频播放器,我很佩服作者的开源精神,尤其是在国内的现状下,我开始打算下载射手影音的源码然后封装他的视频库,可是下载源码后发现工程量太大,需要了解很多视频编码知识,不是一时半会可以做好的,所以放弃了他。
接着找了一些视频播放源码,但是一般都是只针对某一个或者几个格式,感觉不通用,有的还不稳定,所以没有封装。
据统计现在的视频格式多大580种,现在正在用的在200种左右,所以想封装个全能的视频库不太容易。
再查找了一些资料后了解到VLC视频库,同时也找到Alberl的duilib仿迅雷播放器项目,他的项目中正是使用了VLC构架封装了视频控件。VLC构架使用相当简单,封装性做得非常好,另外还有Alberl写好的例子,我也就打算使用VLC构架封装为duilib的视频控件。
封装过程并不难,比封装webkit要简单,不过毕竟是全能的视频库,他的功能还是比较多的,封装起来费时。几个小时候终于封装测试完成,整个过程比较顺利,控件可以正常使用,一个万能的视频播放控件就做好了。
封装的视频控件继承自CControlUI控件,控件在DoInit的函数处做初始化,在内部会建立一个子窗体,这点和上一篇的封装webkit内核是相似的。然后控件内部维护这个子窗体句柄,这个控件的简单之处是不需要我另外封装个窗体类,所用功能都在同一个类里面实现了。只要有了子窗体句柄,就可以让VLC库附着到窗体上了,剩下的就是处理各种信息和函数,此处略过~~
最后说一下VLC的缺点,我发现的唯一缺点就是:太大。整个库加起来60M还多一点,不过他的优点也很明显解码高效,使用简单的。
2014.7.26 14:37 Redrain