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
		Add a link
		
	
		Reference in a new issue
	
	 Thulinma
						Thulinma