Changeset 396
- Timestamp:
- 10/05/09 21:54:05 (4 years ago)
- Location:
- trunk/fl5
- Files:
-
- 18 edited
-
src/com/longtailvideo/jwplayer/controller/Controller.as (modified) (9 diffs)
-
src/com/longtailvideo/jwplayer/controller/PlayerSetup.as (modified) (2 diffs)
-
src/com/longtailvideo/jwplayer/events/MediaEvent.as (modified) (2 diffs)
-
src/com/longtailvideo/jwplayer/events/PlayerEvent.as (modified) (1 diff)
-
src/com/longtailvideo/jwplayer/events/PlayerStateEvent.as (modified) (2 diffs)
-
src/com/longtailvideo/jwplayer/events/PlaylistEvent.as (modified) (2 diffs)
-
src/com/longtailvideo/jwplayer/events/ViewEvent.as (modified) (2 diffs)
-
src/com/longtailvideo/jwplayer/media/MediaProvider.as (modified) (7 diffs)
-
src/com/longtailvideo/jwplayer/model/PlayerConfig.as (modified) (4 diffs)
-
src/com/longtailvideo/jwplayer/model/Playlist.as (modified) (3 diffs)
-
src/com/longtailvideo/jwplayer/player/Player.as (modified) (4 diffs)
-
src/com/longtailvideo/jwplayer/player/PlayerV4Emulation.as (modified) (3 diffs)
-
src/com/longtailvideo/jwplayer/plugins/Display.as (modified) (1 diff)
-
src/com/longtailvideo/jwplayer/plugins/PluginConfig.as (modified) (1 diff)
-
src/com/longtailvideo/jwplayer/utils/Logger.as (modified) (5 diffs)
-
src/com/longtailvideo/jwplayer/view/V4ControlBarComponent.as (modified) (6 diffs)
-
src/com/longtailvideo/jwplayer/view/View.as (modified) (9 diffs)
-
test/tests/media/MediaProviderTestJig.as (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/fl5/src/com/longtailvideo/jwplayer/controller/Controller.as
r395 r396 1 1 package com.longtailvideo.jwplayer.controller { 2 2 import com.longtailvideo.jwplayer.events.GlobalEventDispatcher; 3 import com.longtailvideo.jwplayer.events.MediaEvent; 3 4 import com.longtailvideo.jwplayer.events.PlayerEvent; 4 5 import com.longtailvideo.jwplayer.events.PlaylistEvent; 6 import com.longtailvideo.jwplayer.events.ViewEvent; 5 7 import com.longtailvideo.jwplayer.model.Model; 6 8 import com.longtailvideo.jwplayer.model.PlaylistItem; … … 17 19 import flash.net.URLRequest; 18 20 import flash.net.navigateToURL; 19 import com.longtailvideo.jwplayer.events.MediaEvent;20 21 21 22 /** … … 50 51 /** File extensions of all supported mediatypes. **/ 51 52 private var extensions:Object = { 52 '3g2':'video',53 '3gp':'video',54 'aac':'video',55 'f4b':'video',56 'f4p':'video',57 'f4v':'video',58 'flv':'video',59 'gif':'image',60 'jpg':'image',61 'jpeg':'image',62 'm4a':'video',63 'm4v':'video',64 'mov':'video',65 'mp3':'sound',66 'mp4':'video',67 'png':'image',68 'rbs':'sound',69 'sdp':'video',70 'swf':'image',71 'vp6':'video'72 };53 '3g2':'video', 54 '3gp':'video', 55 'aac':'video', 56 'f4b':'video', 57 'f4p':'video', 58 'f4v':'video', 59 'flv':'video', 60 'gif':'image', 61 'jpg':'image', 62 'jpeg':'image', 63 'm4a':'video', 64 'm4v':'video', 65 'mov':'video', 66 'mp3':'sound', 67 'mp4':'video', 68 'png':'image', 69 'rbs':'sound', 70 'sdp':'video', 71 'swf':'image', 72 'vp6':'video' 73 }; 73 74 74 75 /** A list with legacy CDN classes that are now redirected to buit-in ones. **/ 75 76 private var cdns:Object = { 76 bitgravity:{'http.startparam':'starttime', provider:'http'},77 edgecast: {'http.startparam':'ec_seek',provider:'http'},78 flvseek: {'http.startparam':'fs',provider:'http'},79 highwinds: {'rtmp.loadbalance':true,provider:'rtmp'},80 lighttpd: {'http.startparam':'start',provider:'http'},81 vdox: {'rtmp.loadbalance':true,provider:'rtmp'}82 };77 bitgravity:{'http.startparam':'starttime', provider:'http'}, 78 edgecast:{'http.startparam':'ec_seek', provider:'http'}, 79 flvseek:{'http.startparam':'fs', provider:'http'}, 80 highwinds:{'rtmp.loadbalance':true, provider:'rtmp'}, 81 lighttpd:{'http.startparam':'start', provider:'http'}, 82 vdox:{'rtmp.loadbalance':true, provider:'rtmp'} 83 }; 83 84 84 85 public function Controller(player:Player, model:Model, view:View) { … … 106 107 107 108 private function addViewListeners():void { 108 109 _view.addEventListener(ViewEvent.JWPLAYER_VIEW_PLAY, playHandler); 110 _view.addEventListener(ViewEvent.JWPLAYER_VIEW_STOP, stopHandler); 111 } 112 113 private function playHandler(evt:Event):void { 114 if (_model.playlist.currentItem) { 115 switch (_player.state) { 116 case PlayerState.IDLE: 117 load(_model.playlist.currentItem); 118 break; 119 case PlayerState.PAUSED: 120 _model.media.play(); 121 break; 122 } 123 } 124 } 125 126 private function stopHandler(evt:ViewEvent):void { 127 switch (_player.state) { 128 case PlayerState.BUFFERING: 129 case PlayerState.PLAYING: 130 _model.media.stop(); 131 break; 132 } 109 133 } 110 134 … … 116 140 117 141 private function setupComplete(evt:Event):void { 118 trace("Setup complete");142 dispatchEvent(new PlayerEvent(PlayerEvent.JWPLAYER_READY)); 119 143 RootReference.stage.dispatchEvent(new Event(Event.RESIZE)); 144 loadFirstItem(); 120 145 } 121 146 … … 123 148 // This stuff moved to playlist item handler 124 149 } 125 150 126 151 private function playlistItemHandler(evt:PlaylistEvent):void { 127 152 var item:PlaylistItem = _model.playlist.currentItem; 128 153 if (item.provider) { 129 154 130 155 // Backwards compatibility for CDNs in the 'type' flashvar. 131 156 if (cdns.hasOwnProperty(item.provider)) { 132 157 _model.config.setConfig(cdns[item.provider]); 133 158 } 134 159 135 160 // If the model doesn't have an instance of the provider, load & instantiate it 136 161 if (!_model.hasMediaProvider(item.provider)) { … … 141 166 return; 142 167 } 143 } 144 145 load(_model.playlist.currentItem); 146 } 147 168 169 _model.setActiveMediaProvider(item.provider); 170 } 171 172 if (_player.config.autostart) { 173 load(_model.playlist.currentItem); 174 } 175 } 176 148 177 private function mediaSourceLoaded(evt:Event):void { 149 178 var loader:MediaProviderLoader = evt.target as MediaProviderLoader; 150 179 _model.setMediaProvider(_model.playlist.currentItem.provider, loader.loadedSource); 180 _model.setActiveMediaProvider(_model.playlist.currentItem.provider); 151 181 load(_model.playlist.currentItem); 152 182 } 153 183 154 184 private function errorHandler(evt:ErrorEvent):void { 155 185 errorState(evt.text); … … 334 364 return false; 335 365 } 336 366 337 367 private function lockHandler(evt:MediaEvent):void { 338 368 _model.media.play(); … … 361 391 return false; 362 392 } 393 394 private function loadFirstItem():void { 395 // if (_model.playlist.currentItem) { 396 // load(_model.playlist.currentItem); 397 // } 398 } 399 363 400 364 401 } -
trunk/fl5/src/com/longtailvideo/jwplayer/controller/PlayerSetup.as
r393 r396 75 75 tasker.queueTask(initPlugins); 76 76 tasker.queueTask(setupJS); 77 tasker.queueTask(beginAutostart);78 77 79 78 tasker.runTasks(); … … 203 202 } 204 203 205 private function beginAutostart():void {206 tasker.success();207 }208 209 210 204 } 211 205 } -
trunk/fl5/src/com/longtailvideo/jwplayer/events/MediaEvent.as
r395 r396 1 1 package com.longtailvideo.jwplayer.events { 2 import flash.events.Event; 2 3 3 4 /** … … 170 171 super(type); 171 172 } 173 174 public override function clone():Event { 175 var evt:MediaEvent = new MediaEvent(this.type); 176 evt.bufferPercent = this.bufferPercent; 177 evt.duration = this.duration; 178 evt.metadata = this.metadata; 179 evt.position = this.position; 180 evt.volume = this.volume; 181 evt.mute = this.mute; 182 return evt; 183 } 172 184 } 173 185 } -
trunk/fl5/src/com/longtailvideo/jwplayer/events/PlayerEvent.as
r393 r396 87 87 } 88 88 89 public override function toString():String { 90 var superString:String = super.toString(); 91 return superString.substr(0, superString.length-1) 92 + " id=" + id 93 + " client=" + client 94 + " version=" + version 95 + " message=" + message 96 + "]"; 97 } 98 99 public override function clone():Event { 100 return new PlayerEvent(this.type, this.message); 101 } 102 89 103 } 90 104 } -
trunk/fl5/src/com/longtailvideo/jwplayer/events/PlayerStateEvent.as
r380 r396 1 1 package com.longtailvideo.jwplayer.events { 2 import flash.events.Event; 2 3 3 4 public class PlayerStateEvent extends PlayerEvent { … … 12 13 this.oldstate = oldState; 13 14 } 15 16 public override function clone():Event { 17 return new PlayerStateEvent(this.type, this.newstate, this.oldstate); 18 } 14 19 } 15 20 } -
trunk/fl5/src/com/longtailvideo/jwplayer/events/PlaylistEvent.as
r292 r396 1 1 package com.longtailvideo.jwplayer.events { 2 import flash.events.Event; 2 3 3 4 … … 44 45 } 45 46 47 public override function clone() : Event { 48 return new PlaylistEvent(this.type); 49 } 50 46 51 } 47 52 } -
trunk/fl5/src/com/longtailvideo/jwplayer/events/ViewEvent.as
r395 r396 1 1 package com.longtailvideo.jwplayer.events { 2 import flash.events.Event; 2 3 3 4 public class ViewEvent extends PlayerEvent { … … 129 130 } 130 131 132 public override function clone():Event { 133 return new ViewEvent(this.type, this.data); 134 } 135 131 136 } 132 137 } -
trunk/fl5/src/com/longtailvideo/jwplayer/media/MediaProvider.as
r395 r396 3 3 import com.longtailvideo.jwplayer.events.IGlobalEventDispatcher; 4 4 import com.longtailvideo.jwplayer.events.MediaEvent; 5 import com.longtailvideo.jwplayer.events.PlayerEvent; 5 6 import com.longtailvideo.jwplayer.events.PlayerStateEvent; 6 7 import com.longtailvideo.jwplayer.model.PlayerConfig; 7 8 import com.longtailvideo.jwplayer.model.PlaylistItem; 9 import com.longtailvideo.jwplayer.player.PlayerState; 10 import com.longtailvideo.jwplayer.utils.Stretcher; 8 11 9 12 import flash.display.DisplayObject; 13 import flash.display.Loader; 10 14 import flash.display.Sprite; 11 15 import flash.events.Event; 12 import com.longtailvideo.jwplayer.player.PlayerState; 16 import flash.events.IOErrorEvent; 17 import flash.net.URLRequest; 13 18 14 15 19 /** 16 20 * Fired when a portion of the current media has been loaded into the buffer. … … 22 26 * Fired when the buffer is full. 23 27 * 24 * @eventType com.longtailvideo.jwplayer.events.MediaEvent.JWPLAYER_MEDIA_BUFFER 28 * @eventType com.longtailvideo.jwplayer.events.MediaEvent.JWPLAYER_MEDIA_BUFFER_FULL 25 29 */ 26 30 [Event(name="jwplayerMediaBufferFull", type="com.longtailvideo.jwplayer.events.MediaEvent")] … … 71 75 protected var _dispatcher:GlobalEventDispatcher; 72 76 73 74 public function MediaProvider(){77 public function MediaProvider(){ 78 _dispatcher = new GlobalEventDispatcher(); 75 79 } 76 80 77 81 public function initializeMediaProvider(cfg:PlayerConfig):void { 78 82 _config = cfg; 79 _dispatcher = new GlobalEventDispatcher();80 83 _state = PlayerState.IDLE; 81 84 } 82 83 85 84 86 /** … … 144 146 145 147 /** Graphical representation of media **/ 146 public function display():DisplayObject {148 public function get display():DisplayObject { 147 149 return _media; 148 150 } … … 190 192 * @param height The new height of the display. 191 193 **/ 192 193 194 public function resize(width:Number, height:Number):void { 194 _media.width = width; 195 _media.height = height; 195 if (_media) { 196 Stretcher.stretch(_media, width, height, _config.stretching); 197 } 198 196 199 } 197 200 … … 209 212 } 210 213 } 211 212 214 213 215 /** … … 274 276 return super.dispatchEvent(event); 275 277 } 278 276 279 } 277 280 } -
trunk/fl5/src/com/longtailvideo/jwplayer/model/PlayerConfig.as
r395 r396 1 1 package com.longtailvideo.jwplayer.model { 2 2 import com.longtailvideo.jwplayer.plugins.PluginConfig; 3 import com.longtailvideo.jwplayer.utils.Strings; 3 4 import com.longtailvideo.jwplayer.utils.TypeChecker; 4 5 … … 46 47 private var _pluginConfig:Object = {}; 47 48 49 private var _playerready:String = ""; 50 48 51 public function PlayerConfig(playlist:Playlist):void { 49 52 getCookiedParams(); … … 60 63 for (var item:String in config) { 61 64 if (newItem.hasOwnProperty(item)) { 62 if (_list.length > 0) { 65 if (item == "file" && Strings.extension(config[item]) == "xml") { 66 setProperty("playlist", config[item]); 67 } else if (_list.length > 0) { 63 68 _list.currentItem[item] = config[item]; 64 69 } else { … … 311 316 public function get plugins():String { return _plugins; } 312 317 public function set plugins(x:String):void { _plugins = x; } 318 319 /** Javascript player ready callback handlers **/ 320 public function get playerready():String { return _playerready; } 321 public function set playerready(x:String):void { _playerready = x; } 313 322 314 323 /** -
trunk/fl5/src/com/longtailvideo/jwplayer/model/Playlist.as
r359 r396 1 1 package com.longtailvideo.jwplayer.model { 2 2 import com.longtailvideo.jwplayer.events.GlobalEventDispatcher; 3 import com.longtailvideo.jwplayer.events.PlayerEvent; 3 4 import com.longtailvideo.jwplayer.events.PlaylistEvent; 4 5 import com.longtailvideo.jwplayer.parsers.IPlaylistParser; … … 90 91 list = newList; 91 92 index = newList.length > 0 ? 0 : -1; 92 93 dispatchEvent(new PlaylistEvent(PlaylistEvent.JWPLAYER_PLAYLIST_LOADED)); 93 94 if (index >= 0) { 95 dispatchEvent(new PlaylistEvent(PlaylistEvent.JWPLAYER_PLAYLIST_LOADED)); 96 dispatchEvent(new PlaylistEvent(PlaylistEvent.JWPLAYER_PLAYLIST_ITEM)); 97 } else { 98 dispatchEvent(new PlayerEvent(PlayerEvent.JWPLAYER_ERROR, "Loaded playlist is empty")); 99 } 100 94 101 return; 95 102 } … … 186 193 187 194 public function get currentItem():PlaylistItem { 188 return getItemAt(index);195 return index >= 0 ? getItemAt(index) : null; 189 196 } 190 197 -
trunk/fl5/src/com/longtailvideo/jwplayer/player/Player.as
r393 r396 6 6 import com.longtailvideo.jwplayer.model.Playlist; 7 7 import com.longtailvideo.jwplayer.plugins.IPlugin; 8 import com.longtailvideo.jwplayer.utils.Logger; 8 9 import com.longtailvideo.jwplayer.utils.RootReference; 9 10 import com.longtailvideo.jwplayer.view.ISkin; … … 52 53 } 53 54 model = new Model(); 54 view = new View(this );55 view = new View(this, model); 55 56 controller = new Controller(this, model, view); 56 57 … … 60 61 61 62 // Initialize V4 "simulator" singleton 62 new PlayerV4Emulation(this); 63 var emu:PlayerV4Emulation = new PlayerV4Emulation(this); 64 var jsAPI:JavascriptAPI = new JavascriptAPI(this); 65 66 Logger.output = Logger.CONSOLE; 63 67 64 68 controller.setupPlayer(); … … 70 74 */ 71 75 protected function forward(evt:PlayerEvent):void { 76 Logger.log(evt.toString(), evt.type); 72 77 dispatchEvent(evt); 73 78 } -
trunk/fl5/src/com/longtailvideo/jwplayer/player/PlayerV4Emulation.as
r395 r396 46 46 if (!initialized) { 47 47 initialized = true; 48 49 viewEventDispatcher = new EventDispatcher(); 50 modelEventDispatcher = new EventDispatcher(); 51 controllerEventDispatcher = new EventDispatcher(); 52 48 53 _player = player; 49 54 _player.addEventListener(PlayerEvent.JWPLAYER_READY, playerReady); 50 instance = new PlayerV4Emulation(player);55 instance = this; 51 56 } 52 57 } … … 71 76 var v:ControlBarComponent; 72 77 var c:Controller 78 79 _player.addEventListener(PlayerEvent.JWPLAYER_ERROR, errorHandler); 73 80 74 81 _player.addEventListener(MediaEvent.JWPLAYER_MEDIA_BUFFER, mediaBuffer); … … 93 100 _player.playlist.addEventListener(PlaylistEvent.JWPLAYER_PLAYLIST_ITEM, playlistItem); 94 101 _player.playlist.addEventListener(PlaylistEvent.JWPLAYER_PLAYLIST_LOADED, playlistLoad); 102 } 103 104 // Player Event Handlers 105 106 private function errorHandler(evt:PlayerEvent):void { 107 controllerEventDispatcher.dispatchEvent(new ControllerEvent(ControllerEvent.ERROR, {message:evt.message, id:id, client:client, version:version})); 95 108 } 96 109 -
trunk/fl5/src/com/longtailvideo/jwplayer/plugins/Display.as
r395 r396 1 1 package com.longtailvideo.jwplayer.plugins { 2 import com.longtailvideo.jwplayer.events.MediaEvent;3 import com.longtailvideo.jwplayer.events.PlayerStateEvent;4 import com.longtailvideo.jwplayer.events.PlaylistEvent;5 2 import com.longtailvideo.jwplayer.player.Player; 6 3 4 import flash.display.DisplayObject; 7 5 import flash.events.Event; 8 import flash.display.DisplayObject;9 6 10 7 -
trunk/fl5/src/com/longtailvideo/jwplayer/plugins/PluginConfig.as
r282 r396 5 5 private var _name:String; 6 6 7 public var width:Number;8 public var height:Number;9 10 7 public function PluginConfig(pluginName:String) { 11 8 this._name = pluginName; 9 this['width'] = 0; 10 this['height'] = 0; 12 11 } 13 12 -
trunk/fl5/src/com/longtailvideo/jwplayer/utils/Logger.as
r386 r396 48 48 Logger.object(message, type); 49 49 } 50 } ;50 } 51 51 52 52 … … 57 57 txt += ')'; 58 58 Logger.send(txt); 59 } ;59 } 60 60 61 61 … … 70 70 CONNECTION.addEventListener(StatusEvent.STATUS, Logger.status); 71 71 } 72 SharedObject.getLocal('com. jeroenwijering', '/').data['debug'] = put;72 SharedObject.getLocal('com.longtailvideo.jwplayer', '/').data['debug'] = put; 73 73 Logger._output = put; 74 } ;74 } 75 75 76 76 … … 82 82 public static function get output():String { 83 83 return Logger._output; 84 } ;84 } 85 85 86 86 … … 103 103 break; 104 104 } 105 } ;105 } 106 106 107 107 108 108 /** Manage the status call of localconnection. **/ 109 109 private static function status(evt:StatusEvent):void { 110 } ;110 } 111 111 } 112 112 } -
trunk/fl5/src/com/longtailvideo/jwplayer/view/V4ControlBarComponent.as
r395 r396 38 38 private var light:ColorTransform; 39 39 /** The actions for all controlbar buttons. **/ 40 private var BUTTONS:Object = {playButton: 'PLAY', pauseButton: 'PLAY', stopButton: 'STOP', prevButton: 'PREV', nextButton: 'NEXT', linkButton: 'LINK', fullscreenButton: 'FULLSCREEN', normalscreenButton: 'FULLSCREEN', muteButton: 'MUTE', unmuteButton: 'MUTE'}40 private var BUTTONS:Object; 41 41 /** The actions for all sliders **/ 42 42 private var SLIDERS:Object = {timeSlider: ViewEvent.JWPLAYER_VIEW_SEEK, volumeSlider: ViewEvent.JWPLAYER_VIEW_VOLUME} … … 49 49 public function V4ControlBarComponent(player:Player) { 50 50 super(player); 51 52 BUTTONS = { 53 playButton: ViewEvent.JWPLAYER_VIEW_PLAY, 54 pauseButton: ViewEvent.JWPLAYER_VIEW_PAUSE, 55 stopButton: ViewEvent.JWPLAYER_VIEW_STOP, 56 prevButton: ViewEvent.JWPLAYER_VIEW_PREV, 57 nextButton: ViewEvent.JWPLAYER_VIEW_NEXT, 58 linkButton: 'LINK', 59 fullscreenButton: ViewEvent.JWPLAYER_VIEW_FULLSCREEN, 60 normalscreenButton: ViewEvent.JWPLAYER_VIEW_FULLSCREEN, 61 muteButton: ViewEvent.JWPLAYER_VIEW_MUTE, 62 unmuteButton: ViewEvent.JWPLAYER_VIEW_MUTE 63 }; 64 51 65 var temp:Sprite = player.skin.getSWFSkin(); 52 66 skin = player.skin.getSWFSkin().getChildByName('controlbar') as Sprite; … … 158 172 private function clickHandler(evt:MouseEvent):void { 159 173 var act:String = BUTTONS[evt.target.name]; 174 var data:Object = null; 160 175 if (blocking != true || act == "FULLSCREEN" || act == "MUTE") { 161 dispatchEvent(new ViewEvent(act)); 176 switch (act) { 177 case ViewEvent.JWPLAYER_VIEW_PLAY: 178 case ViewEvent.JWPLAYER_VIEW_PAUSE: 179 data = Boolean(_player.state == PlayerState.IDLE || _player.state == PlayerState.PAUSED); 180 break; 181 case ViewEvent.JWPLAYER_VIEW_MUTE: 182 data = Boolean(!_player.config.mute); 183 break; 184 } 185 dispatchEvent(new ViewEvent(act, data)); 162 186 } 163 187 } … … 301 325 /** Clickhandler for all buttons. **/ 302 326 private function setButtons():void { 303 for (var btn:String in BUTTONS) {327 for (var btn:String in BUTTONS) { 304 328 if (getSkinElement("controlbar", btn)) { 305 329 (getSkinElement("controlbar", btn) as MovieClip).mouseChildren = false; … … 415 439 pos = evt.position; 416 440 } else if (player.playlist.length > 0) { 417 dur = player.playlist [player.config.item]['duration'];441 dur = player.playlist.getItemAt(player.config.item).duration; 418 442 pos = 0; 419 443 } … … 454 478 scrubber.icon.stopDrag(); 455 479 if (scrubber.name == 'timeSlider' && player.playlist) { 456 mpl = player.playlist [player.config.item]['duration'];480 mpl = player.playlist.getItemAt(player.config.item).duration; 457 481 } else if (scrubber.name == 'volumeSlider') { 458 482 mpl = 100; -
trunk/fl5/src/com/longtailvideo/jwplayer/view/View.as
r395 r396 1 1 package com.longtailvideo.jwplayer.view { 2 2 import com.longtailvideo.jwplayer.events.GlobalEventDispatcher; 3 import com.longtailvideo.jwplayer.events.MediaEvent; 4 import com.longtailvideo.jwplayer.events.PlayerEvent; 5 import com.longtailvideo.jwplayer.events.PlayerStateEvent; 3 6 import com.longtailvideo.jwplayer.events.PlaylistEvent; 7 import com.longtailvideo.jwplayer.model.Model; 4 8 import com.longtailvideo.jwplayer.player.Player; 9 import com.longtailvideo.jwplayer.player.PlayerState; 5 10 import com.longtailvideo.jwplayer.plugins.IPlugin; 6 11 import com.longtailvideo.jwplayer.plugins.PluginConfig; 7 12 import com.longtailvideo.jwplayer.utils.RootReference; 13 import com.longtailvideo.jwplayer.utils.Stretcher; 8 14 9 15 import flash.display.DisplayObject; 16 import flash.display.Loader; 10 17 import flash.display.MovieClip; 11 18 import flash.display.Stage; … … 14 21 import flash.events.ErrorEvent; 15 22 import flash.events.Event; 23 import flash.events.IOErrorEvent; 24 import flash.net.URLRequest; 16 25 17 26 18 27 public class View extends GlobalEventDispatcher { 19 28 private var _player:Player; 29 private var _model:Model; 20 30 private var _skin:ISkin; 21 31 private var _components:PlayerComponents; 22 32 private var _fullscreen:Boolean = false; 23 33 private var stage:Stage; 34 24 35 private var _backgroundLayer:MovieClip; 25 36 private var _mediaLayer:MovieClip; 37 private var _imageLayer:MovieClip; 26 38 private var _componentsLayer:MovieClip; 27 39 private var _pluginsLayer:MovieClip; 28 40 29 public function View(player:Player) { 41 private var _image:Loader; 42 43 public function View(player:Player, model:Model) { 30 44 _player = player; 45 _model = model; 46 31 47 setupLayers(); 32 48 RootReference.stage.scaleMode = StageScaleMode.NO_SCALE; … … 34 50 RootReference.stage.addEventListener(Event.FULLSCREEN, resizeHandler); 35 51 RootReference.stage.addEventListener(Event.RESIZE, resizeHandler); 36 player.addEventListener(PlaylistEvent.JWPLAYER_PLAYLIST_ITEM, playlistHandler); 37 } 38 39 40 private function playlistHandler(evt:PlaylistEvent):void { 41 42 } 52 _model.addEventListener(MediaEvent.JWPLAYER_MEDIA_LOADED, mediaLoaded); 53 _model.playlist.addEventListener(PlaylistEvent.JWPLAYER_PLAYLIST_ITEM, itemHandler); 54 _model.addEventListener(PlayerStateEvent.JWPLAYER_PLAYER_STATE, stateHandler); 55 } 56 43 57 44 58 private function setupLayers():void { … … 47 61 background.name = "background"; 48 62 _backgroundLayer.addChildAt(background, 0); 49 background.graphics.beginFill( 0,0.5);63 background.graphics.beginFill(_player.config.backcolor, 1); 50 64 background.graphics.drawRect(0,0,1,1); 51 65 background.graphics.endFill(); … … 53 67 _mediaLayer = setupLayer("media", 1); 54 68 55 _componentsLayer = setupLayer("components", 2); 56 57 _pluginsLayer = setupLayer("plugins", 3); 69 _imageLayer = setupLayer("image", 2); 70 _image = new Loader(); 71 _image.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, imageError); 72 _image.contentLoaderInfo.addEventListener(Event.COMPLETE, imageComplete); 73 74 _componentsLayer = setupLayer("components", 3); 75 _pluginsLayer = setupLayer("plugins", 4); 58 76 } 59 77 … … 69 87 70 88 private function resizeHandler(event:Event):void{ 71 _backgroundLayer.getChildByName("background").width = RootReference.stage.stageWidth; 72 _backgroundLayer.getChildByName("background").height = RootReference.stage.stageHeight; 73 74 _components.resize(RootReference.stage.stageWidth,RootReference.stage.stageHeight); 89 var width:Number = RootReference.stage.stageWidth; 90 var height:Number = RootReference.stage.stageHeight; 91 _backgroundLayer.getChildByName("background").width = width; 92 _backgroundLayer.getChildByName("background").height = height; 93 94 _components.resize(width, height); 95 96 _player.config.width = width; 97 _player.config.height = height; 98 99 if (_imageLayer.numChildren) { 100 Stretcher.stretch(_image, width, height, _player.config.stretching); 101 } 102 103 if (_mediaLayer.numChildren) { 104 _model.media.resize(width, height); 105 } 75 106 } 76 107 … … 86 117 private function setupComponents():void { 87 118 _components = new PlayerComponents(_player); 119 120 _components.controlbar.addGlobalListener(forward); 121 88 122 _componentsLayer.addChildAt(_components.display as MovieClip, 0); 89 123 _componentsLayer.addChildAt(_components.controlbar as MovieClip, 1); 124 125 126 90 127 //addToLayer(_playerComponents.controlbar as MovieClip, _components); 91 128 //addToStage(_playerComponents.dock, _player.config.width, _player.config.height); … … 102 139 } 103 140 104 141 /** Redraws the plugins **/ 105 142 public function redraw():void { 106 143 for (var i:Number=0; i < _pluginsLayer.numChildren; i++) { … … 162 199 return _pluginsLayer.getChildByName(name) as IPlugin; 163 200 } 201 202 private function mediaLoaded(evt:MediaEvent):void { 203 while (_mediaLayer.numChildren) { 204 _mediaLayer.removeChildAt(0); 205 } 206 _mediaLayer.addChild(_model.media.display); 207 _model.media.resize(_player.config.width, _player.config.height); 208 } 209 210 private function itemHandler(evt:PlaylistEvent):void { 211 if (_model.playlist.currentItem && _model.playlist.currentItem.image) { 212 loadImage(_model.playlist.currentItem.image); 213 } 214 } 215 216 private function loadImage(url:String):void { 217 _image.load(new URLRequest(url)); 218 } 219 220 private function imageComplete(evt:Event):void { 221 while (_imageLayer.numChildren) { _imageLayer.removeChildAt(0); } 222 _imageLayer.addChild(_image); 223 Stretcher.stretch(_image, _player.config.width, _player.config.height, _player.config.stretching); 224 } 225 226 private function imageError(evt:IOErrorEvent):void { 227 _image = null; 228 dispatchEvent(new PlayerEvent(PlayerEvent.JWPLAYER_ERROR, evt.text)); 229 } 230 231 private function stateHandler(evt:PlayerStateEvent):void { 232 switch (evt.newstate) { 233 case PlayerState.IDLE: 234 _mediaLayer.visible = false; 235 _imageLayer.visible = true; 236 break; 237 case PlayerState.PLAYING: 238 _mediaLayer.visible = true; 239 _imageLayer.visible = false; 240 break; 241 } 242 } 243 244 private function forward(evt:Event):void { 245 dispatchEvent(evt); 246 } 247 164 248 } 165 249 } -
trunk/fl5/test/tests/media/MediaProviderTestJig.as
r381 r396 74 74 75 75 private function loadHandler(evt:MediaEvent):void { 76 if (provider.display ()) {77 RootReference.stage.addChild(provider.display ());76 if (provider.display) { 77 RootReference.stage.addChild(provider.display); 78 78 } 79 79 eventHandler(evt); … … 158 158 159 159 protected function hideDisplay():void { 160 if (provider.display ()) {161 provider.display ().visible = false;160 if (provider.display) { 161 provider.display.visible = false; 162 162 } 163 163 }
Note: See TracChangeset
for help on using the changeset viewer.
