PageRenderTime 43ms CodeModel.GetById 29ms RepoModel.GetById 0ms app.codeStats 0ms

/lib/Jaris/src/jaris/player/JsApi.hx

https://gitlab.com/dali99/shimmie2-Material-Theme
Haxe | 232 lines | 150 code | 38 blank | 44 comment | 12 complexity | 4b5944ca0258f08801705505e1175176 MD5 | raw file
  1. /**
  2. * @author Sascha Kluger
  3. * @copyright 2010 Jefferson González, Sascha Kluger
  4. *
  5. * @license
  6. * This file is part of Jaris FLV Player.
  7. *
  8. * Jaris FLV Player is free software: you can redistribute it and/or modify
  9. * it under the terms of the GNU General Public License or GNU LESSER GENERAL
  10. * PUBLIC LICENSE as published by the Free Software Foundation, either version
  11. * 3 of the License, or (at your option) any later version.
  12. *
  13. * Jaris FLV Player is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU General Public License and
  19. * GNU LESSER GENERAL PUBLIC LICENSE along with Jaris FLV Player. If not,
  20. * see <http://www.gnu.org/licenses/>.
  21. */
  22. package jaris.player;
  23. //{Libraries
  24. import flash.system.Capabilities;
  25. import flash.system.Security;
  26. import flash.external.ExternalInterface;
  27. import flash.display.GradientType;
  28. import flash.events.Event;
  29. import flash.events.TimerEvent;
  30. import flash.geom.Matrix;
  31. import flash.Lib;
  32. import flash.events.MouseEvent;
  33. import flash.display.MovieClip;
  34. import flash.net.NetStream;
  35. import flash.geom.Rectangle;
  36. import flash.net.ObjectEncoding;
  37. import flash.text.AntiAliasType;
  38. import flash.text.TextField;
  39. import flash.text.TextFieldAutoSize;
  40. import flash.text.TextFormat;
  41. import flash.utils.Timer;
  42. import jaris.animation.Animation;
  43. import jaris.display.Loader;
  44. import jaris.events.PlayerEvents;
  45. import jaris.player.controls.AspectRatioIcon;
  46. import jaris.player.controls.FullscreenIcon;
  47. import jaris.player.controls.PauseIcon;
  48. import jaris.player.controls.PlayIcon;
  49. import jaris.player.controls.VolumeIcon;
  50. import jaris.player.Player;
  51. import flash.display.Sprite;
  52. import flash.display.Stage;
  53. import jaris.utils.Utils;
  54. //}
  55. /**
  56. * Default controls for jaris player
  57. */
  58. class JsApi extends MovieClip {
  59. //{Member Variables
  60. private var _stage:Stage;
  61. private var _movieClip:MovieClip;
  62. private var _player:Player;
  63. private var _isBuffering:Bool;
  64. private var _percentLoaded:Float;
  65. private var _externalListeners:Hash<String>;
  66. //}
  67. //{Constructor
  68. public function new(player:Player)
  69. {
  70. super();
  71. _externalListeners = new Hash<String>();
  72. Security.allowDomain("*");
  73. //{Main variables
  74. // _stage = Lib.current.stage;
  75. // _movieClip = Lib.current;
  76. _player = player;
  77. _player.addEventListener(PlayerEvents.MOUSE_HIDE, onPlayerEvent);
  78. _player.addEventListener(PlayerEvents.MOUSE_SHOW, onPlayerEvent);
  79. _player.addEventListener(PlayerEvents.MEDIA_INITIALIZED, onPlayerEvent);
  80. _player.addEventListener(PlayerEvents.BUFFERING, onPlayerEvent);
  81. _player.addEventListener(PlayerEvents.NOT_BUFFERING, onPlayerEvent);
  82. _player.addEventListener(PlayerEvents.RESIZE, onPlayerEvent);
  83. _player.addEventListener(PlayerEvents.PLAY_PAUSE, onPlayerEvent);
  84. _player.addEventListener(PlayerEvents.PLAYBACK_FINISHED, onPlayerEvent);
  85. _player.addEventListener(PlayerEvents.CONNECTION_FAILED, onPlayerEvent);
  86. _player.addEventListener(PlayerEvents.ASPECT_RATIO, onPlayerEvent);
  87. _player.addEventListener(PlayerEvents.VOLUME_UP, onPlayerEvent);
  88. _player.addEventListener(PlayerEvents.VOLUME_DOWN, onPlayerEvent);
  89. _player.addEventListener(PlayerEvents.VOLUME_CHANGE, onPlayerEvent);
  90. _player.addEventListener(PlayerEvents.MUTE, onPlayerEvent);
  91. _player.addEventListener(PlayerEvents.TIME, onPlayerEvent);
  92. _player.addEventListener(PlayerEvents.PROGRESS, onPlayerEvent);
  93. _player.addEventListener(PlayerEvents.SEEK, onPlayerEvent);
  94. ExternalInterface.addCallback("api_get", getAttribute);
  95. ExternalInterface.addCallback("api_addlistener", addJsListener);
  96. ExternalInterface.addCallback("api_removelistener", removeJsListener);
  97. ExternalInterface.addCallback("api_play", setPlay);
  98. ExternalInterface.addCallback("api_pause", setPause);
  99. ExternalInterface.addCallback("api_seek", setSeek);
  100. ExternalInterface.addCallback("api_volume", setVolume);
  101. }
  102. public function getAttribute(attribute:String):Float {
  103. switch (attribute) {
  104. case 'isBuffering':
  105. return (_isBuffering) ? 1 : 0;
  106. case 'isPlaying':
  107. return (_player.isPlaying()) ? 1 : 0;
  108. case 'time':
  109. return Math.round(_player.getCurrentTime() * 10) / 10;
  110. case 'loaded':
  111. return _player.getBytesLoaded();
  112. case 'volume':
  113. return (_player.getMute()==true) ? 0 : _player.getVolume();
  114. }
  115. return 0;
  116. }
  117. public function addJsListener(attribute:String, parameter:String):Void {
  118. _externalListeners.set(attribute.toLowerCase(), parameter);
  119. }
  120. public function removeJsListener(attribute:String):Void {
  121. if (attribute == '*')
  122. {
  123. _externalListeners = new Hash<String>();
  124. return;
  125. }
  126. _externalListeners.remove(attribute.toLowerCase());
  127. }
  128. public function onPlayerEvent(event:PlayerEvents):Void
  129. {
  130. var jsFunction = '';
  131. var data = {
  132. duration: event.duration,
  133. fullscreen: event.fullscreen,
  134. mute: event.mute,
  135. volume: event.volume,
  136. position: event.time,
  137. type: event.name,
  138. loaded: _player.getBytesLoaded(),
  139. total: _player.getBytesTotal()
  140. };
  141. if (_externalListeners.exists(event.name.toLowerCase()))
  142. {
  143. ExternalInterface.call(_externalListeners.get(event.name.toLowerCase()), data);
  144. }
  145. if (_externalListeners.exists('on*'))
  146. {
  147. ExternalInterface.call(_externalListeners.get('on*'), data);
  148. }
  149. }
  150. /**
  151. * Toggles pause or play
  152. */
  153. private function setPlay():Void
  154. {
  155. if (_player.isPlaying()!=true) {
  156. _player.togglePlay();
  157. }
  158. }
  159. /**
  160. * Toggles play or pause
  161. */
  162. private function setPause():Void
  163. {
  164. if (_player.isPlaying()==true) {
  165. _player.togglePlay();
  166. }
  167. }
  168. /**
  169. * Set Seek
  170. */
  171. private function setSeek(pos:Float):Void
  172. {
  173. _player.seek(pos);
  174. }
  175. /**
  176. * Set Volume
  177. */
  178. private function setVolume(vol:Float):Void
  179. {
  180. if (vol <= 0 && _player.getMute()!=true) {
  181. _player.toggleMute();
  182. _player.setVolume(0);
  183. return;
  184. }
  185. if (_player.getMute() == true) {
  186. _player.toggleMute();
  187. }
  188. if (vol >= 1) {
  189. _player.setVolume(1);
  190. return;
  191. }
  192. _player.setVolume(vol);
  193. }
  194. }