diff --git a/lib/dtscmeta.cpp b/lib/dtscmeta.cpp index d1b13ed4..bd403e24 100644 --- a/lib/dtscmeta.cpp +++ b/lib/dtscmeta.cpp @@ -120,7 +120,7 @@ namespace DTSC { while (src.connected()){ if (!toReceive && src.Received().available(8)){ if (src.Received().copy(2) != "DT"){ - INFO_MSG("Invalid DTSC Packet header encountered (%s)", src.Received().copy(4).c_str()); + WARN_MSG("Invalid DTSC Packet header encountered (%s)", src.Received().copy(4).c_str()); break; } toReceive = Bit::btohl(src.Received().copy(8).data() + 4); @@ -131,10 +131,11 @@ namespace DTSC { return; } if(!src.spool()){ - if (sleepCount++ > 60){ + if (sleepCount++ > 50){ + WARN_MSG("Waiting for packet on connection timed out"); return; } - Util::sleep(100); + Util::wait(100); } } } diff --git a/src/input/input.cpp b/src/input/input.cpp index d746eb8b..5fd93f94 100644 --- a/src/input/input.cpp +++ b/src/input/input.cpp @@ -228,7 +228,7 @@ namespace Mist { snprintf(userPageName, NAME_BUFFER_SIZE, SHM_USERS, streamName.c_str()); nProxy.userClient = IPC::sharedClient(userPageName, PLAY_EX_SIZE, true); - DEBUG_MSG(DLVL_DEVEL, "Input for stream %s started", streamName.c_str()); + INFO_MSG("Input for stream %s started", streamName.c_str()); if (!openStreamSource()){ FAIL_MSG("Unable to connect to source"); @@ -261,7 +261,7 @@ namespace Mist { getNext(); nProxy.userClient.keepAlive(); } - + closeStreamSource(); nProxy.userClient.finish(); @@ -269,7 +269,7 @@ namespace Mist { pullLock.post(); pullLock.close(); pullLock.unlink(); - DEBUG_MSG(DLVL_DEVEL, "Pull input for stream %s closing clean", streamName.c_str()); + INFO_MSG("Stream input %s closing clean", streamName.c_str()); return; } diff --git a/src/input/input_dtsc.cpp b/src/input/input_dtsc.cpp index fbdc439b..e13b0595 100644 --- a/src/input/input_dtsc.cpp +++ b/src/input/input_dtsc.cpp @@ -164,28 +164,28 @@ namespace Mist { if (!needsLock()) { return true; } else { - if (config->getString("input") == "-") { - std::cerr << "Input from stdin not yet supported" << std::endl; - return false; - } - if (!config->getString("streamname").size()){ - if (config->getString("output") == "-") { - std::cerr << "Output to stdout not yet supported" << std::endl; + if (config->getString("input") == "-") { + std::cerr << "Input from stdin not yet supported" << std::endl; return false; } - }else{ - if (config->getString("output") != "-") { - std::cerr << "File output in player mode not supported" << std::endl; + if (!config->getString("streamname").size()) { + if (config->getString("output") == "-") { + std::cerr << "Output to stdout not yet supported" << std::endl; + return false; + } + } else { + if (config->getString("output") != "-") { + std::cerr << "File output in player mode not supported" << std::endl; + return false; + } + } + + //open File + inFile = DTSC::File(config->getString("input")); + if (!inFile) { return false; } } - - //open File - inFile = DTSC::File(config->getString("input")); - if (!inFile) { - return false; - } - } return true; } @@ -199,18 +199,18 @@ namespace Mist { DTSC::File tmp(config->getString("input") + ".dtsh"); if (tmp) { myMeta = tmp.getMeta(); - DEBUG_MSG(DLVL_HIGH,"Meta read in with %lu tracks", myMeta.tracks.size()); + DEBUG_MSG(DLVL_HIGH, "Meta read in with %lu tracks", myMeta.tracks.size()); return true; } if (inFile.getMeta().moreheader < 0 || inFile.getMeta().tracks.size() == 0) { - DEBUG_MSG(DLVL_FAIL,"Missing external header file"); + DEBUG_MSG(DLVL_FAIL, "Missing external header file"); return false; } myMeta = DTSC::Meta(inFile.getMeta()); - DEBUG_MSG(DLVL_DEVEL,"Meta read in with %lu tracks", myMeta.tracks.size()); + DEBUG_MSG(DLVL_DEVEL, "Meta read in with %lu tracks", myMeta.tracks.size()); return true; } - + void inputDTSC::getNext(bool smart) { if (!needsLock()){ thisPacket.reInit(srcConn); @@ -232,7 +232,7 @@ namespace Mist { } for (std::set::iterator it = newTracks.begin(); it != newTracks.end(); it++){ - INFO_MSG("Adding track %d to internal metadata", *it); + INFO_MSG("Reset: adding track %d", *it); myMeta.tracks[*it] = newMeta.tracks[*it]; continueNegotiate(*it, true); } @@ -246,12 +246,12 @@ namespace Mist { } for(std::set::iterator it = deletedTracks.begin(); it != deletedTracks.end(); it++){ - INFO_MSG("Deleting track %d from internal metadata", *it); + INFO_MSG("Reset: deleting track %d", *it); myMeta.tracks.erase(*it); } //Read next packet before returning - thisPacket.reInit(srcConn); + return getNext(smart); }else{ myMeta = DTSC::Meta(); } @@ -259,14 +259,30 @@ namespace Mist { //Read next packet before returning thisPacket.reInit(srcConn); } + }else if (thisPacket.getVersion() == DTSC::DTSC_HEAD){ + DTSC::Meta newMeta; + newMeta.reinit(thisPacket); + std::set newTracks; + for (std::map::iterator it = newMeta.tracks.begin(); it != newMeta.tracks.end(); it++){ + if (!myMeta.tracks.count(it->first)){ + newTracks.insert(it->first); + } + } + + for (std::set::iterator it = newTracks.begin(); it != newTracks.end(); it++){ + INFO_MSG("New header: adding track %d (%s)", *it, newMeta.tracks[*it].type.c_str()); + myMeta.tracks[*it] = newMeta.tracks[*it]; + continueNegotiate(*it, true); + } + return getNext(smart); } }else{ - if (smart){ - inFile.seekNext(); - }else{ - inFile.parseNext(); - } - thisPacket = inFile.getPacket(); + if (smart) { + inFile.seekNext(); + } else { + inFile.parseNext(); + } + thisPacket = inFile.getPacket(); } }