转载请说明出处,谢谢~~

昨天封装好了基于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

将VLC库封装为duilib的万能视频播放控件的更多相关文章

  1. 基于wke封装的duilib的webkit浏览器控件,可以c++与js互交,源码及demo下载地址

    转载请说明原出处,谢谢~~ 前些日子用wke内核封装了duilib的webkit浏览器控件,好多群里朋友私聊我希望可以我公布源码,今天把这个控件的源码和使用demo公布.其实这个控件封装起来没什么难度 ...

  2. 使用 WebView2 封装一个生成 PDF 的 WPF 控件

    使用 WebView2 封装一个生成 PDF 的 WPF 控件 最近在迁移项目到 .net6,发现项目中用的 PDF 库不支持 .net6,于是想着换一个库.结果找了一大圈,发现不是版本不支持,就是收 ...

  3. duilib进阶教程 -- Container控件的bug (14)

    在<duilib进阶教程 -- TreeView控件的bug (9)>里,Alberl发现了两个bug,并解决了其中一个,现在教程已经接近尾声啦,所以Alberl就解决了另外一个bug. ...

  4. 示例:WPF中Slider控件封装的缓冲播放进度条控件

    原文:示例:WPF中Slider控件封装的缓冲播放进度条控件 一.目的:模仿播放器播放进度条,支持缓冲任务功能 二.进度: 实现类似播放器中带缓存的播放样式(播放区域.缓冲区域.全部区域等样式) 实现 ...

  5. duilib+cef自定义浏览器控件编译错误

    新版博客已经搭建好了,有问题请访问 htt://www.crazydebug.com 公司二期好主播项目,决定用duilib开发界面,且从ie内核换成谷歌内核 再用duilib自定义一个Browser ...

  6. duilib 的IE浏览器控件去边框和去滚动条的代码

    近些天在duilib群里经常有朋友问起,怎么让duilib的IE控件可以去边框,去滚动条的问题,或者是如何去控件IE控件的行为.为了避免重复的回答,我就写一篇博文,把处理方法说明一下. duilib中 ...

  7. duilib relativepos属性导致控件错误的bug修复

    转载请说明出处,谢谢~~ 我在仿酷狗音乐播放器的开发日志系列里,曾经提到了这个bug,文章地址为:http://blog.csdn.net/zhuhongshu/article/details/381 ...

  8. duilib 的IE浏览器控件去边框和去滚动栏的代码

    转载请说明原出处,谢谢~~ 近些天在duilib群里常常有朋友问起,怎么让duilib的IE控件能够去边框.去滚动栏的问题,或者是怎样去控件IE控件的行为.为了避免反复的回答,我就写一篇博文,把处理方 ...

  9. duilib进阶教程 -- 各种控件的响应 (10)

    到上一个教程为止,界面显示的代码就都介绍完啦,现在开始介绍控件的响应,其实在<2013 duilib入门简明教程 -- 事件处理和消息响应 (17)>里已经列出了duilib自己定义的所有 ...

随机推荐

  1. 【mongoDB中级篇②】索引与expain

    索引的操作 数据库百分之八十的工作基本上都是查询,而索引能帮我们更快的查询到想要的数据.但是其降低了数据的写入速度,所以要权衡常用的查询字段,不必在太多字段上建立索引. 在mongoDB中默认是用bt ...

  2. java:线程的简单控制方法

    中断线程方法 休眠:sleep(); 主动让出cpu:yield(); 设置线程优先级: 取值:getPriority(); 设置:setPriority(..); MAX_PRIORITY最大优先级 ...

  3. JavaScript DOM编程基础精华02(window对象的属性,事件中的this,动态创建DOM,innerText和innerHTML)

    window对象的属性1 window.location对象: window.location.href=‘’;//重新导航到新页面,可以取值,也可以赋值. window.location.reloa ...

  4. JavaScript基础精华03(String对象,Array对象,循环遍历数组,JS中的Dictionary,Array的简化声明)

    String对象(*) length属性:获取字符串的字符个数.(无论中文字符还是英文字符都算1个字符.) charAt(index)方法:获取指定索引位置的字符.(索引从0开始) indexOf(‘ ...

  5. C++:this指针

    this指针 this关键字:表示本类中的对象成员,可以通过this指针访问当前类的成员//举例 //例 3.18 隐藏this指针的引例 #include<iostream> using ...

  6. 【Effective c++】条款6:若不想使用编译器自动生成的函数就应该明确拒绝

    地产中介卖的是房子,其使用的中介软件系统应该有个类用来描述卖掉的房子 class HomeFoeSale { ......} 但是任何房子都是独一无二的,不应该存在两个房子拥有同样的属性,因此以下操作 ...

  7. checkbox 全选、全不选、反选 插件

    jquery.checkbox.js: ;(function($,window,document,undefined){ $.fn.check=function(mode){ mode= mode | ...

  8. nyoj-257 郁闷的C小加(一) 前缀表达式变后缀

    郁闷的C小加(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 我们熟悉的表达式如a+b.a+b*(c+d)等都属于中缀表达式.中缀表达式就是(对于双目运算符来说 ...

  9. VCC_VID_VTT等的含义

    VCC--为直流电压.在主板上为主供电电压或一般供电电压.例如 一般电路VCC3--+3V供电.主板上VCC3: 3.3V VCC25: 2.5V VCC333: 3.3V VCC5: 5V VCC1 ...

  10. Android studio在真机上进行调试

    1.在Android Studio中,把app的默认启动目标改为USB device,点击[app]→[app configuration],在[Target Device]选择[USB device ...