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){
|
||||
if (!paceQueue.size() && (!lastPace || Util::getMicros(lastPace) > 10000)){
|
||||
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
|
||||
/// Warning: never call sendPaced for the same socket from a different thread!
|
||||
void Socket::UDPConnection::sendPaced(uint64_t uSendWindow){
|
||||
uint64_t currPace = Util::getMicros();
|
||||
do{
|
||||
|
|
|
@ -8,6 +8,13 @@
|
|||
#include <mist/triggers.h>
|
||||
#include <netdb.h> // ifaddr, listing ip addresses.
|
||||
#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{
|
||||
|
||||
|
@ -318,7 +325,8 @@ namespace Mist{
|
|||
|
||||
void OutWebRTC::requestHandler(){
|
||||
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
|
||||
if (Util::bootMS() > lastRecv + 10000){
|
||||
Util::logExitReason(ER_CLEAN_INACTIVE, "received no data for 10+ seconds");
|
||||
|
|
Loading…
Add table
Reference in a new issue