- Timestamp:
- 05/30/12 06:05:55 (12 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/jw6/src/flash/com/longtailvideo/jwplayer/model/PlaylistItem.as
r2203 r2217 24 24 protected var _streamer:String = ""; 25 25 26 protected var _currentLevel:Number = -1; 26 protected var _type:String = null; 27 protected var _currentLevel:Number = 0; 27 28 protected var _levels:Array = []; 28 29 … … 58 59 for each (var level:Object in levels) { 59 60 if (level['file']) { 60 var newLevel:PlaylistItemLevel = new PlaylistItemLevel(level['file'], 61 var newLevel:PlaylistItemLevel = new PlaylistItemLevel(level['file'], 62 level['type'], 61 63 Number(level['bitrate']), 62 64 Number(level['width']), … … 65 67 switch(otherProp) { 66 68 case "file": 69 case "type": 67 70 case "bitrate": 68 71 case "width": … … 125 128 public function addLevel(newLevel:PlaylistItemLevel):void { 126 129 if (validExtension(newLevel)) { 127 if (_currentLevel < 0) _currentLevel = 0; 130 // Removing playlist level sorting 131 /* if (_currentLevel < 0) _currentLevel = 0; 128 132 for (var i:Number = 0; i < _levels.length; i++) { 129 133 var level:PlaylistItemLevel = _levels[i] as PlaylistItemLevel; … … 136 140 } 137 141 } 142 */ 138 143 _levels.push(newLevel); 139 144 } … … 160 165 **/ 161 166 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; 163 182 } 164 183 165 184 public function get currentLevel():Number { 166 185 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;177 186 } 178 187 … … 215 224 private function levelType(level:Object):String { 216 225 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 } 237 235 } 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; 238 291 } 239 292 return null; … … 244 297 return _provider; 245 298 } else if (_levels.length > 0) { 246 return levelType(_levels[_currentLevel]);299 return typeMap(levelType(_levels[_currentLevel])); 247 300 } 248 301 return null; … … 253 306 254 307 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; 259 309 } 260 310
Note: See TracChangeset
for help on using the changeset viewer.
