1. JavaScript / Говнокод #13571

    +150

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    this.getMediaFileWithMaxBitrate = function(streamIndex, maxBitrate) {
    		var streamItem = this.playlist[streamIndex];
    		var urls = streamItem.urls;
    		var resultBitrate = 0;
    		var highestBitrate = 2000;
    		var lowestBitrate = 800;
    		//var resultUrl = urls[0].url;
    		var resultUrl = "";
    		//v2.1
    		// Util.log("##########################getMediaFileWithMaxBitrate ####################");
    		// Util.log("take the highest of the bitrate range from"
            //          +lowestBitrate+" to "+highestBitrate+" Mbps else");
    		for (var i = 0; i < urls.length; i++) {
    			if(urls[i].type == "video/mp4"){
    				if (urls[i].bitrate >= lowestBitrate &&
                        urls[i].bitrate <= highestBitrate && urls[i].bitrate > resultBitrate) {
    					resultUrl = urls[i].url;
    					resultBitrate = urls[i].bitrate;
    					// Util.log(">> " + urls[i].bitrate + " " + urls[i].url);
    				}
    			}
    		}
    		if (resultUrl == "") {
    			// Util.log("If there is no MediaFile with type �video/mp4�" +
    			// "within this range ("+lowestBitrate+"-"+highestBitrate+
                //          "Mbps) take the next highest MediaFile");
    			for (var i = 0; i < urls.length; i++) {
    				if (urls[i].type == "video/mp4") {
    					if (urls[i].bitrate > highestBitrate &&
                            (urls[i].bitrate < resultBitrate || resultBitrate == 0)) {
    						resultUrl = urls[i].url;
    						resultBitrate = urls[i].bitrate;
    						// Util.log(">> " + urls[i].bitrate + " " + urls[i].url);
    					}
    				}
    			}
    		}
    		if (resultUrl == "") {
    			// Util.log("If there is no higher MedieFile with type" +
                //          "�video/mp4� take the next lowest MedieFile");
    			for (var i = 0; i < urls.length; i++) {
    				if(urls[i].type == "video/mp4"){
    					if (urls[i].bitrate < lowestBitrate && urls[i].bitrate > resultBitrate) {
    						resultUrl = urls[i].url;
    						resultBitrate = urls[i].bitrate;
    						//Util.log(">> " + urls[i].bitrate + " " + urls[i].url);
    					}
    				}
    			}
    		}
    		if (resultUrl == "" && urls[0].type == "video/mp4") {
    			resultUrl = urls[0].url;
    		}
    		// Util.log(">>>>>>>>>>>>>> AdController.getMediaFileWithMaxBitrate " +
            //          maxBitrate + " " + resultBitrate + " " + resultUrl);
    		return resultUrl;
    	};

    Замечательный алгоритм поиска видео более-менее соответствующего критерию "битрейт в диапазоне [а, б], либо первый в (б, *), либо последний в (*, а)".

    Запостил: wvxvw, 08 Августа 2013

    Комментарии (7) RSS

    • this.getMediaFileWithMaxBitrate = function(streamIndex, maxBitrate) {
      	var urls = this.playlist[streamIndex].urls, resultBitrates = [],
      	    highestBitrate = 2000, lowestBitrate = 800,
              currentBitrate, resultUrl, dummy = { bitrate: 0 };
          
          resultBitrates.push(dummy, dummy, dummy);
          
      	for (var i = 0; i < urls.length; i++) {
      		if (urls[i].type == "video/mp4") {
                  currentBitrate = urls[i].bitrate;
                  if (currentBitrate <= lowestBitrate &&
                      currentBitrate > resultBitrates[0].bitrate) {
                      resultBitrates[0] = ursl[i];
                  } else if (currentBitrate <= highestBitrate &&
                             currentBitrate > resultBitrates[1].bitrate) {
                      resultBitrates[1] = ursl[i];
                  } else if (currentBitrate < resultBitrates[2].bitrate) {
                      resultBitrates[2] = ursl[i];
                  }
      		}
      	}
      	return resultBitrates[1].url || resultBitrates[2].url || resultBitrates[0].url;
      };

      Это если интересно, во что переделалось.
      Ответить
      • Хех, врезультате дальнейших расследований, я понял, что maxBitrate вообще не используется. Да и выбирать, обычно, не из чего, вобщем, заменил на:
        var bitrates = [maxBitrate].concat(urls).sort();
        var index = bitrates.indexOf(maxBitrate);
        return (index > 0) ? bitrates[index - 1] : bitrates[index + 1];
        Ответить
      • А чего табы с пробелами в перемешку?
        Ответить
        • emacs потому что
          Ответить
          • А еще "�video/mp4�" ;) Не совсем удачно скопипастилось.
            Ответить
            • Это, скорее всего, результат работы Х-кода. Этот замечательный редактор, как и студия, имеет привычку вставлять символы не в кодировке документа. Вот яблочный код, как правило, отличается такими кавычками. Еще так же выглядит код написаный в МС Ворд.
              Ответить
        • Исходник уже был с разнообразными пробелами / табами. Я полностью не менял.
          Ответить

    Добавить комментарий