Removed old MistInfo binary and dependencies on it.
This commit is contained in:
		
							parent
							
								
									7c0db4531d
								
							
						
					
					
						commit
						184f7ad6c8
					
				
					 3 changed files with 28 additions and 170 deletions
				
			
		|  | @ -203,16 +203,6 @@ makeAnalyser(DTSC dtsc) | ||||||
| makeAnalyser(AMF amf) | makeAnalyser(AMF amf) | ||||||
| makeAnalyser(MP4 mp4) | makeAnalyser(MP4 mp4) | ||||||
| makeAnalyser(OGG ogg) | makeAnalyser(OGG ogg) | ||||||
| add_executable(MistInfo |  | ||||||
|   src/analysers/info.cpp |  | ||||||
| ) |  | ||||||
| target_link_libraries(MistInfo  |  | ||||||
|   mist  |  | ||||||
| ) |  | ||||||
| install(  |  | ||||||
|   TARGETS MistInfo  |  | ||||||
|   DESTINATION bin |  | ||||||
| ) |  | ||||||
| 
 | 
 | ||||||
| ######################################## | ######################################## | ||||||
| # MistServer - Inputs                  # | # MistServer - Inputs                  # | ||||||
|  |  | ||||||
|  | @ -1,108 +0,0 @@ | ||||||
| #include <cstdlib> |  | ||||||
| #include <cstdio> |  | ||||||
| #include <cstring> |  | ||||||
| #include <string> |  | ||||||
| 
 |  | ||||||
| #include <mist/json.h> |  | ||||||
| #include <mist/dtsc.h> |  | ||||||
| #include <mist/procs.h> |  | ||||||
| #include <mist/timing.h> |  | ||||||
| 
 |  | ||||||
