Send boot-up progress percentages to status websocket for HLS input

This commit is contained in:
Thulinma 2023-03-09 16:00:38 +01:00
parent 52a10fc177
commit d96524968d
5 changed files with 43 additions and 16 deletions

View file

@ -56,7 +56,6 @@ namespace Mist{
}
uint32_t pageNumber = tPages.getInt("firstkey", pageIdx);
if (i == key){
INFO_MSG("Track %zu key %zu is on page %" PRIu32, track, key, pageNumber);
keyLoadPriority[trackKey(track, pageNumber)] += 10000;
}else{
keyLoadPriority[trackKey(track, pageNumber)] += 1000 - (key - i);
@ -69,7 +68,6 @@ namespace Mist{
}
void Input::userOnDisconnect(size_t id){}
void Input::userLeadOut(){
INFO_MSG("Wanna load %zu keys", keyLoadPriority.size());
if (!keyLoadPriority.size()){return;}
//Make reverse mapping
std::multimap<uint64_t, trackKey> reverse;
@ -412,7 +410,7 @@ namespace Mist{
//Set stream status to STRMSTAT_INIT, then close the page in non-master mode to keep it around
char pageName[NAME_BUFFER_SIZE];
snprintf(pageName, NAME_BUFFER_SIZE, SHM_STREAM_STATE, streamName.c_str());
streamStatus.init(pageName, 1, true, false);
streamStatus.init(pageName, 2, true, false);
if (streamStatus){streamStatus.mapped[0] = STRMSTAT_INIT;}
streamStatus.master = false;
streamStatus.close();
@ -459,7 +457,7 @@ namespace Mist{
// Re-init streamStatus, previously closed
char pageName[NAME_BUFFER_SIZE];
snprintf(pageName, NAME_BUFFER_SIZE, SHM_STREAM_STATE, streamName.c_str());
streamStatus.init(pageName, 1, true, false);
streamStatus.init(pageName, 2, true, false);
streamStatus.master = false;
if (streamStatus){streamStatus.mapped[0] = STRMSTAT_INIT;}
}
@ -469,7 +467,7 @@ namespace Mist{
playerLock.unlink();
char pageName[NAME_BUFFER_SIZE];
snprintf(pageName, NAME_BUFFER_SIZE, SHM_STREAM_STATE, streamName.c_str());
streamStatus.init(pageName, 1, true, false);
streamStatus.init(pageName, 2, true, false);
streamStatus.close();
}
playerLock.unlink();
@ -490,7 +488,7 @@ namespace Mist{
// Re-init streamStatus, previously closed
char pageName[NAME_BUFFER_SIZE];
snprintf(pageName, NAME_BUFFER_SIZE, SHM_STREAM_STATE, streamName.c_str());
streamStatus.init(pageName, 1, true, false);
streamStatus.init(pageName, 2, true, false);
streamStatus.master = false;
if (streamStatus){streamStatus.mapped[0] = STRMSTAT_INIT;}
}
@ -528,7 +526,7 @@ namespace Mist{
if (playerLock){
char pageName[NAME_BUFFER_SIZE];
snprintf(pageName, NAME_BUFFER_SIZE, SHM_STREAM_STATE, streamName.c_str());
streamStatus.init(pageName, 1, true, false);
streamStatus.init(pageName, 2, true, false);
if (streamStatus){streamStatus.mapped[0] = STRMSTAT_INVALID;}
}
#if DEBUG >= DLVL_DEVEL
@ -559,7 +557,7 @@ namespace Mist{
pidPage.close();
//Clear stream state
snprintf(pageName, NAME_BUFFER_SIZE, SHM_STREAM_STATE, streamName.c_str());
streamStatus.init(pageName, 1, true, false);
streamStatus.init(pageName, 2, true, false);
streamStatus.close();
//Delete lock
playerLock.unlink();

View file

@ -825,13 +825,21 @@ namespace Mist{
meta.reInit(isSingular() ? streamName : "");
tthread::lock_guard<tthread::mutex> guard(entryMutex);
size_t totalSegments = 0, currentSegment = 0;
for (std::map<uint32_t, std::deque<playListEntries> >::iterator pListIt = listEntries.begin();
pListIt != listEntries.end(); pListIt++){
totalSegments += pListIt->second.size();
}
for (std::map<uint32_t, std::deque<playListEntries> >::iterator pListIt = listEntries.begin();
pListIt != listEntries.end() && config->is_active; pListIt++){
tsStream.clear();
uint32_t entId = 0;
for (std::deque<playListEntries>::iterator entryIt = pListIt->second.begin();
entryIt != pListIt->second.end(); entryIt++){
entryIt != pListIt->second.end() && config->is_active; entryIt++){
++currentSegment;
tsStream.partialClear();
if (!segDowner.loadSegment(*entryIt)){
@ -840,7 +848,7 @@ namespace Mist{
}
entId++;
allowRemap = true;
while (!segDowner.atEnd()){
while (!segDowner.atEnd() && config->is_active){
// Wait for packets on each track to make sure the offset is set based on the earliest packet
hasPacket = tsStream.hasPacketOnEachTrack() || (segDowner.atEnd() && tsStream.hasPacket());
if (hasPacket){
@ -902,8 +910,14 @@ namespace Mist{
std::deque<playListEntries> &curList = listEntries[pListIt->first];
curList.at(entId-1).timeOffset = 0;
}
//Set progress counter
if (streamStatus && streamStatus.len > 1){
streamStatus.mapped[1] = (255 * currentSegment) / totalSegments;
}
}
}
if (!config->is_active){return false;}
// set bootMsOffset in order to display the program time correctly in the player
if (meta.getLive()){meta.setUTCOffset(streamOffset + (Util::unixMS() - Util::bootMS()));}