HomePlay第一版demo发布

    一直想做一个能够方便跨平台开发的应用框 ,基础部分已经完成,于是将这个处于襁褓中的框架应用在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:[email protected]

猜你喜欢

转载自home-all.iteye.com/blog/1122894