/** * @author Sascha Kluger * @copyright 2010 Jefferson González, Sascha Kluger * * @license * This file is part of Jaris FLV Player. * * Jaris FLV Player is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License or GNU LESSER GENERAL * PUBLIC LICENSE as published by the Free Software Foundation, either version * 3 of the License, or (at your option) any later version. * * Jaris FLV Player is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License and * GNU LESSER GENERAL PUBLIC LICENSE along with Jaris FLV Player. If not, * see . */ package jaris.player; //{Libraries import flash.system.Capabilities; import flash.system.Security; import flash.external.ExternalInterface; import flash.display.GradientType; import flash.events.Event; import flash.events.TimerEvent; import flash.geom.Matrix; import flash.Lib; import flash.events.MouseEvent; import flash.display.MovieClip; import flash.net.NetStream; import flash.geom.Rectangle; import flash.net.ObjectEncoding; import flash.text.AntiAliasType; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.text.TextFormat; import flash.utils.Timer; import jaris.animation.Animation; import jaris.display.Loader; import jaris.events.PlayerEvents; import jaris.player.controls.AspectRatioIcon; import jaris.player.controls.FullscreenIcon; import jaris.player.controls.PauseIcon; import jaris.player.controls.PlayIcon; import jaris.player.controls.VolumeIcon; import jaris.player.Player; import flash.display.Sprite; import flash.display.Stage; import jaris.utils.Utils; //} /** * Default controls for jaris player */ class JsApi extends MovieClip { //{Member Variables private var _stage:Stage; private var _movieClip:MovieClip; private var _player:Player; private var _isBuffering:Bool; private var _percentLoaded:Float; private var _externalListeners:Hash; //} //{Constructor public function new(player:Player) { super(); _externalListeners = new Hash(); Security.allowDomain("*"); //{Main variables // _stage = Lib.current.stage; // _movieClip = Lib.current; _player = player; _player.addEventListener(PlayerEvents.MOUSE_HIDE, onPlayerEvent); _player.addEventListener(PlayerEvents.MOUSE_SHOW, onPlayerEvent); _player.addEventListener(PlayerEvents.MEDIA_INITIALIZED, onPlayerEvent); _player.addEventListener(PlayerEvents.BUFFERING, onPlayerEvent); _player.addEventListener(PlayerEvents.NOT_BUFFERING, onPlayerEvent); _player.addEventListener(PlayerEvents.RESIZE, onPlayerEvent); _player.addEventListener(PlayerEvents.PLAY_PAUSE, onPlayerEvent); _player.addEventListener(PlayerEvents.PLAYBACK_FINISHED, onPlayerEvent); _player.addEventListener(PlayerEvents.CONNECTION_FAILED, onPlayerEvent); _player.addEventListener(PlayerEvents.ASPECT_RATIO, onPlayerEvent); _player.addEventListener(PlayerEvents.VOLUME_UP, onPlayerEvent); _player.addEventListener(PlayerEvents.VOLUME_DOWN, onPlayerEvent); _player.addEventListener(PlayerEvents.VOLUME_CHANGE, onPlayerEvent); _player.addEventListener(PlayerEvents.MUTE, onPlayerEvent); _player.addEventListener(PlayerEvents.TIME, onPlayerEvent); _player.addEventListener(PlayerEvents.PROGRESS, onPlayerEvent); _player.addEventListener(PlayerEvents.SEEK, onPlayerEvent); ExternalInterface.addCallback("api_get", getAttribute); ExternalInterface.addCallback("api_addlistener", addJsListener); ExternalInterface.addCallback("api_removelistener", removeJsListener); ExternalInterface.addCallback("api_play", setPlay); ExternalInterface.addCallback("api_pause", setPause); ExternalInterface.addCallback("api_seek", setSeek); ExternalInterface.addCallback("api_volume", setVolume); } public function getAttribute(attribute:String):Float { switch (attribute) { case 'isBuffering': return (_isBuffering) ? 1 : 0; case 'isPlaying': return (_player.isPlaying()) ? 1 : 0; case 'time': return Math.round(_player.getCurrentTime() * 10) / 10; case 'loaded': return _player.getBytesLoaded(); case 'volume': return (_player.getMute()==true) ? 0 : _player.getVolume(); } return 0; } public function addJsListener(attribute:String, parameter:String):Void { _externalListeners.set(attribute.toLowerCase(), parameter); } public function removeJsListener(attribute:String):Void { if (attribute == '*') { _externalListeners = new Hash(); return; } _externalListeners.remove(attribute.toLowerCase()); } public function onPlayerEvent(event:PlayerEvents):Void { var jsFunction = ''; var data = { duration: event.duration, fullscreen: event.fullscreen, mute: event.mute, volume: event.volume, position: event.time, type: event.name, loaded: _player.getBytesLoaded(), total: _player.getBytesTotal() }; if (_externalListeners.exists(event.name.toLowerCase())) { ExternalInterface.call(_externalListeners.get(event.name.toLowerCase()), data); } if (_externalListeners.exists('on*')) { ExternalInterface.call(_externalListeners.get('on*'), data); } } /** * Toggles pause or play */ private function setPlay():Void { if (_player.isPlaying()!=true) { _player.togglePlay(); } } /** * Toggles play or pause */ private function setPause():Void { if (_player.isPlaying()==true) { _player.togglePlay(); } } /** * Set Seek */ private function setSeek(pos:Float):Void { _player.seek(pos); } /** * Set Volume */ private function setVolume(vol:Float):Void { if (vol <= 0 && _player.getMute()!=true) { _player.toggleMute(); _player.setVolume(0); return; } if (_player.getMute() == true) { _player.toggleMute(); } if (vol >= 1) { _player.setVolume(1); return; } _player.setVolume(vol); } }