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(MP4 mp4)
|
||||
makeAnalyser(OGG ogg)
|
||||
add_executable(MistInfo
|
||||
src/analysers/info.cpp
|
||||
)
|
||||
target_link_libraries(MistInfo
|
||||
mist
|
||||
)
|
||||
install(
|
||||
TARGETS MistInfo
|
||||
DESTINATION bin
|
||||
)
|
||||
|
||||
########################################
|
||||
# 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
|
||||
// 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());
|
||||
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);
|
||||
DEBUG_MSG(DLVL_INSANE, "Waiting for stream %s to open...", name.c_str());
|
||||
//wait for the stream
|
||||
|
@ -153,7 +151,7 @@ namespace Controller {
|
|||
trackIt->second.removeMember("keys");
|
||||
trackIt->second.removeMember("keysizes");
|
||||
trackIt->second.removeMember("parts");
|
||||
trackIt->second.removeMember("ivecs");/*LTS*/
|
||||
trackIt->second.removeMember("ivecs");
|
||||
}
|
||||
}
|
||||
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, "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 ( !data.isMember("error")){
|
||||
|
|
Loading…
Add table
Reference in a new issue