Ignore:
Timestamp:
02/19/09 10:12:29 (4 years ago)
Author:
jeroen
Message:

fixed bug in FP9.0.28 WIN that stalled the player

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/as3/com/jeroenwijering/models/HTTPModel.as

    r162 r166  
    66 
    77import com.jeroenwijering.events.*; 
    8 import com.jeroenwijering.models.BasicModel; 
     8import com.jeroenwijering.models.AbstractModel; 
    99import com.jeroenwijering.player.Model; 
    1010import com.jeroenwijering.utils.NetClient; 
     
    1616 
    1717 
    18 public class HTTPModel extends BasicModel { 
     18public class HTTPModel extends AbstractModel { 
    1919 
    2020 
     
    2727        /** Sound control object. **/ 
    2828        protected var transform:SoundTransform; 
     29        /** ID for the position interval. **/ 
     30        protected var interval:Number; 
    2931        /** Interval ID for the loading. **/ 
    3032        protected var loadinterval:Number; 
     
    120122        /** Load content. **/ 
    121123        override public function load(itm:Object):void { 
    122                 super.load(itm); 
     124                item = itm; 
    123125                position = timeoffset; 
    124126                if(stream.bytesLoaded + byteoffset < stream.bytesTotal) { 
     
    132134                clearInterval(loadinterval); 
    133135                loadinterval = setInterval(loadHandler,200); 
     136                model.sendEvent(ModelEvent.BUFFER,{percentage:0}); 
    134137                model.sendEvent(ModelEvent.STATE,{newstate:ModelStates.BUFFERING}); 
    135138        }; 
     
    187190        /** Pause playback. **/ 
    188191        override public function pause():void { 
    189                 super.pause(); 
    190192                stream.pause(); 
     193                clearInterval(interval); 
     194                model.sendEvent(ModelEvent.STATE,{newstate:ModelStates.PAUSED}); 
    191195        }; 
    192196 
     
    194198        /** Resume playing. **/ 
    195199        override public function play():void { 
    196                 super.play(); 
    197200                stream.resume(); 
     201                interval = setInterval(positionInterval,100); 
     202                model.sendEvent(ModelEvent.STATE,{newstate:ModelStates.PLAYING}); 
    198203        }; 
    199204 
    200205 
    201206        /** Interval for the position progress **/ 
    202         override protected function positionInterval():void { 
     207        protected function positionInterval():void { 
    203208                iterator++; 
    204209                if(iterator > 10) { 
     
    217222                        model.sendEvent(ModelEvent.STATE,{newstate:ModelStates.PLAYING}); 
    218223                } 
    219                 super.positionInterval(); 
     224                if(position < item['duration']) { 
     225                        model.sendEvent(ModelEvent.TIME,{position:position,duration:item['duration']}); 
     226                } else if (item['duration'] > 0 && model.config['respectduration']) { 
     227                        pause(); 
     228                        model.sendEvent(ModelEvent.STATE,{newstate:ModelStates.COMPLETED}); 
     229                } 
    220230        }; 
    221231 
     
    224234        override public function seek(pos:Number):void { 
    225235                var off:Number = getOffset(pos); 
     236                clearInterval(interval); 
    226237                if(off < byteoffset || off >= byteoffset+stream.bytesLoaded) { 
    227238                        timeoffset = position = getOffset(pos,true); 
     
    229240                        load(item); 
    230241                } else { 
    231                         super.seek(pos); 
     242                        position = pos; 
    232243                        if(mp4) { 
    233244                                stream.seek(getOffset(position-timeoffset,true)); 
     
    235246                                stream.seek(getOffset(position,true)); 
    236247                        } 
     248                        interval = setInterval(positionInterval,100); 
     249                        model.sendEvent(ModelEvent.STATE,{newstate:ModelStates.PLAYING}); 
    237250                } 
    238251        }; 
     
    259272        /** Destroy the HTTP stream. **/ 
    260273        override public function stop():void { 
    261                 super.stop(); 
    262274                if(stream.bytesLoaded+byteoffset < stream.bytesTotal) { 
    263275                        stream.close(); 
     
    265277                        stream.pause(); 
    266278                } 
     279                clearInterval(interval); 
    267280                clearInterval(loadinterval); 
    268                 byteoffset = timeoffset = 0; 
     281                byteoffset = timeoffset = position = 0; 
    269282                keyframes = undefined; 
    270283                meta = false; 
     284                model.sendEvent(ModelEvent.STATE,{newstate:ModelStates.IDLE}); 
    271285        }; 
    272286 
Note: See TracChangeset for help on using the changeset viewer.