将VLC库封装为duilib的万能视频播放控件
转载请说明出处,谢谢~~
昨天封装好了基于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还多一点,不过他的优点也很明显解码高效,使用简单的。
转载于:https://www.cnblogs.com/redrainblog/p/3888098.html
将VLC库封装为duilib的万能视频播放控件相关推荐
- qpython3可视图形界面_python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法...
QWidget基本介绍 基础窗口控件QWidget类是所有用户界面对象的基类,所有的窗口或者控件都直接或者间接的继承自QWidget类. 窗口坐标系统 PyQt使用统一的坐标系统来定位窗口控件的位置和 ...
- python menu实例_python GUI库图形界面开发之PyQt5菜单栏控件QMenuBar的详细使用方法与实例...
PyQt5菜单栏控件QMenuBar介绍 QMenuBar在QMainWindow对象的标题栏下方,水平的QMenuBar被保留显示QMenu对象 QMenuBar类提供了一个可以包含一个或多个QAc ...
- pythongui项目实例_python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例...
PyQt5状态栏控件QStatusBar简介 MainWindow对象在底部保留有一个水平条,作为状态栏(QstatusBar),用于显示永久或临时的状态信息 QStatusBar类中的常用方法 方法 ...
- Qt 封装一个简单的LED(指示灯)控件
Qt 封装一个简单的LED(指示灯)控件 1,效果~ 所以 这个简单的LED类可以自定义大小~ 可以点亮或熄灭,也可以闪烁
- C# 视频播放控件 wmp、vlc、aplayer
1.Windows Media Player C#学习之路WindowsMediaPlayer详解- 知其所以然- CSDN博客 2.vlc 自定义基于 VLC 的视频播放器 how to use v ...
- python表格控件_python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例...
PyQt5表格控件QTableView简介 在通常情况下,一个应用需要和一批数据进行交互,然后以表格的形式输出这些信息,这时就需要用到QTableView类了,在QTableView中可以使用自定义的 ...
- 使用amaze ui的分页样式封装一个通用的JS分页控件
作为一名码农,天天百度.偶尔谷歌,所有代码全靠copy,用第三方插件,偶尔也想着造造轮子,毕竟自己的骨肉总归比较亲. 今天有点空闲时间,想起我们公司之前套的页面的分页插件上还有bug,而写那个分页插件 ...
- react封装一个类似安卓的toast控件message
项目中经常会用到类似安卓的toast的控件.封装一个这样的组件是每个项目必须的事情. import React from 'react'; import ReactDOM from 'react-do ...
- duilib 自带树形控件的认识
CTreeViewUI 1.该控件继承自CListUI,所以是使用了对应的列表来模拟树形控件.该控件的容器填装的是CTreeNodeUI,而CTreeNodeUI也继承CListContainerEl ...
最新文章
- jsp 分页 tag
- Set Up a Mobile Worker
- 可穿插PC端浏览器任何位置的爱心分割
- Python-内建函数
- C语言:以scanf的使用为例,对缓冲区的理解
- 怎么写计算机教学论文,如何写好一篇关于信息技术教育的论文
- jenkins执行bat失败_关于批处理文件:即使在BAT脚本中成功执行了ROBOCOPY命令,JENKINS作业也会失败...
- c语言 nan 常量_NaN32常量(Julia)
- android下载模块封装,AndroidStudio 3.0 NDK开发2-AAR模块封装
- 从零实现深度学习框架——深入浅出交叉熵
- Python——Django-settings.py的内容
- Overleaf 指南:30 分钟 LaTeX 入门
- VMware中卸载Ubuntu
- 62、Window11+Clion+MinGW32+Rapidjson构造labelme的标注文件和解析标注文件
- Field of view xxxx underlying table doesn't have a default value 的一种解决方法
- 华北科技c语言综合实验报告,c语言实训报告心得(2)
- 用for循环打印输出数据三角形图形
- 制造工厂中的计件工资管理
- UGI九宫格sliced显示问题
- 云栖大会“云计算加速开源创新论坛” 揭晓 2022 年度开源人物