mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 21:36:47 +02:00
added server side audio mixer jitter stats
This commit is contained in:
parent
19195f9119
commit
076bc11545
4 changed files with 42 additions and 0 deletions
|
@ -424,6 +424,19 @@ void AudioMixer::sendStatsPacket() {
|
||||||
} else {
|
} else {
|
||||||
statsObject["average_mixes_per_listener"] = 0.0;
|
statsObject["average_mixes_per_listener"] = 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// add stats for each listerner
|
||||||
|
NodeList* nodeList = NodeList::getInstance();
|
||||||
|
int clientNumber = 0;
|
||||||
|
foreach (const SharedNodePointer& node, nodeList->getNodeHash()) {
|
||||||
|
clientNumber++;
|
||||||
|
AudioMixerClientData* clientData = static_cast<AudioMixerClientData*>(node->getLinkedData());
|
||||||
|
if (clientData) {
|
||||||
|
QString property = "jitterStats." + QString::number(clientNumber);
|
||||||
|
statsObject[qPrintable(property)] = clientData->getJitterBufferStats();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
ThreadedAssignment::addPacketStatsAndSendStatsPacket(statsObject);
|
ThreadedAssignment::addPacketStatsAndSendStatsPacket(statsObject);
|
||||||
|
|
||||||
|
|
|
@ -138,3 +138,26 @@ void AudioMixerClientData::pushBuffersAfterFrameSend() {
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString AudioMixerClientData::getJitterBufferStats() const {
|
||||||
|
QString result;
|
||||||
|
AvatarAudioRingBuffer* avatarRingBuffer = getAvatarAudioRingBuffer();
|
||||||
|
if (avatarRingBuffer) {
|
||||||
|
int desiredJitterBuffer = avatarRingBuffer->getDesiredJitterBufferFrames();
|
||||||
|
int currentJitterBuffer = avatarRingBuffer->getCurrentJitterBufferFrames();
|
||||||
|
result += "mic.desired:" + QString::number(desiredJitterBuffer) + " current:" + QString::number(currentJitterBuffer);
|
||||||
|
} else {
|
||||||
|
result = "mic unknown";
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < _ringBuffers.size(); i++) {
|
||||||
|
if (_ringBuffers[i]->getType() == PositionalAudioRingBuffer::Injector) {
|
||||||
|
int desiredJitterBuffer = _ringBuffers[i]->getDesiredJitterBufferFrames();
|
||||||
|
int currentJitterBuffer = _ringBuffers[i]->getCurrentJitterBufferFrames();
|
||||||
|
result += "| injected["+QString::number(i)+"].desired:"
|
||||||
|
+ QString::number(desiredJitterBuffer) + " current:" + QString::number(currentJitterBuffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
|
@ -29,6 +29,9 @@ public:
|
||||||
int parseData(const QByteArray& packet);
|
int parseData(const QByteArray& packet);
|
||||||
void checkBuffersBeforeFrameSend(AABox* checkSourceZone = NULL, AABox* listenerZone = NULL);
|
void checkBuffersBeforeFrameSend(AABox* checkSourceZone = NULL, AABox* listenerZone = NULL);
|
||||||
void pushBuffersAfterFrameSend();
|
void pushBuffersAfterFrameSend();
|
||||||
|
|
||||||
|
QString getJitterBufferStats() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QList<PositionalAudioRingBuffer*> _ringBuffers;
|
QList<PositionalAudioRingBuffer*> _ringBuffers;
|
||||||
};
|
};
|
||||||
|
|
|
@ -77,6 +77,9 @@ public:
|
||||||
|
|
||||||
int getSamplesPerFrame() const { return _isStereo ? NETWORK_BUFFER_LENGTH_SAMPLES_STEREO : NETWORK_BUFFER_LENGTH_SAMPLES_PER_CHANNEL; }
|
int getSamplesPerFrame() const { return _isStereo ? NETWORK_BUFFER_LENGTH_SAMPLES_STEREO : NETWORK_BUFFER_LENGTH_SAMPLES_PER_CHANNEL; }
|
||||||
|
|
||||||
|
int getDesiredJitterBufferFrames() const { return _desiredJitterBufferFrames; }
|
||||||
|
int getCurrentJitterBufferFrames() const { return _currentJitterBufferFrames; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// disallow copying of PositionalAudioRingBuffer objects
|
// disallow copying of PositionalAudioRingBuffer objects
|
||||||
PositionalAudioRingBuffer(const PositionalAudioRingBuffer&);
|
PositionalAudioRingBuffer(const PositionalAudioRingBuffer&);
|
||||||
|
|
Loading…
Reference in a new issue