Updated controller for #24 and #25, closes #24.

This commit is contained in:
Thulinma 2012-04-27 23:44:52 +02:00
parent b271cd0fe7
commit d81a99573c

View file

@ -157,7 +157,7 @@ void CheckProtocols(JSON::Value & p){
if (connports["HTTP"] != tmp){Util::Procs::Stop("HTTP");} if (connports["HTTP"] != tmp){Util::Procs::Stop("HTTP");}
connports["HTTP"] = tmp; connports["HTTP"] = tmp;
if (!Util::Procs::isActive("HTTP")){ if (!Util::Procs::isActive("HTTP")){
Util::Procs::Start("HTTP", std::string("DDV_Conn_HTTP -n -p ")+tmp); Util::Procs::Start("HTTP", std::string("MistConnHTTP -n -p ")+tmp);
} }
} }
if (jit->first == "RTMP"){ if (jit->first == "RTMP"){
@ -166,7 +166,7 @@ void CheckProtocols(JSON::Value & p){
if (connports["RTMP"] != tmp){Util::Procs::Stop("RTMP");} if (connports["RTMP"] != tmp){Util::Procs::Stop("RTMP");}
connports["RTMP"] = tmp; connports["RTMP"] = tmp;
if (!Util::Procs::isActive("RTMP")){ if (!Util::Procs::isActive("RTMP")){
Util::Procs::Start("RTMP", std::string("DDV_Conn_RTMP -n -p ")+tmp); Util::Procs::Start("RTMP", std::string("MistConnRTMP -n -p ")+tmp);
} }
} }
} }
@ -206,49 +206,66 @@ void startStream(std::string name, JSON::Value & data){
std::string cmd1, cmd2; std::string cmd1, cmd2;
if (URL.substr(0, 4) == "push"){ if (URL.substr(0, 4) == "push"){
std::string pusher = URL.substr(7); std::string pusher = URL.substr(7);
cmd2 = "DDV_Buffer 500 "+name+" "+pusher; cmd2 = "MistBuffer 500 "+name+" "+pusher;
Util::Procs::Start(name, cmd2); Util::Procs::Start(name, cmd2);
}else{ }else{
cmd1 = "ffmpeg -re -async 2 -i "+URL+" "+preset+" -f flv -"; if (preset == ""){
cmd2 = "DDV_Buffer 500 "+name; cmd1 = "cat "+URL;
}else{
cmd1 = "ffmpeg -re -async 2 -i "+URL+" "+preset+" -f flv -";
}
cmd2 = "MistBuffer 500 "+name;
Util::Procs::Start(name, cmd1, cmd2); Util::Procs::Start(name, cmd1, cmd2);
} }
} }
void CheckAllStreams(JSON::Value & data){ void CheckAllStreams(JSON::Value & data){
unsigned int currTime = time(0); unsigned int currTime = time(0);
bool changed = false;
for (JSON::ObjIter jit = data.ObjBegin(); jit != data.ObjEnd(); jit++){ for (JSON::ObjIter jit = data.ObjBegin(); jit != data.ObjEnd(); jit++){
if (!Util::Procs::isActive(jit->first)){ if (!Util::Procs::isActive(jit->first)){
startStream(jit->first, jit->second); startStream(jit->first, jit->second);
} }
if (currTime - lastBuffer[jit->first] > 5){ if (currTime - lastBuffer[jit->first] > 5){
if (jit->second["online"] != 0){changed = true;}
jit->second["online"] = 0; jit->second["online"] = 0;
}else{ }else{
if (jit->second["online"] != 1){changed = true;}
jit->second["online"] = 1; jit->second["online"] = 1;
} }
} }
if (changed){
WriteFile("/tmp/mist/streamlist", out.toString());
}
} }
void CheckStreams(JSON::Value & in, JSON::Value & out){ void CheckStreams(JSON::Value & in, JSON::Value & out){
bool changed = false;
for (JSON::ObjIter jit = in.ObjBegin(); jit != in.ObjEnd(); jit++){ for (JSON::ObjIter jit = in.ObjBegin(); jit != in.ObjEnd(); jit++){
if (out.isMember(jit->first)){ if (out.isMember(jit->first)){
if (!streamsEqual(jit->second, out[jit->first])){ if (!streamsEqual(jit->second, out[jit->first])){
Log("STRM", std::string("Updated stream ")+jit->first); Log("STRM", std::string("Updated stream ")+jit->first);
changed = true
Util::Procs::Stop(jit->first); Util::Procs::Stop(jit->first);
startStream(jit->first, jit->second); startStream(jit->first, jit->second);
} }
}else{ }else{
Log("STRM", std::string("New stream ")+jit->first); Log("STRM", std::string("New stream ")+jit->first);
changed = true;
startStream(jit->first, jit->second); startStream(jit->first, jit->second);
} }
} }
for (JSON::ObjIter jit = out.ObjBegin(); jit != out.ObjEnd(); jit++){ for (JSON::ObjIter jit = out.ObjBegin(); jit != out.ObjEnd(); jit++){
if (!in.isMember(jit->first)){ if (!in.isMember(jit->first)){
Log("STRM", std::string("Deleted stream ")+jit->first); Log("STRM", std::string("Deleted stream ")+jit->first);
changed = true;
Util::Procs::Stop(jit->first); Util::Procs::Stop(jit->first);
} }
} }
out = in; out = in;
if (changed){
WriteFile("/tmp/mist/streamlist", out.toString());
}
} }
int main(int argc, char ** argv){ int main(int argc, char ** argv){
@ -269,7 +286,8 @@ int main(int argc, char ** argv){
time_t lastuplink = 0; time_t lastuplink = 0;
time_t processchecker = 0; time_t processchecker = 0;
API_Socket = Socket::Server(C.listen_port, C.interface, true); API_Socket = Socket::Server(C.listen_port, C.interface, true);
Socket::Server Stats_Socket = Socket::Server("/tmp/ddv_statistics", true); mkdir("/tmp/mist", S_IRWXU | S_IRWXG | S_IRWXO);//attempt to create /tmp/mist/ - ignore failures
Socket::Server Stats_Socket = Socket::Server("/tmp/mist/statistics", true);
Util::setUser(C.username); Util::setUser(C.username);
if (C.daemon_mode){ if (C.daemon_mode){
Util::Daemonize(); Util::Daemonize();