Fixes for DTSC metadata handling

This commit is contained in:
Thulinma 2021-01-22 01:02:40 +01:00
parent f862263354
commit 63acbb1ddb
12 changed files with 235 additions and 71 deletions

View file

@ -276,7 +276,7 @@ namespace Mist{
// If a protocol does not support any codecs, we assume you know what you're doing
if (!capa.isMember("codecs")){return true;}
if (!isInitialized){initialize();}
meta.refresh();
meta.reloadReplacedPagesIfNeeded();
if (getSupportedTracks().size()){
if (!userSelect.size()){selectDefaultTracks();}
size_t mainTrack = getMainSelectedTrack();
@ -374,7 +374,6 @@ namespace Mist{
meta.reInit(streamName, false);
}
if (!meta){return;}
meta.refresh();
isInitialized = true;
statComm.reload();
stats(true);
@ -387,7 +386,7 @@ namespace Mist{
break;
}
Util::wait(500);
meta.refresh();
meta.reloadReplacedPagesIfNeeded();
stats();
}
}
@ -406,7 +405,7 @@ namespace Mist{
if (!isInitialized){return false;}
}
meta.refresh();
meta.reloadReplacedPagesIfNeeded();
bool autoSeek = buffer.size();
uint64_t seekTarget = currentTime();
@ -533,7 +532,7 @@ namespace Mist{
WARN_MSG("Load for track %zu key %zu aborted - track does not exist", trackId, keyNum);
return;
}
if (!M.trackLoaded(trackId)){meta.refresh();}
if (!M.trackLoaded(trackId)){meta.reloadReplacedPagesIfNeeded();}
DTSC::Keys keys(M.keys(trackId));
if (!keys.getValidCount()){
WARN_MSG("Load for track %zu key %zu aborted - track is empty", trackId, keyNum);
@ -710,7 +709,7 @@ namespace Mist{
userSelect.erase(tid);
return false;
}
if (!M.trackLoaded(tid)){meta.refresh();}
if (!M.trackLoaded(tid)){meta.reloadReplacedPagesIfNeeded();}
if (!userSelect.count(tid) || !userSelect[tid]){
WARN_MSG("Aborting seek to %" PRIu64 "ms in track %zu: user select failure (%s)", pos, tid, userSelect.count(tid)?"not connected":"not selected");
userSelect.erase(tid);
@ -1496,6 +1495,7 @@ namespace Mist{
sortedPageInfo nxt = *(buffer.begin());
if (meta.reloadReplacedPagesIfNeeded()){return false;}
if (!M.getValidTracks().count(nxt.tid)){
dropTrack(nxt.tid, "disappeared from metadata");
return false;

View file

@ -242,7 +242,7 @@ namespace Mist{
std::string dataPacket = myConn.Received().remove(8 + rSize);
DTSC::Packet metaPack(dataPacket.data(), dataPacket.size());
DTSC::Scan metaScan = metaPack.getScan();
meta.refresh();
meta.reloadReplacedPagesIfNeeded();
size_t prevTracks = meta.getValidTracks().size();
size_t tNum = metaScan.getMember("tracks").getSize();
@ -256,7 +256,7 @@ namespace Mist{
HIGH_MSG("Already had track: %s", trk.asJSON().toString().c_str());
}
}
meta.refresh();
meta.reloadReplacedPagesIfNeeded();
std::stringstream rep;
rep << "DTSC_HEAD parsed, we went from " << prevTracks << " to " << meta.getValidTracks().size() << " tracks. Bring on those data packets!";
sendOk(rep.str());

View file

@ -7,7 +7,7 @@
namespace Mist{
bool OutHLS::isReadyForPlay(){
if (!isInitialized){initialize();}
meta.refresh();
meta.reloadReplacedPagesIfNeeded();
if (!M.getValidTracks().size()){return false;}
uint32_t mainTrack = M.mainTrack();
if (mainTrack == INVALID_TRACK_ID){return false;}

View file

@ -1073,7 +1073,7 @@ namespace Mist{
newState = streamStatus.mapped[0];
}
if (meta){meta.refresh();}
if (meta){meta.reloadReplacedPagesIfNeeded();}
if (newState != prevState || (newState == STRMSTAT_READY && M.getValidTracks() != prevTracks)){
if (newState == STRMSTAT_READY){
reconnect();