mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-25 17:14:59 +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::_maxFramesOverDesired = 0;
|
||||
|
||||
bool AudioMixer::_printStreamStats = false;
|
||||
|
||||
AudioMixer::AudioMixer(const QByteArray& packet) :
|
||||
ThreadedAssignment(packet),
|
||||
_trailingSleepRatio(1.0f),
|
||||
|
@ -448,7 +450,11 @@ void AudioMixer::run() {
|
|||
}
|
||||
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";
|
||||
|
||||
|
@ -581,6 +587,9 @@ void AudioMixer::run() {
|
|||
// send an audio stream stats packet if it's time
|
||||
if (sendAudioStreamStats) {
|
||||
nodeData->sendAudioStreamStatsPackets(node);
|
||||
|
||||
printf("\nStats for agent %s\n:", node->getUUID().toString().toLatin1().data());
|
||||
nodeData->printUpstreamDownstreamStats();
|
||||
}
|
||||
|
||||
++_sumListeners;
|
||||
|
|
|
@ -66,6 +66,8 @@ private:
|
|||
static int _staticDesiredJitterBufferFrames;
|
||||
static int _maxFramesOverDesired;
|
||||
|
||||
static bool _printStreamStats;
|
||||
|
||||
quint64 _lastSendAudioStreamStatsTime;
|
||||
};
|
||||
|
||||
|
|
|
@ -22,7 +22,8 @@
|
|||
|
||||
AudioMixerClientData::AudioMixerClientData() :
|
||||
_audioStreams(),
|
||||
_outgoingMixedAudioSequenceNumber(0)
|
||||
_outgoingMixedAudioSequenceNumber(0),
|
||||
_downstreamAudioStreamStats()
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -263,3 +264,45 @@ QString AudioMixerClientData::getAudioStreamStatsString() const {
|
|||
}
|
||||
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++; }
|
||||
quint16 getOutgoingSequenceNumber() const { return _outgoingMixedAudioSequenceNumber; }
|
||||
|
||||
void printUpstreamDownstreamStats() const;
|
||||
|
||||
private:
|
||||
void printAudioStreamStats(const AudioStreamStats& streamStats) const;
|
||||
|
||||
private:
|
||||
QHash<QUuid, PositionalAudioStream*> _audioStreams; // mic stream stored under key of null UUID
|
||||
|
||||
|
|
|
@ -21,6 +21,12 @@
|
|||
"placeholder": "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": {
|
||||
"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)",
|
||||
|
|
Loading…
Reference in a new issue