source: trunk/fl5/src/com/longtailvideo/jwplayer/model/Model.as @ 700

Revision 700, 6.6 KB checked in by zach, 3 years ago (diff)
  • Fixing JavaScript API bugs
  • Fixing v4 Emulation bugs
  • Updating PluginLoader to use 4 subfolder
Line 
1package com.longtailvideo.jwplayer.model {
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;
6        import com.longtailvideo.jwplayer.media.HTTPMediaProvider;
7        import com.longtailvideo.jwplayer.media.ImageMediaProvider;
8        import com.longtailvideo.jwplayer.media.MediaProvider;
9        import com.longtailvideo.jwplayer.media.RTMPMediaProvider;
10        import com.longtailvideo.jwplayer.media.SoundMediaProvider;
11        import com.longtailvideo.jwplayer.media.VideoMediaProvider;
12        import com.longtailvideo.jwplayer.media.YouTubeMediaProvider;
13        import com.longtailvideo.jwplayer.player.PlayerState;
14       
15        import flash.events.Event;
16
17        /**
18         * Fired when a portion of the current media has been loaded into the buffer.
19         *
20         * @eventType com.longtailvideo.jwplayer.events.MediaEvent.JWPLAYER_MEDIA_BUFFER
21         */
22        [Event(name="jwplayerMediaBuffer", type="com.longtailvideo.jwplayer.events.MediaEvent")]
23        /**
24         * Fired when the buffer is full.
25         *
26         * @eventType com.longtailvideo.jwplayer.events.MediaEvent.JWPLAYER_MEDIA_BUFFER_FULL
27         */
28        [Event(name="jwplayerMediaBufferFull", type="com.longtailvideo.jwplayer.events.MediaEvent")]
29        /**
30         * Fired if an error occurs in the course of media playback.
31         *
32         * @eventType com.longtailvideo.jwplayer.events.MediaEvent.JWPLAYER_MEDIA_ERROR
33         */
34        [Event(name="jwplayerMediaError", type="com.longtailvideo.jwplayer.events.MediaEvent")]
35        /**
36         * Fired after the MediaProvider has loaded an item into memory.
37         *
38         * @eventType com.longtailvideo.jwplayer.events.MediaEvent.JWPLAYER_MEDIA_LOADED
39         */
40        [Event(name="jwplayerMediaLoaded", type="com.longtailvideo.jwplayer.events.MediaEvent")]
41        /**
42         * Sent after a load() command has completed
43         *
44         * @eventType com.longtailvideo.jwplayer.events.MediaEvent.JWPLAYER_MEDIA_TIME
45         */
46        [Event(name="jwplayerMediaTime", type="com.longtailvideo.jwplayer.events.MediaEvent")]
47        /**
48         * Sends the position and duration of the currently playing media
49         *
50         * @eventType com.longtailvideo.jwplayer.events.MediaEvent.JWPLAYER_MEDIA_VOLUME
51         */
52        [Event(name="jwplayerMediaVolume", type="com.longtailvideo.jwplayer.events.MediaEvent")]
53        /**
54         * Fired when the currently playing media has completed its playback
55         *
56         * @eventType com.longtailvideo.jwplayer.events.MediaEvent.JWPLAYER_MEDIA_COMPLETE
57         */
58        [Event(name="jwplayerMediaComplete", type="com.longtailvideo.jwplayer.events.MediaEvent")]
59        /**
60         * Sent when the playback state has changed.
61         *
62         * @eventType com.longtailvideo.jwplayer.events.PlayerStateEvent.JWPLAYER_PLAYER_STATE
63         */
64        [Event(name="jwplayerPlayerState", type="com.longtailvideo.jwplayer.events.PlayerStateEvent")]
65        /**
66         * Fired if an error has occurred in the model.
67         *
68         * @eventType com.longtailvideo.jwplayer.events.PlayerEvent.JWPLAYER_ERROR
69         */
70        [Event(name="jwplayerError", type = "com.longtailvideo.jwplayer.events.PlayerEvent")]
71
72        /**
73         * @author Pablo Schklowsky
74         */
75        public class Model extends GlobalEventDispatcher {
76                private var _config:PlayerConfig;
77                private var _playlist:IPlaylist;
78
79                private var _fullscreen:Boolean = false;
80
81                private var _currentMedia:MediaProvider;
82
83                private var _mediaSources:Object;
84               
85                /** Constructor **/
86                public function Model() {
87                        _playlist = new Playlist();
88                        _playlist.addGlobalListener(forwardEvents);
89                        _config = new PlayerConfig();
90                        _mediaSources = {};
91                        //TODO: Set initial mute state based on user configuration
92                }
93
94                /** The player config object **/
95                public function get config():PlayerConfig {
96                        return _config;
97                }
98
99                public function set config(conf:PlayerConfig):void {
100                        _config = conf;
101                }
102
103                /** The currently loaded MediaProvider **/
104                public function get media():MediaProvider {
105                        return _currentMedia;
106                }
107
108                /**
109                 * The current player state
110                 */
111                public function get state():String {
112                        return _currentMedia ? _currentMedia.state : PlayerState.IDLE;
113                }
114
115                /**
116                 * The loaded playlist
117                 */
118                public function get playlist():IPlaylist {
119                        return _playlist;
120                }
121
122                /** The current fullscreen state of the player **/
123                public function get fullscreen():Boolean {
124                        return _config.fullscreen;
125                }
126
127                public function set fullscreen(b:Boolean):void {
128                        _config.fullscreen = b;
129                }
130
131                /** The current mute state of the player **/
132                public function get mute():Boolean {
133                        return _config.mute;
134                }
135
136                public function set mute(b:Boolean):void {
137                        _config.mute = b;
138                        _currentMedia.mute(b);
139                }
140
141                public function setupMediaProviders():void {
142                        setMediaProvider('default', new MediaProvider('default'));
143                        setMediaProvider('video', new VideoMediaProvider());
144                        setMediaProvider('http', new HTTPMediaProvider());
145                        setMediaProvider('rtmp', new RTMPMediaProvider());
146                        setMediaProvider('sound', new SoundMediaProvider());
147                        setMediaProvider('image', new ImageMediaProvider());
148                        setMediaProvider('youtube', new YouTubeMediaProvider());
149
150                        setActiveMediaProvider('default');
151                }
152
153                /**
154                 * Whether the Model has a MediaProvider handler for a given type.
155                 */
156                public function hasMediaProvider(type:String):Boolean {
157                        return (_mediaSources[url2type(type)] is MediaProvider);
158                }
159
160                /**
161                 * Add a MediaProvider to the list of available sources.
162                 */
163                public function setMediaProvider(type:String, provider:MediaProvider):void {
164                        if (!hasMediaProvider(type)) {
165                                _mediaSources[url2type(type)] = provider;
166                                provider.initializeMediaProvider(config);
167                        }
168                }
169
170                public function setActiveMediaProvider(type:String):Boolean {
171                        if (!hasMediaProvider(type))
172                                type = "video";
173
174                        var newMedia:MediaProvider = _mediaSources[url2type(type)] as MediaProvider;
175
176                        if (_currentMedia != newMedia) {
177                                if (_currentMedia) {
178                                        _currentMedia.stop();
179                                        _currentMedia.removeGlobalListener(forwardEvents);
180                                }
181                                newMedia.addGlobalListener(forwardEvents);
182                                _currentMedia = newMedia;
183                        }
184
185                        return true;
186                }
187
188               
189                private function forwardEvents(evt:Event):void {
190                        if (evt is PlayerEvent) {
191                                if (evt.type == MediaEvent.JWPLAYER_MEDIA_ERROR) {
192                                        // Translate media error into player error.
193                                        dispatchEvent(new PlayerEvent(PlayerEvent.JWPLAYER_ERROR, (evt as MediaEvent).message));
194                                } else {
195                                        dispatchEvent(evt);
196                                }
197                        }
198                }
199
200                /** e.g. http://providers.longtailvideo.com/5/myProvider.swf --> myprovider **/
201                private function url2type(type:String):String {
202                        return type.substring(type.lastIndexOf("/") + 1, type.length).replace(".swf", "").toLowerCase();
203                }
204
205        }
206}
Note: See TracBrowser for help on using the repository browser.