一直想做一个能够方便跨平台开发的应用框 ,基础部分已经完成,于是将这个处于襁褓中的框架应用在win32基础之上,花了些功夫研究了ffmpeg的使用,做了一个demo,发布出来吸引批评与建议。
相对于整个框架,所展示的还很简单,但作为一个播放器,功能已基本具备,并且跟常见播放器不同的是,它可以方便的进行多路播放。曾经就单路全屏播放效率与其它播放器简单比较,还不错,也可以看出ffmpeg库的优秀,因为目前只使用GDI绘制,所以对效率还是挺满意。
框架基础部分用c语言开发,以dll方式封装了核心功能以及对ffmpeg的使用部分。出于简单考虑,外部采用MFC包装,这部分源码以及各dll(包括ffmpeg版本0.8的dll)一起打包在附件中,以便使用者能够根据需要定制。
框架设计的目标:
1.针对各类平台的图形化应用;
2.模块化方式灵活满足对多种2d/3d技术的支持;
3.轻量级实现,通过层次化的封装提供各层次所必需的功能,避免对应用不必要的资源消耗;
框架实现的dll:
1.UiCore -- 提供基础图形单元的定义,图形剪切算法的实现,通用控件逻辑的实现;
2.Win32.dll -- 提供win32平台的消息泵;
3.GDI.dll -- 提供win32平台GDI图形绘制功能;
4.Widget.dll -- 提供应用控件(包括最终用户所需要的窗口)的实现,由使用者(即应用的开发者)来完成,利用前面底层的支持,这一层显得相当简单,只需专注在应用逻辑的实现。对于底层尚未实现的一些特性,利用框架所设计的接口,也可以作充分定制;
5.FFmpeg.dll -- 提供对ffmpeg库的调用封装,这个dll不在框架范围之内,属于应用范畴,用户完全可以作自己的实现;
最后介绍下HomePlay.exe,它实现了一个目录树,以及对框架接口和FFmpeg模块的调用,控制用户输入,完成整个HomePlay的包装,操控方式为,
1.左键双击:开始播放(全屏)/恢复;
2.右键单击:暂停/恢复;
3.SPACE:全部恢复/暂停;
4.LEFT:回退(+CTRL可以增加距离);
5.RIGHT:快进(+CTRL可以增加距离);
6.UP:增加音量(+CTRL可以增加距离);
7.DOWN:减小音量(+CTRL可以增加距离);
8.CTRL+左键拖动:选择播放进度(以播放窗口宽度为总长,按比例计算);
9.非全屏状态,左键可拖动视频窗口;
10.非全屏状态,左键移至视频窗口右下角可resize(最小可至一个像素);
11.非全屏状态,CTRL+左键拖动视频窗口外空处,可以有无限制的滚动效果,靠最右垂直滚动条也可进行大范围垂直滚动;
12.视频窗口外的空白处都被设计为透明,双击透明部分即可直接将后面看到的其他应用带到前台(跟通常的窗口选中操作没有差别),修改MFC代码亦可方便去掉透明效果;
13.视频窗口打开时自动播放(若需要不自动播放,可修改MFCDlg.cpp文件“autoPlay = FALSE;”);
14.视频窗口打开时会自动排列(需要修改排列每行的个数,可修改MFCDlg.cpp文件“struct form fmt = {4, 200, 200, 10, 10, 10, 10};”中的数值,这个例子表示每行4个,长宽200/200,左上部10/10的空白,窗口间距10/10);
15.目前加入的可播放的文件类型可能没包括ffmpeg所支持的所有类型,可以根据需要修改MFCDlg.cpp文件中的".avi;.wmv;.mkv;.flv;.mpg;.rmvb;.mp3;.ape;.wav"字符串;
16.要修改打开时的默认路径,可修改MFCDlg.cpp文件“m_DirTreeCtrl.SetSelPath("f:\\Xunlei")”的路径;
17.默认界面的视频窗口背景是透明的,如果不需要透明,可修改MFCDlg.cpp文件“transparent = FALSE”;
感兴趣的朋友完全可以替换为自己喜好的代码和语言,做出更好用更美观的版本。概括的说,用户只要提供一个HWND句柄,就能够将(多路)视频画面显示到相应的位置,无论是主窗口还是子窗口。具体从源码一看便知。
目前在UiCore.dll中对于通用控件逻辑的实现还有很多待开发,但并不影响上层应用自行实现,因为图形剪切已经能高效的完成,并且基础接口也基本稳定。按照设计意图,GDI.dll之后会开放给使用者以自行实现,因为这一层仅仅是简单封装与操作系统的图形接口,以及与2d/3d技术的接口,只要替换这个dll(或者动态加载不同的dll),就可以支持(或同时支持)多种图形技术。
第一版,期盼朋友们的问题反馈及宝贵建议,以待改进。
在windows一统桌面市场的今天,linux想要改变格局仍需时日,丰富的应用是引导用户选择的重要力量。希望一个跨平台的应用框架可以为其提供一些支持,毕竟不必重复开发就能应用于各类平台非常诱人,让更多用户体验自己的产品也会更有成就感。
HomePlay下一步需要完善的功能考虑如下,
1.修正一些使用中的问题;
2.增加进度显示;
3.
框架下一步需要增加的考虑如下,
1.实现对树控件等常用控件的基础逻辑封装;
2.规范并发布应用接口,以便使用者开发自己的应用;
3.实现xlib模块以支持linux应用;
4.实现ddraw/d3d/opengl等模块以支持其它图形技术;
附件中包含了效果图片和MFC部分的源码
email:home_fb@163.com
- 大小: 44.9 KB
- 大小: 43.1 KB
- 大小: 200.4 KB
分享到:
相关推荐
《模式识别》第四版demo matlab代码, Sergios Theodoridis Konstantinos Koutroumbas 李晶皎译 有图形界面,包括3个demo: 神经网络,语音识别,svm
这个是一个支付宝官方demo改进之后的demo,因为支付宝demo适配的时候只适配到了14,所以有些高版本的机型官方demo不一定适用。其实改的地方不多,但是确实是花了一些功夫去查资料的,大家可以参考下。这个是客户端版...
在Redis中,发布订阅是一种消息传递模型,允许生产者(Publisher)向一个或多个主题(Topic,也称为频道)发送消息,而消费者(Subscriber)可以订阅这些主题以接收发送的消息。这种模式无需直接连接生产者和消费者...
总结来说,这个MQTT Java版DEMO涵盖了从创建MQTT客户端、连接服务器、订阅和发布消息的基本操作,同时也提供了mosquitto服务器的安装资源,帮助开发者在本地搭建MQTT环境进行测试。通过这个DEMO,你可以深入理解MQTT...
《clientDEMO:一款强大的监控调试工具》 在IT行业中,高效的监控与调试能力是确保系统稳定运行的关键。clientDEMO就是这样一款专为监控和调试而设计的专业软件,它在网络管理领域扮演着不可或缺的角色。这款工具以...
首先,"JAVA版DEMO"是大华SDK为Java开发者提供的示例代码,用于展示如何使用SDK中的各种功能。通过分析和学习这些DEMO,开发者可以快速理解SDK的工作原理和调用方式。DEMO通常包括了设备连接、视频流获取、图像处理...
这个"android 版本更新DEMO"旨在为开发者提供一个实用的示例,指导他们如何在自己的应用中实现自动检查和下载新版本的功能。 首先,我们来看看`JavaApk源码说明.txt`。这个文档可能包含了关于DEMO源码的详细解释,...
十分稳定的mobiscroll demo,演示了多种控件,直接能够使用。完美兼容低版本浏览器(比如:IE)
在培训材料方面,本教程是基于Demo3D 2017版的内容,会定期更新,包含有PDF格式的教程文件、模型目录和组件库目录。用户在学习过程中,需要特别注意关于软件版权和培训内容的正确使用和传播规定。
总结来说,这个"openlayers发布离线地图DEMO"展示了如何使用OpenLayers库加载本地存储的瓦片数据,创建一个无需网络连接就能显示的地图应用。这对于那些需要在无网络环境或带宽有限的场合使用地图的应用场景非常有用...
总结来说,ATA考试系统(DEMO版)提供了一个直观且易于操作的考试环境,用户可以体验从安装、登录到参与考试的全过程,从而对系统有全面的认识。通过DEMO版,用户可以评估该系统是否符合自身需求,为后续的使用决策...
这个"quartz完整版demo"是一个完整的示例项目,包含了运行在Eclipse环境下的所有必要文件,旨在帮助用户理解和学习如何使用Quartz进行任务调度。 首先,Quartz的核心概念包括作业(Job)、触发器(Trigger)和调度...
这个“iOS 个人中心 demo”显然是一个使用Swift或Objective-C编写的示例项目,展示了如何利用UICollectionView实现这一功能。UICollectionView是iOS SDK中的一个强大组件,用于创建灵活的布局,比如网格、列表等,...
这个"jqGrid demo (完整版)"提供了一个全面的示例,可以帮助开发者更好地理解和应用 jqGrid,无论是在 PHP 或 JSP 环境中。 1. **jqGrid 简介** jqGrid 提供了丰富的功能,包括分页、排序、搜索、编辑、添加、...
3.3.6微信支付JAVA版demo 完整版,绝对不坑爹
就是一个很简单的查询列表的demo,安卓版本的,可以查看
Safengine_Demo破解版
"echart官方demo(完整版)"是一个包含ECharts所有示例和必需JavaScript库的压缩包,非常适合前端开发者用于学习、参考和实际项目应用。 首先,ECharts的图表类型非常多样化,包括但不限于: 1. 折线图(line):...
在"vue 2.0写的一个小demo"中,我们可以看到开发者运用了Vue的多个核心概念和技术。以下是对这些知识点的详细解释: 1. **双向数据绑定**:Vue 的核心特性之一是双向数据绑定(Two-Way Data Binding)。通过 `v-...
这个“android版本更新 demo”项目旨在展示如何实现一个有效的版本更新系统,包括检查新版本、下载更新包以及自动升级等功能。以下是对这些关键知识点的详细解释: 1. **版本控制**:在Android应用开发中,版本控制...