使用MPlayer开发万能播放器-原理篇

        先秀一秀效果图:

   

1、MPlayer简介
      MPlayer是一款开源多媒体播放器,以GNU通用公共许可证发布。此款软件可在各主流作业系统使用,例如Linux和其他类Unix系统、Windows及Mac OS X系统。
       MPlayer建基于命令行界面,在各作业系统也可选择安装不同的图形界面。mplayer的另一个大的特色是广泛的输出设备支持。它可以在X11、Xv、DGA、OpenGL、SVGAlib、fbdev、AAlib、DirectFB下工作,且能使用GGI和SDL和一些低级的硬件相关的驱动模式(比如Matrox、3Dfx和Radeon、Mach64、Permedia3)。MPlayer还支持通过硬件MPEG解码卡显示,如DVB 和DXR3与Hollywood+。
       MPlayer的开发始于2000年。最初的作者是 Arpad Gereoffy。MPlayer最初的名字叫"MPlayer - The Movie Player for Linux",不过后来开发者们简称其为"MPlayer - The Movie Player",原因是MPlayer已经不仅可以用于Linux而可以在所有平台上运行。

    MPlayer下载地址:http://Jempson.7958.com/down_10948103.html

2、实现原理
   
为MPlayer编写GUI程序有两种方法:
       a、MPlayer源码
             这种方法需要读懂MPlayer的源码,
直接修改他里面的代码,这样我们做得界面就能够和MPlayer一体了(当然也能够通过link mplayer用到的任何的库和.o文档,把他无缝的集成在程式里面)      
       b、使用Slave模式
            
所谓的slave模式,就是mplayer在运行过程中能够接收用户的输入命令行,具体支持哪些命令行,能够通过mplayer -input cmdlist这条命令来得到,在Mplayer源码的slave.txt中也有对这些命令有详细的讲解。Slave模式下工作的Mplayer可以和系统的标准输入、输出进行信息交互。我们可以用linux C编程来完成对slave模式工作的Mplayer进行控制和信息获取。
            由于使用AAuto开发,所以使用方案B。

3、Slave模式命令
       Slave模式命令繁多,主要的有以下几个(来自文档:http://dd.ma/ffQiTkCK):

          MPlayer暂停:

 pause                                 Pause/unpause the playback.

  MPlayer标准时间输出:

  get_time_pos                   Print out the current position in the file in seconds, as float.

  get_time_length               Print out the length of the current file in seconds.

  等等:了解全面命令,下载文档:http://dd.ma/ffQiTkCK

4、AAuto代码
           了解以上的原理,开发还是比较简单的。主要使用process.popen,进行管道之间的数据交换。第一版本的代码如下:

           

import win.ui;
import fsys.dlg;
import win.ui.menu;
import process.popen;

/*DSG{{*/
var winform = ..win.form(text="播放器";right=654;bottom=422;border="none")
winform.add(
video={cls="static";top=20;right=656;bottom=424;ah=1;aw=1;bgcolor=0;db=1;dl=1;dr=1;dt=1;left=0;z=1};
)
/*}}*/

import web.layout;
import web.layout.behavior.windowSizer;//支持拖动边框
import web.layout.behavior.windowCommand;//支持标题栏按钮

wbLayout = web.layout( winform )  
wbLayout.go("/layout/frmRound.html") 

//圆角窗口
import win.util.round;
win.util.round(winform);

// 创建player
..player = null;
var openVideo = function(filepath){
	
	if(..player != null){
		..player.process.kill();
    	..player.close();
	}
	
	..player = process.popen(io.fullpath("/mplayer/mplayer.exe"), "-vo gl -identify -slave -noquiet -wid " + winform.video.hwnd + " " + filepath);
	
}


winform.onClose = function(hwnd,message,wParam,lParam){
    if(..player != null){
    	..player.process.kill();
    	..player.close();
    }
}

winform.popmenu = win.ui.popmenu(winform);//创建弹出菜单 
winform.popmenu.add(
	'打开',
	function(id){ 
		var filepath = fsys.dlg.open("所有文件|*.*||","选择文件");
		if(filepath!=null){
			openVideo(filepath);
		}
	}
);
winform.popmenu.add('退出',function(id){ winform.close() })

winform.wndproc = function(hwnd,message,wParam,lParam){
	select(message) {
		case 0x204/*_WM_RBUTTONDOWN*/{   
			winform.popmenu.popup( win.getMessagePos(lParam) );//弹出菜单
		} 
	} 
} 

winform.show() 
win.loopMessage();
return winform;

         源码下载地址:http://dd.ma/Bf1PEARM

©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值