mirror of
https://github.com/JulianGro/overte.git
synced 2025-08-13 01:55:39 +02:00
break up audio mixer stats across multiple packets
This commit is contained in:
parent
076bc11545
commit
b2c982976e
2 changed files with 30 additions and 9 deletions
|
@ -425,7 +425,20 @@ void AudioMixer::sendStatsPacket() {
|
||||||
statsObject["average_mixes_per_listener"] = 0.0;
|
statsObject["average_mixes_per_listener"] = 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ThreadedAssignment::addPacketStatsAndSendStatsPacket(statsObject);
|
||||||
|
_sumListeners = 0;
|
||||||
|
_sumMixes = 0;
|
||||||
|
_numStatFrames = 0;
|
||||||
|
|
||||||
|
|
||||||
|
// NOTE: These stats can be too large to fit in an MTU, so we break it up into multiple packts...
|
||||||
|
QJsonObject statsObject2;
|
||||||
|
|
||||||
// add stats for each listerner
|
// add stats for each listerner
|
||||||
|
bool somethingToSend = false;
|
||||||
|
int sizeOfStats = 0;
|
||||||
|
int TOO_BIG_FOR_MTU = 1200; // some extra space for JSONification
|
||||||
|
|
||||||
NodeList* nodeList = NodeList::getInstance();
|
NodeList* nodeList = NodeList::getInstance();
|
||||||
int clientNumber = 0;
|
int clientNumber = 0;
|
||||||
foreach (const SharedNodePointer& node, nodeList->getNodeHash()) {
|
foreach (const SharedNodePointer& node, nodeList->getNodeHash()) {
|
||||||
|
@ -433,16 +446,23 @@ void AudioMixer::sendStatsPacket() {
|
||||||
AudioMixerClientData* clientData = static_cast<AudioMixerClientData*>(node->getLinkedData());
|
AudioMixerClientData* clientData = static_cast<AudioMixerClientData*>(node->getLinkedData());
|
||||||
if (clientData) {
|
if (clientData) {
|
||||||
QString property = "jitterStats." + QString::number(clientNumber);
|
QString property = "jitterStats." + QString::number(clientNumber);
|
||||||
statsObject[qPrintable(property)] = clientData->getJitterBufferStats();
|
QString value = clientData->getJitterBufferStats();
|
||||||
|
statsObject2[qPrintable(property)] = value;
|
||||||
|
somethingToSend = true;
|
||||||
|
sizeOfStats += property.size() + value.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
// if we're too large, send the packet
|
||||||
|
if (sizeOfStats > TOO_BIG_FOR_MTU) {
|
||||||
|
nodeList->sendStatsToDomainServer(statsObject2);
|
||||||
|
sizeOfStats = 0;
|
||||||
|
statsObject2 = QJsonObject(); // clear it
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (somethingToSend) {
|
||||||
ThreadedAssignment::addPacketStatsAndSendStatsPacket(statsObject);
|
nodeList->sendStatsToDomainServer(statsObject2);
|
||||||
|
}
|
||||||
_sumListeners = 0;
|
|
||||||
_sumMixes = 0;
|
|
||||||
_numStatFrames = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioMixer::run() {
|
void AudioMixer::run() {
|
||||||
|
|
|
@ -235,6 +235,7 @@ void PositionalAudioRingBuffer::updateDesiredJitterBufferFrames() {
|
||||||
const float USECS_PER_FRAME = NETWORK_BUFFER_LENGTH_SAMPLES_PER_CHANNEL * USECS_PER_SECOND / (float)SAMPLE_RATE;
|
const float USECS_PER_FRAME = NETWORK_BUFFER_LENGTH_SAMPLES_PER_CHANNEL * USECS_PER_SECOND / (float)SAMPLE_RATE;
|
||||||
|
|
||||||
if (_interframeTimeGapStats.hasNewWindowMaxGapAvailable()) {
|
if (_interframeTimeGapStats.hasNewWindowMaxGapAvailable()) {
|
||||||
|
|
||||||
_desiredJitterBufferFrames = ceilf((float)_interframeTimeGapStats.getWindowMaxGap() / USECS_PER_FRAME);
|
_desiredJitterBufferFrames = ceilf((float)_interframeTimeGapStats.getWindowMaxGap() / USECS_PER_FRAME);
|
||||||
if (_desiredJitterBufferFrames < 1) {
|
if (_desiredJitterBufferFrames < 1) {
|
||||||
_desiredJitterBufferFrames = 1;
|
_desiredJitterBufferFrames = 1;
|
||||||
|
|
Loading…
Reference in a new issue