Ignore:
Timestamp:
10/23/09 15:38:14 (4 years ago)
Author:
zach
Message:
  • Added complete and errors functions and updated ImageMediaProvider, MediaProvider, RTMPMediaProvider, SoundMediaProvider, VideoMediaProvider, and YouTubeMediaProvider
  • Fixed YouTube stop / resume problem
  • Fixed RTMP stop / resume problem, buffering info problem, item duration problem
File:
1 edited

Legend:

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

    r501 r523  
    4545                } 
    4646                 
     47                 
    4748                /** Constructor; sets up the connection and display. **/ 
    4849                public override function initializeMediaProvider(cfg:PlayerConfig):void { 
     
    6869                /** Catch security errors. **/ 
    6970                protected function errorHandler(evt:ErrorEvent):void { 
    70                         stop(); 
    71                         sendMediaEvent(MediaEvent.JWPLAYER_MEDIA_ERROR, {message: evt.text}); 
     71                        error(evt.text); 
    7272                } 
    7373                 
     
    9292                        _item = itm; 
    9393                        _position = 0; 
    94                         _config.mute == true ? setVolume(0) : setVolume(_config.volume); 
     94                        setState(PlayerState.BUFFERING); 
     95                        sendBufferEvent(0); 
    9596                        if (getConfigProperty('loadbalance') as Boolean == true) { 
    9697                                smil = item.file; 
    9798                                loader.load(new URLRequest(smil)); 
    9899                        } else { 
    99                                 media = video; 
    100                                 connection.connect(item.streamer); 
     100                                finishLoad(); 
    101101                        } 
    102102                } 
     
    108108                        item.streamer = xml.children()[0].children()[0].@base.toString(); 
    109109                        item.file = xml.children()[1].children()[0].@src.toString(); 
    110                         media = video; 
     110                        finishLoad(); 
     111                } 
     112                 
     113                /** Finalizes the loading process **/ 
     114                private function finishLoad():void { 
     115                        if (!media){ 
     116                                media = video; 
     117                        } 
    111118                        connection.connect(item.streamer); 
    112                 } 
    113                  
     119                        _config.mute == true ? setVolume(0) : setVolume(_config.volume); 
     120                        sendMediaEvent(MediaEvent.JWPLAYER_MEDIA_LOADED); 
     121                }                
    114122                 
    115123                /** Get metadata information from netstream class. **/ 
     
    118126                                video.width = dat.width; 
    119127                                video.height = dat.height; 
     128                                resize(_width, _height); 
     129                        } 
     130                        if (dat.duration && item.duration < 0) { 
     131                                item.duration = dat.duration; 
    120132                        } 
    121133                        if (dat.type == 'complete') { 
    122                                 clearInterval(interval); 
    123                                 setState(PlayerState.IDLE); 
    124                                 sendMediaEvent(MediaEvent.JWPLAYER_MEDIA_COMPLETE); 
     134                                complete(); 
    125135                        } else if (dat.type == 'close') { 
    126136                                stop(); 
     
    156166                        var bfr:Number = Math.round(stream.bufferLength / stream.bufferTime * 100); 
    157167                        if (bfr < 95 && position < Math.abs(item.duration - stream.bufferTime - 1)) { 
    158                                 //TODO: Swapped 
    159168                                if (state == PlayerState.PLAYING && bfr < 20) { 
    160169                                        stream.pause(); 
     
    163172                                        sendMediaEvent(MediaEvent.JWPLAYER_MEDIA_META, {metadata: {bufferlength: _config.bufferlength}}); 
    164173                                } 
    165                                 sendBufferEvent(bfr); 
    166174                        } else if (bfr > 95 && state == PlayerState.BUFFERING) { 
    167                                 super.play(); 
    168                                 stream.resume(); 
     175                                sendMediaEvent(MediaEvent.JWPLAYER_MEDIA_BUFFER_FULL); 
    169176                                stream.bufferTime = _config.bufferlength * 4; 
    170177                                sendMediaEvent(MediaEvent.JWPLAYER_MEDIA_META, {metadata: {bufferlength: _config.bufferlength * 4}}); 
    171178                        } 
    172                         if (position < item.duration) { 
     179                         
     180                        var bufferPercent:Number = Math.round((_position + stream.bufferLength) / item.duration * 100); 
     181                        if (state == PlayerState.BUFFERING) { 
     182                                // Totally accurate, but it looks strange 
     183                                // sendBufferEvent(bufferPercent); 
     184                        } else if (position < item.duration) { 
    173185                                if (state == PlayerState.PLAYING && position >= 0) { 
     186                                        // Totally accurate, but it looks strange 
     187                                        // sendMediaEvent(MediaEvent.JWPLAYER_MEDIA_TIME, {position: position, duration: item.duration, bufferPercent:bufferPercent}); 
    174188                                        sendMediaEvent(MediaEvent.JWPLAYER_MEDIA_TIME, {position: position, duration: item.duration}); 
    175189                                } 
    176190                        } else if (!isNaN(position) && item.duration > 0) { 
    177                                 stream.pause(); 
    178                                 clearInterval(interval); 
    179                                 if (started && item.duration == 0) { 
    180                                         stop(); 
    181                                 } 
    182                                 setState(PlayerState.IDLE); 
    183                                 sendMediaEvent(MediaEvent.JWPLAYER_MEDIA_COMPLETE); 
     191                                complete(); 
    184192                        } 
    185193                } 
     
    209217                        interval = setInterval(positionInterval, 100); 
    210218                        stream.play(getID(item.file)); 
    211                         sendMediaEvent(MediaEvent.JWPLAYER_MEDIA_LOADED); 
    212                         _config.mute == true ? setVolume(0) : setVolume(_config.volume); 
    213                         setState(PlayerState.BUFFERING); 
    214                         sendBufferEvent(0); 
    215219                } 
    216220                 
     
    246250                                                } 
    247251                                        } catch (err:Error) { 
    248                                                 stop(); 
    249252                                                var msg:String = evt.info.code; 
    250253                                                if (evt.info['description']) { 
    251254                                                        msg = evt.info['description']; 
    252255                                                } 
    253                                                 sendMediaEvent(MediaEvent.JWPLAYER_MEDIA_ERROR, {message: msg}); 
     256                                                error(msg); 
    254257                                        } 
    255258                                        break; 
     
    260263                                                unpublished = false; 
    261264                                        } else { 
    262                                                 stop(); 
    263                                                 sendMediaEvent(MediaEvent.JWPLAYER_MEDIA_ERROR, {message: "Stream not found: " + item.file}); 
     265                                                error("Stream not found: " + item.file); 
    264266                                        } 
    265267                                        break; 
    266268                                case 'NetConnection.Connect.Failed': 
    267                                         stop(); 
    268                                         sendMediaEvent(MediaEvent.JWPLAYER_MEDIA_ERROR, {message: "Server not found: " + item.streamer}); 
     269                                        error("Server not found: " + item.streamer); 
    269270                                        break; 
    270271                                case 'NetStream.Play.UnpublishNotify': 
     
    278279                /** Destroy the stream. **/ 
    279280                override public function stop():void { 
    280                         if (stream) { 
     281                        if (stream && stream.time) { 
    281282                                stream.close(); 
    282283                        } 
Note: See TracChangeset for help on using the changeset viewer.