WHIP: packet pacing fixup for WHIP/WHEP output
This commit is contained in:
		
							parent
							
								
									cb2c63db61
								
							
						
					
					
						commit
						d040421df9
					
				
					 2 changed files with 13 additions and 1 deletions
				
			
		|  | @ -1894,6 +1894,9 @@ void Socket::UDPConnection::SendNow(const char *sdata, size_t len){ | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | /// Queues sdata, len for sending over this socket.
 | ||||||
|  | /// If there has been enough time since the last packet, sends immediately.
 | ||||||
|  | /// Warning: never call sendPaced for the same socket from a different thread!
 | ||||||
| void Socket::UDPConnection::sendPaced(const char *sdata, size_t len){ | void Socket::UDPConnection::sendPaced(const char *sdata, size_t len){ | ||||||
|   if (!paceQueue.size() && (!lastPace || Util::getMicros(lastPace) > 10000)){ |   if (!paceQueue.size() && (!lastPace || Util::getMicros(lastPace) > 10000)){ | ||||||
|     SendNow(sdata, len); |     SendNow(sdata, len); | ||||||
|  | @ -1907,6 +1910,7 @@ void Socket::UDPConnection::sendPaced(const char *sdata, size_t len){ | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /// Spends uSendWindow microseconds either sending paced packets or sleeping, whichever is more appropriate
 | /// Spends uSendWindow microseconds either sending paced packets or sleeping, whichever is more appropriate
 | ||||||
|  | /// Warning: never call sendPaced for the same socket from a different thread!
 | ||||||
| void Socket::UDPConnection::sendPaced(uint64_t uSendWindow){ | void Socket::UDPConnection::sendPaced(uint64_t uSendWindow){ | ||||||
|   uint64_t currPace = Util::getMicros(); |   uint64_t currPace = Util::getMicros(); | ||||||
|   do{ |   do{ | ||||||
|  |  | ||||||
|  | @ -8,6 +8,13 @@ | ||||||
| #include <mist/triggers.h> | #include <mist/triggers.h> | ||||||
| #include <netdb.h> // ifaddr, listing ip addresses.
 | #include <netdb.h> // ifaddr, listing ip addresses.
 | ||||||
| #include <mist/stream.h> | #include <mist/stream.h> | ||||||
|  | /*
 | ||||||
|  | This file handles both input and output, and can operate in WHIP/WHEP as well as WebSocket signaling mode. | ||||||
|  | In case of WHIP/WHEP: the Socket is closed after signaling has happened and the keepGoing function | ||||||
|  |   is overridden to handle this case | ||||||
|  | When handling WebRTC Input a second thread is started dedicated to UDP traffic. In this case | ||||||
|  |   no UDP traffic may be handled on the main thread whatsoever | ||||||
|  | */ | ||||||
| 
 | 
 | ||||||
| namespace Mist{ | namespace Mist{ | ||||||
| 
 | 
 | ||||||
|  | @ -318,7 +325,8 @@ namespace Mist{ | ||||||
| 
 | 
 | ||||||
|   void OutWebRTC::requestHandler(){ |   void OutWebRTC::requestHandler(){ | ||||||
|     if (noSignalling){ |     if (noSignalling){ | ||||||
|       if (!parseData){udp.sendPaced(10000);} |       // For WHEP, make sure we keep listening for packets while waiting for new data to come in for sending
 | ||||||
|  |       if (parseData && !handleWebRTCInputOutput()){udp.sendPaced(10);} | ||||||
|       //After 10s of no packets, abort
 |       //After 10s of no packets, abort
 | ||||||
|       if (Util::bootMS() > lastRecv + 10000){ |       if (Util::bootMS() > lastRecv + 10000){ | ||||||
|         Util::logExitReason(ER_CLEAN_INACTIVE, "received no data for 10+ seconds"); |         Util::logExitReason(ER_CLEAN_INACTIVE, "received no data for 10+ seconds"); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Marco van Dijk
						Marco van Dijk