# aardio 范例: 调用 MPV 视频播放器



```aardio
import fonts.fontAwesome;
import win.ui;
/*DSG{{*/
var winform = win.form(text="调用 MPV 视频播放器";right=856;bottom=483;bgcolor=16515070;)
winform.add(
btnFullScreen={cls="plus";text='\uF047';left=811;top=452;right=852;bottom=482;color=1938422;db=1;dr=1;font=LOGFONT(h=-16;name='FontAwesome');notify=1;repeat="center";z=4};
btnPlay={cls="plus";text='\uF04B';left=10;top=456;right=42;bottom=479;color=1938422;db=1;dl=1;font=LOGFONT(h=-19;name='FontAwesome');notify=1;repeat="scale";z=5};
btnSubtitles={cls="plus";text='\uF03A';left=639;top=455;right=664;bottom=478;color=1938422;db=1;dr=1;font=LOGFONT(h=-19;name='FontAwesome');repeat="scale";z=8};
lbTime={cls="plus";text="00:00:00";left=579;top=455;right=632;bottom=475;db=1;dr=1;z=7};
plus={cls="plus";text='\uF027';left=666;top=454;right=691;bottom=477;color=1938422;db=1;dr=1;font=LOGFONT(h=-19;name='FontAwesome');repeat="scale";z=2};
trackbar={cls="plus";left=49;top=460;right=576;bottom=472;bgcolor=-2512093;border={radius=-1};color=23807;db=1;dl=1;dr=1;foreRepeat="expand";foreRight=13;forecolor=-14911489;notify=1;paddingBottom=5;paddingTop=5;z=1};
video={cls="custom";left=8;top=6;right=848;bottom=447;bgcolor=0;db=1;dl=1;dr=1;dt=1;z=6};
volume={cls="plus";left=696;top=460;right=812;bottom=472;bgcolor=-2512093;border={radius=-1};color=23807;db=1;dr=1;foreRepeat="expand";foreRight=13;forecolor=-14911489;notify=1;paddingBottom=5;paddingTop=5;z=3}
)
/*}}*/

import mpvPlayer;
var mplayer = mpvPlayer(winform.video );

//在视频上写字，所有配置参数文档：http://mpv.io/manual/master/#options
mplayer.setOption("osd-msg1","MPV播放器是极好的");

//订阅播放进度属性变更事件，所有属性参考文档 http://mpv.io/manual/master/#properties
mplayer.observeProperty("time-pos");//播放进度
mplayer.observeProperty("duration");//视频长度
mplayer.observeProperty("track-list");//加载字幕

//属性变更后触发此事件
mplayer.onPropertyChange = function(name,value){
	if( name == "time-pos" ){ 
		if( !winform.trackbar.state.active ){ 
			if(value) winform.trackbar.progressPos = value;
		}  
	}
	elseif(name == "duration"){ 
		if(value) {
			winform.trackbar.setTrackbarRange(1,value); 
			winform.btnPlay.disabledText = null;
		}
	}	
	elseif(name == "track-list"){
		//winform.cbSubtitles.trackList();//获取视频加载的字幕
	}
}

//获取反馈信息
mplayer.requestLogMessages("info");
mplayer.onLogMessage = function(text,prefix,level,levelId){
	
}

//文件播放结束触发此事件
mplayer.onEndFile = function(reason,err){
	winform.btnPlay.checked = false;
}

//启动一个定时器用于分发播放器事件（不然不会触发任何事件）
var tmId = winform.setInterval( 
	function(){
		event = mplayer.waitEvent(0); 
		if( event.id == 8/*_MPV_EVENT_FILE_LOADED*/){
			//winform.cbSubtitles.trackList();//获取视频加载的字幕
			winform.text = mplayer.getMediaTitle();
			winform.btnPlay.disabledText = null;
		}	
	},10 
) 

import fsys.dlg;
winform.btnPlay.oncommand = function(id,event){  
    
 	if( winform.btnPlay.checked ){ 
 		
 		if(!mplayer.filename() ){ 
 			mplayer.loadFile("http://download.aardio.com/demo/video.aardio"); 
 			winform.btnPlay.disabledText = {'\uF254';'\uF251';'\uF252';'\uF253';'\uF250'}
 		}
 	
		mplayer.play();   
	}
	else {
		mplayer.stop();
		winform.trackbar.progressPos = 0;
	} 
} 

import win.debounce;
var seekDebounce = win.debounce( function(pos){
	mplayer.seek( pos  )
},50)

winform.trackbar.onPosChanged = function( pos,triggeredByUser ){
	if(triggeredByUser){
		seekDebounce(pos);
	}
	
	winform.lbTime.text = time(pos,"!%H:%M:%S"); 
}
 
import win.ui.menu;
winform.btnSubtitles.oncommand = function( id,event ){
	
	var subCount = 0;
	var count = mplayer.getTrackCount();
 
 	var menu = win.ui.popmenu(winform);
	for(i=1;count){
		if( mplayer.getTrackType(i) == "sub" ){
			subCount ++;
			var id = menu.add(mplayer.getTrackTitle(i),function(){ 
				mplayer.setSubtitle( mplayer.getTrackId(i) );
			})
			menu.check(id,mplayer.getTrackSelected(i),0); 
		}
	} 	
	
	if(!subCount){
		return winform.msgboxErr("无字幕")
	}
 
	menu.popup();	
}

winform.volume.setTrackbarRange(1,100)
winform.volume.progressPos = mplayer.getVolume();
winform.volume.onPosChanged = function( pos,triggeredByUser ){
	if(triggeredByUser){
		mplayer.setVolume(winform.volume.progressPos)
	}
}

winform.volume.skin({
	background={
		default=0xFF23ABD9
	};
	foreground={
		default=0xFFFF771C;
		hover=0xFFFF6600
	};
	color={
		default=0xFFFF5C00;
		hover=0xFFFF6600
	}
})

winform.trackbar.setTrackbarRange(1,100);
winform.trackbar.skin({
	background={
		default=0xFF23ABD9
	};
	foreground={
		default=0xFFFF771C;
		hover=0xFFFF6600
	};
	color={
		default=0xFFFF5C00;
		hover=0xFFFF6600
	}
})

winform.btnFullScreen.skin({
	color={
		active=0xFF00FF00;
		default=0xFFF6931D;
		disabled=0xFF6D6D6D;
		hover=0xFFFF0000
	}
})

winform.btnSubtitles.skin({
	color={
		active=0xFF00FF00;
		default=0xFFF6931D;
		disabled=0xFF6D6D6D;
		hover=0xFFFF0000
	}
})

winform.btnPlay.skin({
	color={
		active=0xFF00FF00;
		default=0xFFF6931D;
		disabled=0xFF6D6D6D;
		hover=0xFFFF0000
	}
	checked={
		text = '\uF04D'
	}
})

winform.btnFullScreen.oncommand = function(id,event){
	winform.video.fullscreen();
}

winform.show() 
win.loopMessage();
```

