⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 playercontroller.as

📁 本人做的Flash播放器源码,仅供大家参考并扩展
💻 AS
字号:
/**
* User input management of the players MCV pattern.
*
* @author	Jeroen Wijering
* @version	1.9
**/


import com.jeroenwijering.players.AbstractController;


class com.jeroenwijering.players.PlayerController extends AbstractController {

	
	/** use SharedObject to save current file, item and volume **/
	private var playerSO:SharedObject;


	/** Constructor, save arrays and set currentItem. **/
	function PlayerController(cfg:Object,fed:Object) {
		super(cfg,fed);
		playerSO = SharedObject.getLocal("com.jeroenwijerin.players", "/");
		if(playerSO.data.volume != undefined && _root.volume == undefined) {
			config["volume"] = playerSO.data.volume;
		}
		if(playerSO.data.usecaptions != undefined && 
			_root.usecaptions == undefined) {
			config["usecaptions"] = playerSO.data.usecaptions;
		}
		if(playerSO.data.useaudio != undefined && 
			_root.useaudio == undefined) {
			config["useaudio"] = playerSO.data.useaudio;
		}
	};


	/** Complete the build of the MCV cycle and start flow of events. **/
	public function startMCV(mar:Array) {
		registeredModels = mar;
		if(feeder.feed[currentItem-1]['category']=='preroll') {
			currentItem--;
		}
		sendChange("item",currentItem);
		if(config["autostart"] == "muted") {
			sendChange("volume",0);
		} else {
			sendChange("volume",config["volume"]);
		}
		if(config["usecaptions"] == "false") { 
			config["clip"].captions._visible = false;
			config["clip"].controlbar.cc.icn._alpha = 40;
		}
		if(config["useaudio"] == "false") {
			config["clip"].audio.setStop();
			config["clip"].controlbar.au.icn._alpha = 40;
		}
		if(config["autostart"] == "false") {
			sendChange("pause",feeder.feed[currentItem]['start']);
			isPlaying = false;
		} else {
			sendChange("start",feeder.feed[currentItem]['start']);
			isPlaying = true;
		}
	};


	/** PlayPause switch **/
	private function setPlaypause(dpl:Number) {
		if((feeder.feed[currentItem]['category'] == 'preroll' ||
			feeder.feed[currentItem]['category'] == 'postroll') && dpl==1) {
			getURL(feeder.feed[currentItem]["link"],config["linktarget"]);
		} else if(isPlaying == true) {
			isPlaying = false;
			sendChange("pause");
		} else { 
			isPlaying = true;
			sendChange("start");
		}
	};


	/** Play previous item. **/
	private function setPrev() {
		if(currentItem == 0) { var i:Number = feeder.feed.length - 1; }
		else { var i:Number = currentItem-1; }
		setPlayitem(i);
	};


	/** Play next item. **/
	private function setNext() {
		if(currentItem == feeder.feed.length - 1) { 
			var i:Number = 0; 
		} else if(feeder.feed[currentItem]['category']=='preroll') {
			var i:Number = currentItem+2;
		} else { 
			var i:Number = currentItem+1;
		}
		setPlayitem(i);
	};


	/** Stop and clear item. **/
	private function setStop() { 
		sendChange("pause",0);
		sendChange("stop");
		sendChange("item",currentItem);
		isPlaying = false;
	};


	/** Forward scrub number to model. **/
	private function setScrub(prm) {
		if(feeder.feed[currentItem]['category'] == 'preroll' || 
			feeder.feed[currentItem]['category'] == 'postroll') {
				return;
		} else if(isPlaying == true) {
			sendChange("start",prm);
		} else {
			sendChange("pause",prm);
		}
	};


	/** Play a new item. **/
	private function setPlayitem(itm:Number) {
		if(feeder.feed[itm-1]['category']=='preroll' && currentItem!=itm-1) {
			itm--;
		} else if (feeder.feed[itm]['category']=='postroll' && 
			currentItem==itm+1) {
			itm--;
		}
		if(itm != currentItem) {
			itm > feeder.feed.length-1 ? itm = feeder.feed.length-1: null;
			if(feeder.feed[currentItem]['file'] != feeder.feed[itm]['file']) {
				sendChange("stop");
			}
			currentItem = itm;
			sendChange("item",itm);

		}
		sendChange("start",feeder.feed[itm]["start"]);
		currentURL = feeder.feed[itm]['file'];
		isPlaying = true;
	};


	/** Get url from an item if link exists, else playpause. **/
	private function setGetlink(idx:Number) {
		if(feeder.feed[idx]["link"] == undefined) {
			setPlaypause();
		} else {
			getURL(feeder.feed[idx]["link"],config["linktarget"]);
		}
	};


	/** Determine what to do if an item is completed. **/
	private function setComplete() {
		itemsPlayed++;
		if(feeder.feed[currentItem]['type'] == "rtmp" || 
			config["streamscript"] != undefined) {
			sendChange("stop");
		}
		if(feeder.feed[currentItem]['category'] == 'preroll' || 
			feeder.feed[currentItem+1]['category'] == 'postroll') {
			setPlayitem(currentItem+1);
		} else if(config["repeat"] == "false" || (config["repeat"] == "list"
			&& itemsPlayed == feeder.feed.length)) {
			sendChange("pause",0);
			isPlaying = false;
			itemsPlayed = 0;
			if(feeder.feed[currentItem]['category'] == 'postroll') {
				currentItem--;
				sendChange("stop");
				sendChange("item",currentItem);
			}
		} else {
			if(config["shuffle"] == "true") {
				var i:Number = randomizer.pick();
			} else if(currentItem == feeder.feed.length - 1) {
				var i:Number = 0;
			} else { 
				var i:Number = currentItem+1;
			}
			setPlayitem(i);
		}
	};


	/** Check volume percentage and forward to models. **/
	private function setVolume(prm) {
		if (prm < 0 ) { prm = 0; } else if (prm > 100) { prm = 100; }
		if(config["volume"] == 0 && prm == 0) { prm = 80; }
		config["volume"] = prm;
		sendChange("volume",prm);
		playerSO.data.volume = prm;
		playerSO.flush();
	};


	/** Fullscreen switch function. **/
	private function setFullscreen() {
		if(Stage["displayState"] == "normal" && 
			config["usefullscreen"] == "true") { 
			Stage["displayState"] = "fullScreen";
		} else if (Stage["displayState"] == "fullScreen" && 
			config["usefullscreen"] == "true") {
			Stage["displayState"] = "normal";
		} else if (config["fsbuttonlink"] != undefined) {
			sendChange("stop");
			getURL(config["fsbuttonlink"],config["linktarget"]);
		}
	};


	/** Captions toggle **/
	private function setCaptions() {
		if(config["usecaptions"] == "true") {
			config["usecaptions"] = "false";
			config["clip"].captions._visible = false;
			config["clip"].controlbar.cc.icn._alpha = 40;
		} else {
			config["usecaptions"] = "true";
			config["clip"].captions._visible = true;
			config["clip"].controlbar.cc.icn._alpha = 100;
		}
		playerSO.data.usecaptions = config["usecaptions"];
		playerSO.flush();
	};


	/** Audiotrack toggle **/
	private function setAudio() {
		if(config["useaudio"] == "true") {
			config["useaudio"] = "false";
			config["clip"].audio.setStop();
			config["clip"].controlbar.au.icn._alpha = 40;
		} else {
			config["useaudio"] = "true";
			config["clip"].audio.setStart();
			config["clip"].controlbar.au.icn._alpha = 100;
		}
		playerSO.data.useaudio = config["useaudio"];
		playerSO.flush();
	};


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -