Ignore:
Timestamp:
05/30/12 06:05:55 (12 months ago)
Author:
pablo
Message:
  • Implements quality API
  • Implements new error states
  • removes CDN aliases
  • removes shuffle option
  • removes alternate playlist parsers (ASX, ATOM, XSPF, SMIL)
  • Addresses a cross-site scripting vulnerability (javajavascript:script:alert('xss'))
  • Embedder now has minimum flash version requirement (10.0)
  • JS Plugins no longer have to have a public resize function to have the div displayed
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/jw6/src/flash/com/longtailvideo/jwplayer/model/PlaylistItem.as

    r2203 r2217  
    2424                protected var _streamer:String          = ""; 
    2525                 
    26                 protected var _currentLevel:Number      = -1; 
     26                protected var _type:String                      = null; 
     27                protected var _currentLevel:Number      = 0; 
    2728                protected var _levels:Array                     = []; 
    2829                 
     
    5859                                        for each (var level:Object in levels) { 
    5960                                                if (level['file']) { 
    60                                                         var newLevel:PlaylistItemLevel = new PlaylistItemLevel(level['file'],  
     61                                                        var newLevel:PlaylistItemLevel = new PlaylistItemLevel(level['file'], 
     62                                                                level['type'], 
    6163                                                                Number(level['bitrate']),  
    6264                                                                Number(level['width']),  
     
    6567                                                                switch(otherProp) { 
    6668                                                                        case "file": 
     69                                                                        case "type": 
    6770                                                                        case "bitrate": 
    6871                                                                        case "width": 
     
    125128                public function addLevel(newLevel:PlaylistItemLevel):void { 
    126129                        if (validExtension(newLevel)) { 
    127                                 if (_currentLevel < 0) _currentLevel = 0; 
     130                                // Removing playlist level sorting 
     131/*                              if (_currentLevel < 0) _currentLevel = 0; 
    128132                                for (var i:Number = 0; i < _levels.length; i++) { 
    129133                                        var level:PlaylistItemLevel = _levels[i] as PlaylistItemLevel; 
     
    136140                                        } 
    137141                                } 
     142*/ 
    138143                                _levels.push(newLevel); 
    139144                        } 
     
    160165                 **/ 
    161166                protected function validExtension(level:Object):Boolean { 
    162                         return levelType(level); 
     167                        if (_type) { 
     168                                return (typeMap(levelType(level)) == typeMap(_type)); 
     169                        } else { 
     170                                var lType = levelType(level); 
     171                                if (lType) { 
     172                                        if (typeMap(lType)) { 
     173                                                _type = lType; 
     174                                                return true; 
     175                                        } 
     176                                } else { 
     177                                        // No valid extension, but if provider is set manually, try to play using that provider. 
     178                                        if (_provider) return true; 
     179                                } 
     180                        } 
     181                        return false; 
    163182                } 
    164183 
    165184                public function get currentLevel():Number { 
    166185                        return _currentLevel; 
    167                 } 
    168                  
    169                 public function getLevel(bitrate:Number, width:Number):Number { 
    170                         for (var i:Number=0; i < _levels.length; i++) { 
    171                                 var level:PlaylistItemLevel = _levels[i] as PlaylistItemLevel; 
    172                                 if ((isNaN(level.bitrate) || bitrate >= level.bitrate * 1.5) && (isNaN(level.width) || width >= level.width * 0.67) && !level.blacklisted) { 
    173                                         return i; 
    174                                 } 
    175                         } 
    176                         return _levels.length - 1; 
    177186                } 
    178187                 
     
    215224                private function levelType(level:Object):String { 
    216225                        if (level) { 
    217                                 var type:String = level.type ? level.type : Strings.extension(level.file); 
    218                                 switch (type) { 
    219                                         case "flv":  
    220                                         case "f4v":  
    221                                         case "mov":  
    222                                         case "m4a":  
    223                                         case "m4v":  
    224                                         case "mp4":  
    225                                         case "aac":  
    226                                                 return "video"; 
    227                                                 break; 
    228                                         case "mp3":  
    229                                                 return "sound"; 
    230                                                 break; 
    231                                         case  "smil": 
    232                                                 return "rtmp"; 
    233                                                 break; 
    234                                         case "m3u8":  
    235                                                 return "hls"; 
    236                                                 break; 
     226                                if (level.type) return level.type; 
     227                                else { 
     228                                        if (level.streamer) return "rtmp"; 
     229                                        else if (level.file) { 
     230                                                if (Strings.isYouTube(level.file)) return "youtube"; 
     231                                                else { 
     232                                                        return extensionMap(Strings.extension(level.file)); 
     233                                                } 
     234                                        } 
    237235                                } 
     236                        } 
     237                        return null; 
     238                } 
     239                 
     240                private function extensionMap(extension:String):String { 
     241                        switch (extension) { 
     242                                case "flv":  
     243                                        return "flv"; 
     244                                case "f4v": 
     245                                case "m4v":  
     246                                case "mp4": 
     247                                        return "mp4"; 
     248                                case "m4a":  
     249                                case "aac": 
     250                                case "f4a": 
     251                                        return "aac"; 
     252                                        break; 
     253                                case "mp3": 
     254                                        return "mp3"; 
     255                                        break; 
     256                                case "smil": 
     257                                        return "rtmp"; 
     258                                        break; 
     259                                case "m3u8":  
     260                                        return "hls"; 
     261                                        break; 
     262                                case "webm": 
     263                                        return "webm"; 
     264                                        break; 
     265                                case "ogg": 
     266                                case "oga": 
     267                                        return "vorbis"; 
     268                                        break; 
     269                        } 
     270                        return null; 
     271                } 
     272                 
     273                private function typeMap(type:String):String { 
     274                        switch (type) { 
     275                                case "flv": 
     276                                case "mp4": 
     277                                case "aac": 
     278                                case "video":  
     279                                        return "video"; 
     280                                        break; 
     281                                case "mp3":  
     282                                case "sound":  
     283                                        return "sound"; 
     284                                        break; 
     285                                case "rtmp": 
     286                                        return "rtmp"; 
     287                                        break; 
     288                                case "hls":  
     289                                        return "hls"; 
     290                                        break; 
    238291                        } 
    239292                        return null; 
     
    244297                                return _provider; 
    245298                        } else if (_levels.length > 0) { 
    246                                 return levelType(_levels[_currentLevel]);  
     299                                return typeMap(levelType(_levels[_currentLevel]));  
    247300                        } 
    248301                        return null; 
     
    253306                 
    254307                public function get type():String { 
    255                         if (_levels.length > 0) { 
    256                                 var level:Object = _levels[_currentLevel];  
    257                                 return level.type ? level.type : Strings.extension(level.file); 
    258                         } else return null; 
     308                        return _type; 
    259309                } 
    260310                 
Note: See TracChangeset for help on using the changeset viewer.