| namespace Info { |  | ||||||
|   int getInfo(int argc, char* argv[]) { |  | ||||||
|     if (argc < 2){ |  | ||||||
|       fprintf( stderr, "Usage: %s <filename>\n", argv[0] ); |  | ||||||
|       return 1; |  | ||||||
|     } |  | ||||||
|     DTSC::File F(argv[1]); |  | ||||||
|     JSON::Value fileSpecs = F.getMeta().toJSON(); |  | ||||||
|     if( !fileSpecs ) { |  | ||||||
|       char ** cmd = (char**)malloc(3*sizeof(char*)); |  | ||||||
|       cmd[0] = (char*)"ffprobe"; |  | ||||||
|       cmd[1] = argv[1]; |  | ||||||
|       cmd[2] = NULL; |  | ||||||
|       int outFD = -1; |  | ||||||
|       Util::Procs::StartPiped("FFProbe", cmd, 0, 0, &outFD); |  | ||||||
|       while( Util::Procs::isActive("FFProbe")){ Util::sleep(100); } |  | ||||||
|       FILE * outFile = fdopen( outFD, "r" ); |  | ||||||
|       char * fileBuf = 0; |  | ||||||
|       size_t fileBufLen = 0; |  | ||||||
|       while ( !(feof(outFile) || ferror(outFile)) && (getline(&fileBuf, &fileBufLen, outFile) != -1)){ |  | ||||||
|         std::string line = fileBuf; |  | ||||||
|         if (line.find("Input") != std::string::npos){ |  | ||||||
|           std::string tmp = line.substr(line.find(", ") + 2); |  | ||||||
|           fileSpecs["format"] = tmp.substr(0, tmp.find(",")); |  | ||||||
|         } |  | ||||||
|         if (line.find("Duration") != std::string::npos){ |  | ||||||
|           std::string tmp = line.substr(line.find(": ", line.find("Duration")) + 2); |  | ||||||
|           tmp = tmp.substr(0, tmp.find(",")); |  | ||||||
|           int length = (((atoi(tmp.substr(0,2).c_str()) * 60) + atoi(tmp.substr(3,2).c_str())) * 60) + atoi(tmp.substr(6,2).c_str()); |  | ||||||
|           fileSpecs["length"] = length; |  | ||||||
|           length *= 100; |  | ||||||
|           length += atoi(tmp.substr(9,2).c_str()); |  | ||||||
|           fileSpecs["lastms"] = length * 10; |  | ||||||
|         } |  | ||||||
|         if (line.find("bitrate") != std::string::npos ){ |  | ||||||
|           std::string tmp = line.substr(line.find(": ", line.find("bitrate")) + 2); |  | ||||||
|           fileSpecs["bps"] = atoi(tmp.substr(0, tmp.find(" ")).c_str()) * 128; |  | ||||||
|         } |  | ||||||
|         if (line.find("Stream") != std::string::npos ){ |  | ||||||
|           std::string tmp = line.substr(line.find(" ", line.find("Stream")) + 1); |  | ||||||
|           int strmIdx = fileSpecs["streams"].size(); |  | ||||||
|           int curPos = 0; |  | ||||||
|           curPos = tmp.find(": ", curPos) + 2; |  | ||||||
|           fileSpecs["streams"][strmIdx]["type"] = tmp.substr(curPos, tmp.find(":", curPos) - curPos); |  | ||||||
|           curPos = tmp.find(":", curPos) + 2; |  | ||||||
|           fileSpecs["streams"][strmIdx]["codec"] = tmp.substr(curPos, tmp.find_first_of(", ", curPos) - curPos); |  | ||||||
|           curPos = tmp.find(",", curPos) + 2; |  | ||||||
|           if (fileSpecs["streams"][strmIdx]["type"] == "Video"){ |  | ||||||
|             fileSpecs["streams"][strmIdx]["encoding"] = tmp.substr(curPos, tmp.find(",", curPos) - curPos); |  | ||||||
|             curPos = tmp.find(",", curPos) + 2; |  | ||||||
|             fileSpecs["streams"][strmIdx]["width"] = atoi(tmp.substr(curPos, tmp.find("x", curPos) - curPos).c_str()); |  | ||||||
|             curPos = tmp.find("x", curPos) + 1; |  | ||||||
|             fileSpecs["streams"][strmIdx]["height"] = atoi(tmp.substr(curPos, tmp.find(",", curPos) - curPos).c_str()); |  | ||||||
|             curPos = tmp.find(",", curPos) + 2; |  | ||||||
|             fileSpecs["streams"][strmIdx]["bps"] = atoi(tmp.substr(curPos, tmp.find(" ", curPos) - curPos).c_str()) * 128; |  | ||||||
|             curPos = tmp.find(",", curPos) + 2; |  | ||||||
|             fileSpecs["streams"][strmIdx]["fpks"] = (int)(atof(tmp.substr(curPos, tmp.find(" ", curPos) - curPos).c_str()) * 1000); |  | ||||||
|             fileSpecs["streams"][strmIdx].removeMember( "type" ); |  | ||||||
|             fileSpecs["video"] = fileSpecs["streams"][strmIdx]; |  | ||||||
|           }else if (fileSpecs["streams"][strmIdx]["type"] == "Audio"){ |  | ||||||
|             fileSpecs["streams"][strmIdx]["samplerate"] = atoi(tmp.substr(curPos, tmp.find(" ", curPos) - curPos).c_str()); |  | ||||||
|             curPos = tmp.find(",", curPos) + 2; |  | ||||||
|             if (tmp.substr(curPos, tmp.find(",", curPos) - curPos) == "stereo"){ |  | ||||||
|               fileSpecs["streams"][strmIdx]["channels"] = 2; |  | ||||||
|             }else if (tmp.substr(curPos, tmp.find(",", curPos) - curPos) == "mono"){ |  | ||||||
|               fileSpecs["streams"][strmIdx]["channels"] = 1; |  | ||||||
|             }else{ |  | ||||||
|               fileSpecs["streams"][strmIdx]["channels"] = tmp.substr(curPos, tmp.find(",", curPos) - curPos); |  | ||||||
|             } |  | ||||||
|             curPos = tmp.find(",", curPos) + 2; |  | ||||||
|             fileSpecs["streams"][strmIdx]["samplewidth"] = tmp.substr(curPos, tmp.find(",", curPos) - curPos); |  | ||||||
|             curPos = tmp.find(",", curPos) + 2; |  | ||||||
|             fileSpecs["streams"][strmIdx]["bps"] = atoi(tmp.substr(curPos, tmp.find(" ", curPos) - curPos).c_str()) * 128; |  | ||||||
|             fileSpecs["streams"][strmIdx].removeMember( "type" ); |  | ||||||
|             fileSpecs["audio"] = fileSpecs["streams"][strmIdx]; |  | ||||||
|           } |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|       fclose( outFile ); |  | ||||||
|       fileSpecs.removeMember( "streams" ); |  | ||||||
|     } else { |  | ||||||
|       fileSpecs["format"] = "dtsc"; |  | ||||||
|       JSON::Value tracks = fileSpecs["tracks"]; |  | ||||||
|       for(JSON::ObjIter trackIt = tracks.ObjBegin(); trackIt != tracks.ObjEnd(); trackIt++){ |  | ||||||
|         fileSpecs["tracks"][trackIt->first].removeMember("fragments"); |  | ||||||
|         fileSpecs["tracks"][trackIt->first].removeMember("keys"); |  | ||||||
|         fileSpecs["tracks"][trackIt->first].removeMember("keysizes"); |  | ||||||
|         fileSpecs["tracks"][trackIt->first].removeMember("parts"); |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|     printf( "%s", fileSpecs.toString().c_str() ); |  | ||||||
|     return 0; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| int main(int argc, char* argv[]) { |  | ||||||
|   return Info::getInfo(argc, argv); |  | ||||||
| } |  | ||||||
|  | @ -125,8 +125,6 @@ namespace Controller { | ||||||
|         // if the file isn't dtsc and there's no dtsh file, run getStream on it
 |         // if the file isn't dtsc and there's no dtsh file, run getStream on it
 | ||||||
|         // this guarantees that if the stream is playable, it now has a valid header.
 |         // this guarantees that if the stream is playable, it now has a valid header.
 | ||||||
|         DEBUG_MSG(DLVL_INSANE, "(re)loading metadata for stream %s", name.c_str()); |         DEBUG_MSG(DLVL_INSANE, "(re)loading metadata for stream %s", name.c_str()); | ||||||
|         if ((URL.substr(URL.size() - 5) != ".dtsc") && (stat((URL+".dtsh").c_str(), &fileinfo) != 0)){ |  | ||||||
|           DEBUG_MSG(DLVL_INSANE, "Stream %s is non-DTSC file without DTSH. Opening stream to generate DTSH...", name.c_str()); |  | ||||||
|         Util::startInput(name); |         Util::startInput(name); | ||||||
|         DEBUG_MSG(DLVL_INSANE, "Waiting for stream %s to open...", name.c_str()); |         DEBUG_MSG(DLVL_INSANE, "Waiting for stream %s to open...", name.c_str()); | ||||||
|         //wait for the stream
 |         //wait for the stream
 | ||||||
|  | @ -153,7 +151,7 @@ namespace Controller { | ||||||
|               trackIt->second.removeMember("keys"); |               trackIt->second.removeMember("keys"); | ||||||
|               trackIt->second.removeMember("keysizes"); |               trackIt->second.removeMember("keysizes"); | ||||||
|               trackIt->second.removeMember("parts"); |               trackIt->second.removeMember("parts"); | ||||||
|                 trackIt->second.removeMember("ivecs");/*LTS*/ |               trackIt->second.removeMember("ivecs"); | ||||||
|             } |             } | ||||||
|           } |           } | ||||||
|           if ( !data["meta"] || !data["meta"].isMember("tracks") || !data["meta"]["tracks"]){ |           if ( !data["meta"] || !data["meta"].isMember("tracks") || !data["meta"]["tracks"]){ | ||||||
|  | @ -167,28 +165,6 @@ namespace Controller { | ||||||
|           DEBUG_MSG(DLVL_INSANE, "Metadata for stream %s (re)loaded", name.c_str()); |           DEBUG_MSG(DLVL_INSANE, "Metadata for stream %s (re)loaded", name.c_str()); | ||||||
|         } |         } | ||||||
|         DEBUG_MSG(DLVL_INSANE, "Stream %s opened", name.c_str()); |         DEBUG_MSG(DLVL_INSANE, "Stream %s opened", name.c_str()); | ||||||
|         }else{ |  | ||||||
|           //now, run mistinfo on the source - or on the accompanying dtsh file, if it exists
 |  | ||||||
|           if (stat((URL+".dtsh").c_str(), &fileinfo) == 0){ |  | ||||||
|             DEBUG_MSG(DLVL_INSANE, "Stream %s has a DTSH - opening DTSH instead of main stream file", name.c_str()); |  | ||||||
|             URL += ".dtsh"; |  | ||||||
|           } |  | ||||||
|           char * tmp_cmd[3] = {0, 0, 0}; |  | ||||||
|           std::string mistinfo = Util::getMyPath() + "MistInfo"; |  | ||||||
|           tmp_cmd[0] = (char*)mistinfo.c_str(); |  | ||||||
|           tmp_cmd[1] = (char*)URL.c_str(); |  | ||||||
|           DEBUG_MSG(DLVL_INSANE, "Running MistInfo for stream %s on file %s", name.c_str(), tmp_cmd[1]); |  | ||||||
|           data["meta"] = JSON::fromString(Util::Procs::getOutputOf(tmp_cmd)); |  | ||||||
|           if ( !data["meta"] || !data["meta"].isMember("tracks") || !data["meta"]["tracks"]){ |  | ||||||
|             data["error"] = "Stream offline: Corrupt file?"; |  | ||||||
|             if (data["error"].asStringRef() != prevState){ |  | ||||||
|               Log("WARN", "Source file " + URL + " seems to be corrupt."); |  | ||||||
|             } |  | ||||||
|             data["online"] = 0; |  | ||||||
|             return; |  | ||||||
|           } |  | ||||||
|           DEBUG_MSG(DLVL_INSANE, "Metadata for stream %s succesfully (re)loaded", name.c_str()); |  | ||||||
|         } |  | ||||||
|       } |       } | ||||||
|       if (!hasViewers(name)){ |       if (!hasViewers(name)){ | ||||||
|         if ( !data.isMember("error")){ |         if ( !data.isMember("error")){ | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Thulinma
						Thulinma