mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 08:21:24 +02:00
AudioMixer print added; untested
This commit is contained in:
parent
0e72c6a0b6
commit
446c888242
5 changed files with 67 additions and 2 deletions
|
@ -71,6 +71,8 @@ bool AudioMixer::_useDynamicJitterBuffers = false;
|
||||||
int AudioMixer::_staticDesiredJitterBufferFrames = 0;
|
int AudioMixer::_staticDesiredJitterBufferFrames = 0;
|
||||||
int AudioMixer::_maxFramesOverDesired = 0;
|
int AudioMixer::_maxFramesOverDesired = 0;
|
||||||
|
|
||||||
|
bool AudioMixer::_printStreamStats = false;
|
||||||
|
|
||||||
AudioMixer::AudioMixer(const QByteArray& packet) :
|
AudioMixer::AudioMixer(const QByteArray& packet) :
|
||||||
ThreadedAssignment(packet),
|
ThreadedAssignment(packet),
|
||||||
_trailingSleepRatio(1.0f),
|
_trailingSleepRatio(1.0f),
|
||||||
|
@ -448,7 +450,11 @@ void AudioMixer::run() {
|
||||||
}
|
}
|
||||||
qDebug() << "Max frames over desired:" << _maxFramesOverDesired;
|
qDebug() << "Max frames over desired:" << _maxFramesOverDesired;
|
||||||
|
|
||||||
|
const QString PRINT_STREAM_STATS_JSON_KEY = "H-print-stream-stats";
|
||||||
|
_printStreamStats = audioGroupObject[PRINT_STREAM_STATS_JSON_KEY].toBool();
|
||||||
|
if (_printStreamStats) {
|
||||||
|
qDebug() << "Stream stats will be printed to stdout";
|
||||||
|
}
|
||||||
|
|
||||||
const QString UNATTENUATED_ZONE_KEY = "D-unattenuated-zone";
|
const QString UNATTENUATED_ZONE_KEY = "D-unattenuated-zone";
|
||||||
|
|
||||||
|
@ -581,6 +587,9 @@ void AudioMixer::run() {
|
||||||
// send an audio stream stats packet if it's time
|
// send an audio stream stats packet if it's time
|
||||||
if (sendAudioStreamStats) {
|
if (sendAudioStreamStats) {
|
||||||
nodeData->sendAudioStreamStatsPackets(node);
|
nodeData->sendAudioStreamStatsPackets(node);
|
||||||
|
|
||||||
|
printf("\nStats for agent %s\n:", node->getUUID().toString().toLatin1().data());
|
||||||
|
nodeData->printUpstreamDownstreamStats();
|
||||||
}
|
}
|
||||||
|
|
||||||
++_sumListeners;
|
++_sumListeners;
|
||||||
|
|
|
@ -66,6 +66,8 @@ private:
|
||||||
static int _staticDesiredJitterBufferFrames;
|
static int _staticDesiredJitterBufferFrames;
|
||||||
static int _maxFramesOverDesired;
|
static int _maxFramesOverDesired;
|
||||||
|
|
||||||
|
static bool _printStreamStats;
|
||||||
|
|
||||||
quint64 _lastSendAudioStreamStatsTime;
|
quint64 _lastSendAudioStreamStatsTime;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,8 @@
|
||||||
|
|
||||||
AudioMixerClientData::AudioMixerClientData() :
|
AudioMixerClientData::AudioMixerClientData() :
|
||||||
_audioStreams(),
|
_audioStreams(),
|
||||||
_outgoingMixedAudioSequenceNumber(0)
|
_outgoingMixedAudioSequenceNumber(0),
|
||||||
|
_downstreamAudioStreamStats()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -263,3 +264,45 @@ QString AudioMixerClientData::getAudioStreamStatsString() const {
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AudioMixerClientData::printUpstreamDownstreamStats() const {
|
||||||
|
// print the upstream (mic stream) stats if the mic stream exists
|
||||||
|
if (_audioStreams.contains(QUuid())) {
|
||||||
|
printf(" Upstream:\n");
|
||||||
|
printAudioStreamStats(_audioStreams.value(QUuid())->getAudioStreamStats());
|
||||||
|
}
|
||||||
|
// print the downstream stats if they contain valid info
|
||||||
|
if (_downstreamAudioStreamStats._packetStreamStats._received > 0) {
|
||||||
|
printf(" Downstream:\n");
|
||||||
|
printAudioStreamStats(_downstreamAudioStreamStats);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void AudioMixerClientData::printAudioStreamStats(const AudioStreamStats& streamStats) const {
|
||||||
|
printf(" Packet loss | overall: %5.2f%% (%d lost), last_30s: %5.2f%% (%d lost)",
|
||||||
|
streamStats._packetStreamStats.getLostRate() * 100.0f,
|
||||||
|
streamStats._packetStreamStats._lost,
|
||||||
|
streamStats._packetStreamWindowStats.getLostRate() * 100.0f,
|
||||||
|
streamStats._packetStreamWindowStats._lost);
|
||||||
|
|
||||||
|
printf(" Ringbuffer frames | desired: %u, avg_available(10s): %u, available: %u",
|
||||||
|
streamStats._desiredJitterBufferFrames,
|
||||||
|
streamStats._framesAvailableAverage,
|
||||||
|
streamStats._framesAvailable);
|
||||||
|
|
||||||
|
printf(" Ringbuffer stats | starves: %u, prev_starve_lasted: %u, frames_dropped: %u, overflows: %u",
|
||||||
|
streamStats._starveCount,
|
||||||
|
streamStats._consecutiveNotMixedCount,
|
||||||
|
streamStats._framesDropped,
|
||||||
|
streamStats._overflowCount);
|
||||||
|
|
||||||
|
printf(" Inter-packet timegaps (overall) | min: %9s, max: %9s, avg: %9s",
|
||||||
|
formatUsecTime(streamStats._timeGapMin).toLatin1().data(),
|
||||||
|
formatUsecTime(streamStats._timeGapMax).toLatin1().data(),
|
||||||
|
formatUsecTime(streamStats._timeGapAverage).toLatin1().data());
|
||||||
|
|
||||||
|
printf(" Inter-packet timegaps (last 30s) | min: %9s, max: %9s, avg: %9s",
|
||||||
|
formatUsecTime(streamStats._timeGapWindowMin).toLatin1().data(),
|
||||||
|
formatUsecTime(streamStats._timeGapWindowMax).toLatin1().data(),
|
||||||
|
formatUsecTime(streamStats._timeGapWindowAverage).toLatin1().data());
|
||||||
|
}
|
||||||
|
|
|
@ -38,6 +38,11 @@ public:
|
||||||
void incrementOutgoingMixedAudioSequenceNumber() { _outgoingMixedAudioSequenceNumber++; }
|
void incrementOutgoingMixedAudioSequenceNumber() { _outgoingMixedAudioSequenceNumber++; }
|
||||||
quint16 getOutgoingSequenceNumber() const { return _outgoingMixedAudioSequenceNumber; }
|
quint16 getOutgoingSequenceNumber() const { return _outgoingMixedAudioSequenceNumber; }
|
||||||
|
|
||||||
|
void printUpstreamDownstreamStats() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void printAudioStreamStats(const AudioStreamStats& streamStats) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QHash<QUuid, PositionalAudioStream*> _audioStreams; // mic stream stored under key of null UUID
|
QHash<QUuid, PositionalAudioStream*> _audioStreams; // mic stream stored under key of null UUID
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,12 @@
|
||||||
"placeholder": "10",
|
"placeholder": "10",
|
||||||
"default": "10"
|
"default": "10"
|
||||||
},
|
},
|
||||||
|
"H-print-stream-stats": {
|
||||||
|
"type": "checkbox",
|
||||||
|
"label": "Print Stream Stats:",
|
||||||
|
"help": "If enabled, audio upstream and downstream stats of each agent will be printed each second to stdout",
|
||||||
|
"default": false
|
||||||
|
},
|
||||||
"D-unattenuated-zone": {
|
"D-unattenuated-zone": {
|
||||||
"label": "Unattenuated Zone",
|
"label": "Unattenuated Zone",
|
||||||
"help": "Boxes for source and listener (corner x, corner y, corner z, size x, size y, size z, corner x, corner y, corner z, size x, size y, size z)",
|
"help": "Boxes for source and listener (corner x, corner y, corner z, size x, size y, size z, corner x, corner y, corner z, size x, size y, size z)",
|
||||||
|
|
Loading…
Reference in a new issue