JSON blocking fix + output reselect fix for early stream times
This commit is contained in:
parent
33488da329
commit
4f7b902453
3 changed files with 16 additions and 8 deletions
|
@ -279,7 +279,7 @@ namespace Mist{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
//autoSeeking and target not in bounds? Drop it too.
|
//autoSeeking and target not in bounds? Drop it too.
|
||||||
if (autoSeek && myMeta.tracks[*it].lastms < seekTarget - 6000){
|
if (autoSeek && myMeta.tracks[*it].lastms < std::max(seekTarget, 6000lu) - 6000){
|
||||||
toRemove.insert(*it);
|
toRemove.insert(*it);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -360,7 +360,7 @@ namespace Mist{
|
||||||
if (myMeta.live){
|
if (myMeta.live){
|
||||||
for (std::map<unsigned int, DTSC::Track>::reverse_iterator trit = myMeta.tracks.rbegin(); trit != myMeta.tracks.rend(); trit++){
|
for (std::map<unsigned int, DTSC::Track>::reverse_iterator trit = myMeta.tracks.rbegin(); trit != myMeta.tracks.rend(); trit++){
|
||||||
if ((!byType && trit->second.codec == strRef.substr(shift)) || (byType && trit->second.type == strRef.substr(shift)) || strRef.substr(shift) == "*"){
|
if ((!byType && trit->second.codec == strRef.substr(shift)) || (byType && trit->second.type == strRef.substr(shift)) || strRef.substr(shift) == "*"){
|
||||||
if (autoSeek && trit->second.lastms < seekTarget - 6000){continue;}
|
if (autoSeek && trit->second.lastms < std::max(seekTarget, 6000lu) - 6000){continue;}
|
||||||
selectedTracks.insert(trit->first);
|
selectedTracks.insert(trit->first);
|
||||||
found = true;
|
found = true;
|
||||||
if (!multiSel){break;}
|
if (!multiSel){break;}
|
||||||
|
@ -369,7 +369,7 @@ namespace Mist{
|
||||||
}else{
|
}else{
|
||||||
for (std::map<unsigned int, DTSC::Track>::iterator trit = myMeta.tracks.begin(); trit != myMeta.tracks.end(); trit++){
|
for (std::map<unsigned int, DTSC::Track>::iterator trit = myMeta.tracks.begin(); trit != myMeta.tracks.end(); trit++){
|
||||||
if ((!byType && trit->second.codec == strRef.substr(shift)) || (byType && trit->second.type == strRef.substr(shift)) || strRef.substr(shift) == "*"){
|
if ((!byType && trit->second.codec == strRef.substr(shift)) || (byType && trit->second.type == strRef.substr(shift)) || strRef.substr(shift) == "*"){
|
||||||
if (autoSeek && trit->second.lastms < seekTarget - 6000){continue;}
|
if (autoSeek && trit->second.lastms < std::max(seekTarget, 6000lu) - 6000){continue;}
|
||||||
selectedTracks.insert(trit->first);
|
selectedTracks.insert(trit->first);
|
||||||
found = true;
|
found = true;
|
||||||
if (!multiSel){break;}
|
if (!multiSel){break;}
|
||||||
|
@ -411,6 +411,7 @@ namespace Mist{
|
||||||
void Output::stop(){
|
void Output::stop(){
|
||||||
buffer.clear();
|
buffer.clear();
|
||||||
parseData = false;
|
parseData = false;
|
||||||
|
sought = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int Output::getKeyForTime(long unsigned int trackId, long long timeStamp){
|
unsigned int Output::getKeyForTime(long unsigned int trackId, long long timeStamp){
|
||||||
|
|
|
@ -260,6 +260,7 @@ namespace Mist {
|
||||||
//Handle upgrade to websocket if the output supports it
|
//Handle upgrade to websocket if the output supports it
|
||||||
if (doesWebsockets() && H.GetHeader("Upgrade") == "websocket"){
|
if (doesWebsockets() && H.GetHeader("Upgrade") == "websocket"){
|
||||||
INFO_MSG("Switching to Websocket mode");
|
INFO_MSG("Switching to Websocket mode");
|
||||||
|
setBlocking(false);
|
||||||
preWebsocketConnect();
|
preWebsocketConnect();
|
||||||
webSock = new HTTP::Websocket(myConn, H);
|
webSock = new HTTP::Websocket(myConn, H);
|
||||||
if (!(*webSock)){
|
if (!(*webSock)){
|
||||||
|
|
|
@ -94,24 +94,30 @@ namespace Mist {
|
||||||
static bool recursive = false;
|
static bool recursive = false;
|
||||||
if (recursive){return true;}
|
if (recursive){return true;}
|
||||||
recursive = true;
|
recursive = true;
|
||||||
if (keepReselecting && !isPushing()){
|
if (keepReselecting && !isPushing() && !myMeta.vod){
|
||||||
uint64_t maxTimer = 7200;
|
uint64_t maxTimer = 7200;
|
||||||
while (--maxTimer && nProxy.userClient.isAlive() && keepGoing()){
|
while (--maxTimer && keepGoing()){
|
||||||
|
if (!isBlocking){myConn.spool();}
|
||||||
Util::wait(500);
|
Util::wait(500);
|
||||||
stats();
|
stats();
|
||||||
if (Util::getStreamStatus(streamName) != STRMSTAT_READY){
|
if (Util::getStreamStatus(streamName) != STRMSTAT_READY){
|
||||||
disconnect();
|
if (isInitialized){
|
||||||
|
INFO_MSG("Disconnecting from offline stream");
|
||||||
|
disconnect();
|
||||||
|
stop();
|
||||||
|
}
|
||||||
}else{
|
}else{
|
||||||
updateMeta();
|
|
||||||
if (isReadyForPlay()){
|
if (isReadyForPlay()){
|
||||||
|
INFO_MSG("Resuming playback!");
|
||||||
recursive = false;
|
recursive = false;
|
||||||
|
parseData = true;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
recursive = false;
|
recursive = false;
|
||||||
}
|
}
|
||||||
if (!jsonp.size() && !first){
|
if (!webSock && !jsonp.size() && !first){
|
||||||
myConn.SendNow("]\n", 2);
|
myConn.SendNow("]\n", 2);
|
||||||
}
|
}
|
||||||
myConn.close();
|
myConn.close();
|
||||||
|
|
Loading…
Add table
Reference in a new issue