Updated DTSC analyser in compact mode to be more accurate and detect possible HLS-related issues, compact mode no longer a Pro-only feature.
This commit is contained in:
		
							parent
							
								
									f22d95b974
								
							
						
					
					
						commit
						4963aac941
					
				
					 1 changed files with 52 additions and 0 deletions
				
			
		|  | @ -24,6 +24,58 @@ namespace Analysers { | |||
|       return 1; | ||||
|     } | ||||
| 
 | ||||
|     if (conf.getBool("compact")){ | ||||
|       bool hasH264 = false; | ||||
|       bool hasAAC = false; | ||||
|       bool unstable_keys = false; | ||||
|       bool unstable_parts = false; | ||||
|       JSON::Value result; | ||||
|       std::stringstream issues; | ||||
|       for (std::map<unsigned int, DTSC::Track>::iterator it = F.getMeta().tracks.begin(); it != F.getMeta().tracks.end(); it++){ | ||||
|         JSON::Value track; | ||||
|         track["kbits"] = (long long)((double)it->second.bps * 8 / 1024); | ||||
|         track["codec"] = it->second.codec; | ||||
|         uint32_t shrtest_key = 0xFFFFFFFFul; | ||||
|         uint32_t longest_key = 0; | ||||
|         uint32_t shrtest_prt = 0xFFFFFFFFul; | ||||
|         uint32_t longest_prt = 0; | ||||
|         uint32_t shrtest_cnt = 0xFFFFFFFFul; | ||||
|         uint32_t longest_cnt = 0; | ||||
|         for (std::deque<DTSC::Key>::iterator k = it->second.keys.begin(); k != it->second.keys.end(); k++){ | ||||
|           if (!k->getLength()){continue;} | ||||
|           if (k->getLength() > longest_key){longest_key = k->getLength();} | ||||
|           if (k->getLength() < shrtest_key){shrtest_key = k->getLength();} | ||||
|           if (k->getParts() > longest_cnt){longest_cnt = k->getParts();} | ||||
|           if (k->getParts() < shrtest_cnt){shrtest_cnt = k->getParts();} | ||||
|           if ((k->getLength()/k->getParts()) > longest_prt){longest_prt = (k->getLength()/k->getParts());} | ||||
|           if ((k->getLength()/k->getParts()) < shrtest_prt){shrtest_prt = (k->getLength()/k->getParts());} | ||||
|         } | ||||
|         track["keys"]["min"] = (long long)shrtest_key; | ||||
|         track["keys"]["max"] = (long long)longest_key; | ||||
|         track["prts"]["min"] = (long long)shrtest_prt; | ||||
|         track["prts"]["max"] = (long long)longest_prt; | ||||
|         track["count"]["min"] = (long long)shrtest_cnt; | ||||
|         track["count"]["max"] = (long long)longest_cnt; | ||||
|         if (shrtest_key < longest_key / 2){issues << it->second.codec << " key duration unstable (variable key interval!) (" << shrtest_key << "-" << longest_key << ")! ";} | ||||
|         if ((shrtest_prt < longest_prt / 2) && (shrtest_cnt != longest_cnt)){issues << it->second.codec << " part duration unstable (bad connection!) (" << shrtest_prt << "-" << longest_prt << ")! ";} | ||||
|         if (it->second.codec == "AAC"){hasAAC = true;} | ||||
|         if (it->second.codec == "H264"){hasH264 = true;} | ||||
|         if (it->second.type=="video"){ | ||||
|           track["width"] = (long long)it->second.width; | ||||
|           track["height"] = (long long)it->second.height; | ||||
|           track["fpks"] = it->second.fpks; | ||||
|         } | ||||
|         result[it->second.getWritableIdentifier()] = track; | ||||
|       } | ||||
|       if (hasAAC || hasH264){ | ||||
|         if (!hasAAC){issues << "video-only! ";} | ||||
|         if (!hasH264){issues << "audio-only! ";} | ||||
|       } | ||||
|       if (issues.str().size()){result["issues"] = issues.str();} | ||||
|       std::cout << result.toString(); | ||||
|       return 0; | ||||
|     } | ||||
| 
 | ||||
|     if (F.getMeta().vod || F.getMeta().live){ | ||||
|       F.getMeta().toPrettyString(std::cout,0, 0x03); | ||||
|     } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Thulinma
						Thulinma