source: branches/hds/src/com/longtailvideo/jwplayer/media/HDSMediaProvider.as @ 2275

Revision 2275, 6.0 KB checked in by alex, 11 months ago (diff)

finally fixed MBR display issue

Line 
1package com.longtailvideo.jwplayer.media
2{
3
4
5        import com.longtailvideo.jwplayer.events.MediaEvent;
6        import com.longtailvideo.jwplayer.model.PlayerConfig;
7        import com.longtailvideo.jwplayer.model.PlaylistItem;
8        import com.longtailvideo.jwplayer.player.PlayerState;
9        import com.longtailvideo.jwplayer.utils.Logger;
10        import com.longtailvideo.jwplayer.utils.RootReference;
11        import com.longtailvideo.jwplayer.utils.Stretcher;
12       
13        import flash.display.DisplayObjectContainer;
14        import flash.display.Loader;
15        import flash.display.MovieClip;
16        import flash.display.Stage;
17        import flash.events.ErrorEvent;
18        import flash.events.Event;
19        import flash.events.EventDispatcher;
20        import flash.external.ExternalInterface;
21        import flash.utils.clearInterval;
22        import flash.utils.setInterval;
23        import flash.utils.setTimeout;
24       
25        import org.osmf.containers.MediaContainer;
26        import org.osmf.elements.ImageElement;
27        import org.osmf.elements.VideoElement;
28        import org.osmf.events.BufferEvent;
29        import org.osmf.events.DynamicStreamEvent;
30        import org.osmf.events.MediaError;
31        import org.osmf.events.MediaErrorCodes;
32        import org.osmf.events.MediaErrorEvent;
33        import org.osmf.events.MediaPlayerStateChangeEvent;
34        import org.osmf.events.PlayEvent;
35        import org.osmf.events.TimeEvent;
36        import org.osmf.media.DefaultMediaFactory;
37        import org.osmf.media.MediaElement;
38        import org.osmf.media.MediaFactory;
39        import org.osmf.media.MediaPlayer;
40        import org.osmf.media.URLResource;
41        import org.osmf.net.DynamicStreamingResource;
42        import org.osmf.net.NetLoader;
43        import org.osmf.traits.LoadTrait;
44        import org.osmf.traits.MediaTraitType;
45        import org.osmf.traits.PlayState;
46        import org.osmf.utils.OSMFSettings;
47        import org.osmf.utils.URL;
48       
49       
50       
51        public class HDSMediaProvider extends MediaProvider {
52                /** OSMF player **/
53                protected var _osmfPlayer:MediaPlayer;
54                 /**OSMF media container**/
55                protected var _container:MediaContainer;
56                /**the media element--the subtype is determined by extension**/
57                protected var _element:MediaElement;
58                /** ID for the position interval. **/
59                protected var _positionInterval:Number;
60
61                public function HDSMediaProvider() {
62                        OSMFSettings.enableStageVideo = false;
63                        _osmfPlayer = new MediaPlayer();
64                        _container = new MediaContainer();
65                        _osmfPlayer.addEventListener(TimeEvent.COMPLETE, completeEvent);
66                        _osmfPlayer.addEventListener(MediaErrorEvent.MEDIA_ERROR,errorEvent);
67                        _osmfPlayer.addEventListener(BufferEvent.BUFFERING_CHANGE,bufferingChangeHandler);
68                        _osmfPlayer.addEventListener(TimeEvent.CURRENT_TIME_CHANGE,positionHandler);
69                        super("hds");
70                }
71                               
72                /**
73                 * Load a new playlist item
74                 * @param itm The playlistItem to load
75                 **/
76                public override function load(itm:PlaylistItem):void {
77                        _item = itm;
78
79                        var resource:URLResource = new URLResource( _item.file );
80
81                        var mediaFactory:DefaultMediaFactory = new DefaultMediaFactory();
82                        //media factor associates the extension with the right element type. If the extension isn't supported or recognized, returns null
83                        _element = mediaFactory.createMediaElement( resource );
84                        if (_element == null) {
85                                super.load(item);
86                                error("Unsupported File Type");
87                                return;
88                        }
89
90                        media = _container;
91                        _container.addMediaElement(_element);
92                        super.load(itm);
93                        _osmfPlayer.volume = config.mute ? 0 : config.volume;
94                        _osmfPlayer.media = _element;
95
96                }
97               
98
99                /**
100                 * handles the position of the status bar
101                 *
102                 **/
103                protected function positionHandler(event:TimeEvent):void {
104                       
105                        var pos:Number = Math.round(Math.min(_osmfPlayer.currentTime, Math.max(_osmfPlayer.duration, 0)) * 100) / 100;
106                        var timeRemaining:Number = _osmfPlayer.duration > 0 ? (_osmfPlayer.duration - _osmfPlayer.currentTime) : _osmfPlayer.currentTime;
107
108                        if (state != PlayerState.PLAYING) {
109                                return;
110                        }
111                       
112                        _position = pos;
113                       
114                        if (position < _osmfPlayer.duration) {
115                                if (position >= 0) {
116                                        sendMediaEvent(MediaEvent.JWPLAYER_MEDIA_TIME, {position: position, duration: _osmfPlayer.duration});
117                                }
118                        }
119                }
120               
121                /**
122                 * handles buffer change state. dispatches the needed events
123                 * @param the buffer change event
124                 **/
125                private function bufferingChangeHandler(event:BufferEvent): void
126                {
127                        if (_osmfPlayer.buffering) {
128                                sendBufferEvent(0);
129                                setState(PlayerState.BUFFERING);
130
131                        } else if (_osmfPlayer.playing) {
132                                _container.height = _osmfPlayer.displayObject.height;
133                                _container.width = _osmfPlayer.displayObject.width;
134                                dispatchEvent(new MediaEvent(MediaEvent.JWPLAYER_MEDIA_BUFFER_FULL));
135                                _item.duration = _osmfPlayer.duration;
136                                //fixes size issue
137
138                                resize(_width,_height);
139                        }
140                }
141               
142                /**
143                 * listen for end of file
144                 * @param the play state change event
145                 **/
146                private function completeEvent(event:TimeEvent):void {
147                        complete();
148                }
149               
150               
151                /**
152                 * listen for errors
153                 * @param the error event
154                 **/
155                private function errorEvent(event:MediaErrorEvent):void {
156                        Logger.log(event.error.detail);
157                        error("OSMF Playback Error");
158                }
159               
160                /** Resume playback of the item. **/
161                public override function play():void {
162                        if (_osmfPlayer.paused) {
163                                _osmfPlayer.play();
164                        }
165                        super.play();
166                }
167
168                /** Pause playback of the item. **/
169                public override function pause():void {
170                        if (_osmfPlayer.playing) {
171                                _osmfPlayer.pause();
172                        }
173                        super.pause();
174                }
175               
176       
177                /**
178                 * Seek to a certain position in the item.
179                 *
180                 * @param pos   The position in seconds.
181                 **/
182                /** Seek to a new position. **/
183                override public function seek(pos:Number):void {
184
185                        _osmfPlayer.seek(pos);
186                       
187                        //jw should restart on seek
188                        if (_osmfPlayer.paused) {
189                                play();
190                        }
191                }
192
193               
194                /** Stop playing and loading the item. **/
195                public override function stop():void {
196                        if (_osmfPlayer.playing) {
197                                _osmfPlayer.stop();
198                        }
199                        if (_element != null){
200                                _container.removeMediaElement(_element);
201                                _element = null;
202                        }
203                        super.stop();
204                }
205               
206               
207                /**
208                 * Change the playback volume of the item.
209                 *
210                 * @param vol   The new volume (0 to 100).
211                 * note that the osmf volume is [0 to 1]
212                 **/
213                public override function setVolume(vol:Number):void {
214                        _osmfPlayer.volume = vol/100;
215                        super.setVolume(vol);
216                }
217        }
218       
219}
Note: See TracBrowser for help on using the repository browser.