docs: function getSpecLink(v_info,str_map,adp_map){
  
  	var links = [];
  
  	if(v_info.dashmpd){
  
  		var specurl = decodeURIComponent(v_info.dashmpd);
  
  		// remove noise
  		var q = specurl.replace(/https?:\/\/manifest.googlevideo.com\/api\/manifest\/dash\//, '');
  
  		// prepare to format
  		var sq =  q.split('/'),
  			stp = [];
  
  		// format key=value 
  		for (var i = 0; i < sq.length; i+=2) {
  			// if(sq[i + 1].indexOf('%')!==-1)
  			// 	sq[i + 1] = decodeURIComponent(sq[i + 1]);
  			
  			if(sq[i]=='sig') sq[i] = "signature";
  			
  			if(sq[i]=='s'){
  				sq[i] = "signature";
  				sq[i + 1] = decodeURIComponent(sq[i + 1]);
  			}
  			stp.push(sq[i]+'='+sq[i + 1]);
  		}
  
  		// rebulid url
  		q = stp.join('&');
  
  		// if loss params
  		if(q.toLowerCase().indexOf('ratebypass')===-1) q+='&ratebypass=yes';
  
  		// get base url 
  		var base_url = "";
  		for (var i = 0; i < str_map.length; i++) {
  			var sp_url = str_map[i].url.split('?');
  			if(sp_url[0]){
  				base_url = sp_url[0];
  				break;
  			}
  		}
  		// get str, adp map's  Quality params
  		var str_fmt = [], adp_fmt = [];
  		for (var i = 0; i < str_map.length; i++) str_fmt[str_map[i].itag] = true;
  		for (var i = 0; i < adp_map.length; i++) adp_fmt[adp_map[i].itag] = true;
  		
  		
  		// supplement new link
  		if(adp_fmt[135] && str_fmt[35]=== void 0){
  			links.push({
  				itag : 35,
  				url : base_url+"?"+q+"&itag=35"
  			});
  		if((adp_fmt[137]||adp_fmt[264]) && str_fmt[37]=== void 0)
  			links.push({
  				itag : 37,
  				url : base_url+"?"+q+"&itag=37"
  			});
  		if(adp_fmt[138] && str_fmt[38]=== void 0)
  			links.push({
  				itag : 38,
  				url : base_url+"?"+q+"&itag=38"
  			});
  		}
  	}
  	return links;
  }