Changeset 957


Ignore:
Timestamp:
04/26/10 20:06:35 (3 years ago)
Author:
pablo
Message:

Clean up the logic surrounding when the Video and HTTP MediaProviders should go into and out of the buffering state.

Location:
trunk/fl5
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/fl5/src/com/longtailvideo/jwplayer/media/HTTPMediaProvider.as

    r956 r957  
    236236                /** Resume playing. **/ 
    237237                override public function play():void { 
    238                         _stream.resume(); 
    239238                        if (!_positionInterval) { 
    240239                                _positionInterval = setInterval(positionInterval, 100); 
    241240                        } 
    242                         super.play(); 
    243                 } 
    244  
     241                        if (!shouldBuffer) { 
     242                                _stream.resume(); 
     243                                super.play(); 
     244                        } else { 
     245                                setState(PlayerState.BUFFERING); 
     246                        } 
     247                } 
     248 
     249                /** Calculate how much of the buffer time has been loaded **/ 
     250                protected function get bufferFill():Number { 
     251                        return _stream.bufferTime > 0 ? Math.floor(_stream.bufferLength / _stream.bufferTime * 100) : 0; 
     252                } 
     253                 
     254                /** Figure out whether or not to buffer, based on the amount loaded **/ 
     255                protected function get shouldBuffer():Boolean { 
     256                        return (bufferFill < 50); 
     257                } 
     258                 
     259                /** Returns true if the required buffer time has been loaded **/ 
     260                protected function get bufferFull():Boolean { 
     261                        var streamTime:Number = Math.min(_stream.time, item.duration); 
     262                        var bufferTime:Number = _stream.bufferTime < (item.duration - streamTime) ? _stream.bufferTime : Math.floor(Math.abs(item.duration - streamTime)); 
     263                        return (bufferFill > 95 && state == PlayerState.BUFFERING && _bufferFull == false && bufferTime > 0); 
     264                } 
    245265 
    246266                /** Interval for the position progress **/ 
    247267                protected function positionInterval():void { 
    248                         _position = Math.round(_stream.time * 10) / 10; 
    249                         var percentoffset:Number; 
    250                         if (_mp4) { 
    251                                 _position += _timeoffset; 
    252                         } 
    253                          
    254                         var bufferPercent:Number; 
    255                         var bufferFill:Number; 
     268                        var percentoffset:Number = 0; 
     269                        var bufferPercent:Number = 0; 
     270 
    256271                        if (item.duration > 0 && _stream && _stream.bytesTotal > 0) { 
    257272                                percentoffset =  Math.round(_timeoffset /  item.duration * 100); 
    258273                                bufferPercent = (_stream.bytesLoaded / _stream.bytesTotal) * (1 - _timeoffset / item.duration) * 100; 
    259                                 var bufferTime:Number = _stream.bufferTime < (item.duration - position) ? _stream.bufferTime : Math.round(item.duration - position); 
    260                                 bufferFill = _stream.bufferTime == 0 ? 0 : Math.ceil(_stream.bufferLength / bufferTime * 100); 
    261                         } else { 
    262                                 percentoffset = 0; 
    263                                 bufferPercent = 0; 
    264                                 bufferFill = _stream.bufferLength/_stream.bufferTime * 100; 
    265                         } 
    266          
     274                        } 
     275                         
     276                        _position = Math.round(_stream.time * 10) / 10; 
     277                        if (_mp4) { 
     278                                _position += _timeoffset; 
     279                        } 
     280 
    267281                        if (!_bandwidthChecked && _stream.bytesLoaded > 0 && _stream.bytesLoaded < _stream.bytesTotal) { 
    268282                                _bandwidthChecked = true; 
     
    271285                        } 
    272286                         
    273                         if (bufferFill < 25 && state == PlayerState.PLAYING) { 
     287                        if (shouldBuffer && state == PlayerState.PLAYING) { 
    274288                                _bufferFull = false; 
    275289                                _stream.pause(); 
    276290                                setState(PlayerState.BUFFERING); 
    277                         } else if (bufferFill > 95 && state == PlayerState.BUFFERING && _bufferFull == false) { 
     291                        } else if (bufferFull) { 
    278292                                _bufferFull = true; 
    279293                                sendMediaEvent(MediaEvent.JWPLAYER_MEDIA_BUFFER_FULL); 
  • trunk/fl5/src/com/longtailvideo/jwplayer/media/VideoMediaProvider.as

    r956 r957  
    137137                                _positionInterval = setInterval(positionHandler, 100); 
    138138                        } 
    139                         _stream.resume(); 
    140                         super.play(); 
    141                 } 
    142  
     139                        // Don't resume the stream if it should continue buffering 
     140                        if (!shouldBuffer) { 
     141                                _stream.resume(); 
     142                                super.play(); 
     143                        } else { 
     144                                setState(PlayerState.BUFFERING); 
     145                        } 
     146                } 
     147                 
     148                /** Calculate how much of the buffer time has been loaded **/ 
     149                protected function get bufferFill():Number { 
     150                        return _stream.bufferTime > 0 ? Math.floor(_stream.bufferLength / _stream.bufferTime * 100) : 0; 
     151                } 
     152                 
     153                /** Figure out whether or not to buffer, based on the amount loaded **/ 
     154                protected function get shouldBuffer():Boolean { 
     155                        return (bufferFill < 50); 
     156                } 
     157                 
     158                /** Returns true if the required buffer time has been loaded **/ 
     159                protected function get bufferFull():Boolean { 
     160                        var streamTime:Number = Math.min(_stream.time, item.duration); 
     161                        var bufferTime:Number = _stream.bufferTime < (item.duration - streamTime) ? _stream.bufferTime : Math.floor(Math.abs(item.duration - streamTime)); 
     162                        return (bufferFill > 95 && state == PlayerState.BUFFERING && _bufferFull == false && bufferTime > 0); 
     163                } 
    143164 
    144165                /** Interval for the position progress **/ 
     
    149170                        } 
    150171                         
    151                         var _streamTime:Number = Math.min(_stream.time, item.duration); 
    152                         var bufferPercent:Number = _stream.bytesTotal > 0 ? _stream.bytesLoaded / _stream.bytesTotal * 100 : 0; 
    153                         var bufferTime:Number = _stream.bufferTime < (item.duration - _streamTime) ? _stream.bufferTime : Math.floor(Math.abs(item.duration - _streamTime)); 
    154                         var bufferFill:Number = bufferTime == 0 ? 100 : Math.floor(_stream.bufferLength / bufferTime * 100); 
    155  
    156                          
    157                         if (bufferFill < 25 && state == PlayerState.PLAYING) { 
     172                        if (shouldBuffer && state == PlayerState.PLAYING) { 
    158173                                _bufferFull = false; 
    159174                                _stream.pause(); 
    160175                                setState(PlayerState.BUFFERING); 
    161                         } else if (bufferFill > 95 && state == PlayerState.BUFFERING && _bufferFull == false && bufferTime > 0) { 
     176                        } else if (bufferFull) { 
    162177                                _bufferFull = true; 
    163178                                sendMediaEvent(MediaEvent.JWPLAYER_MEDIA_BUFFER_FULL); 
    164179                        } 
    165180 
     181                        var bufferPercent:Number = _stream.bytesTotal > 0 ? _stream.bytesLoaded / _stream.bytesTotal * 100 : 0; 
     182                         
    166183                        if (!_bufferingComplete) { 
    167184                                if (bufferPercent == 100 && _bufferingComplete == false) { 
     
    176193                        } 
    177194 
    178                         _position = Math.round(_streamTime * 10) / 10; 
     195                        _position = Math.round(_stream.time * 10) / 10; 
    179196                         
    180197                        if (position < item.duration) { 
  • trunk/fl5/src/com/longtailvideo/jwplayer/player/PlayerVersion.as

    r956 r957  
    33         
    44        public class PlayerVersion { 
    5                 protected static var _version:String = "5.2.956"; 
     5                protected static var _version:String = "5.2.957"; 
    66                 
    77                public static function get version():String { 
Note: See TracChangeset for help on using the changeset viewer.