mirror of
https://github.com/lubosz/overte.git
synced 2025-08-07 20:31:29 +02:00
updated Agent with audiostream; added initial packets discard to audiostream
This commit is contained in:
parent
f7e043f52d
commit
fd9d7baa06
5 changed files with 10 additions and 23 deletions
|
@ -148,21 +148,8 @@ void Agent::readPendingDatagrams() {
|
||||||
|
|
||||||
} else if (datagramPacketType == PacketTypeMixedAudio) {
|
} else if (datagramPacketType == PacketTypeMixedAudio) {
|
||||||
|
|
||||||
QUuid senderUUID = uuidFromPacketHeader(receivedPacket);
|
|
||||||
|
|
||||||
// parse sequence number for this packet
|
|
||||||
int numBytesPacketHeader = numBytesForPacketHeader(receivedPacket);
|
|
||||||
const char* sequenceAt = receivedPacket.constData() + numBytesPacketHeader;
|
|
||||||
quint16 sequence = *(reinterpret_cast<const quint16*>(sequenceAt));
|
|
||||||
_incomingMixedAudioSequenceNumberStats.sequenceNumberReceived(sequence, senderUUID);
|
|
||||||
|
|
||||||
// parse the data and grab the average loudness
|
|
||||||
_receivedAudioBuffer.parseData(receivedPacket);
|
_receivedAudioBuffer.parseData(receivedPacket);
|
||||||
|
|
||||||
// pretend like we have read the samples from this buffer so it does not fill
|
|
||||||
static int16_t garbageAudioBuffer[NETWORK_BUFFER_LENGTH_SAMPLES_STEREO];
|
|
||||||
_receivedAudioBuffer.readSamples(garbageAudioBuffer, NETWORK_BUFFER_LENGTH_SAMPLES_STEREO);
|
|
||||||
|
|
||||||
// let this continue through to the NodeList so it updates last heard timestamp
|
// let this continue through to the NodeList so it updates last heard timestamp
|
||||||
// for the sending audio mixer
|
// for the sending audio mixer
|
||||||
NodeList::getInstance()->processNodeData(senderSockAddr, receivedPacket);
|
NodeList::getInstance()->processNodeData(senderSockAddr, receivedPacket);
|
||||||
|
|
|
@ -71,7 +71,6 @@ private:
|
||||||
ModelTreeHeadlessViewer _modelViewer;
|
ModelTreeHeadlessViewer _modelViewer;
|
||||||
|
|
||||||
MixedAudioRingBuffer _receivedAudioBuffer;
|
MixedAudioRingBuffer _receivedAudioBuffer;
|
||||||
SequenceNumberStats _incomingMixedAudioSequenceNumberStats;
|
|
||||||
|
|
||||||
AvatarHashMap _avatarHashMap;
|
AvatarHashMap _avatarHashMap;
|
||||||
};
|
};
|
||||||
|
|
|
@ -716,9 +716,6 @@ void Audio::handleAudioInput() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Audio::addReceivedAudioToBuffer(const QByteArray& audioByteArray) {
|
void Audio::addReceivedAudioToBuffer(const QByteArray& audioByteArray) {
|
||||||
const int NUM_INITIAL_PACKETS_DISCARD = 3;
|
|
||||||
const int STANDARD_DEVIATION_SAMPLE_COUNT = 500;
|
|
||||||
|
|
||||||
if (_audioOutput) {
|
if (_audioOutput) {
|
||||||
// Audio output must exist and be correctly set up if we're going to process received audio
|
// Audio output must exist and be correctly set up if we're going to process received audio
|
||||||
processReceivedAudio(audioByteArray);
|
processReceivedAudio(audioByteArray);
|
||||||
|
|
|
@ -51,8 +51,6 @@ void InboundAudioStream::resetStats() {
|
||||||
}
|
}
|
||||||
|
|
||||||
int InboundAudioStream::parseData(const QByteArray& packet) {
|
int InboundAudioStream::parseData(const QByteArray& packet) {
|
||||||
frameReceivedUpdateTimingStats();
|
|
||||||
|
|
||||||
PacketType packetType = packetTypeForPacket(packet);
|
PacketType packetType = packetTypeForPacket(packet);
|
||||||
QUuid senderUUID = uuidFromPacketHeader(packet);
|
QUuid senderUUID = uuidFromPacketHeader(packet);
|
||||||
|
|
||||||
|
@ -64,7 +62,7 @@ int InboundAudioStream::parseData(const QByteArray& packet) {
|
||||||
// parse sequence number and track it
|
// parse sequence number and track it
|
||||||
quint16 sequence = *(reinterpret_cast<const quint16*>(sequenceAt));
|
quint16 sequence = *(reinterpret_cast<const quint16*>(sequenceAt));
|
||||||
readBytes += sizeof(quint16);
|
readBytes += sizeof(quint16);
|
||||||
SequenceNumberStats::ArrivalInfo arrivalInfo = _incomingSequenceNumberStats.sequenceNumberReceived(sequence, senderUUID);
|
SequenceNumberStats::ArrivalInfo arrivalInfo = frameReceivedUpdateNetworkStats(sequence, senderUUID);
|
||||||
|
|
||||||
// TODO: handle generalized silent packet here?????
|
// TODO: handle generalized silent packet here?????
|
||||||
|
|
||||||
|
@ -150,10 +148,14 @@ int InboundAudioStream::getCalculatedDesiredJitterBufferFrames() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void InboundAudioStream::frameReceivedUpdateTimingStats() {
|
SequenceNumberStats::ArrivalInfo InboundAudioStream::frameReceivedUpdateNetworkStats(quint16 sequenceNumber, const QUuid& senderUUID) {
|
||||||
|
const int NUM_INITIAL_PACKETS_DISCARD = 3;
|
||||||
|
|
||||||
|
SequenceNumberStats::ArrivalInfo arrivalInfo = _incomingSequenceNumberStats.sequenceNumberReceived(sequenceNumber, senderUUID);
|
||||||
|
|
||||||
// update the two time gap stats we're keeping
|
// update the two time gap stats we're keeping
|
||||||
quint64 now = usecTimestampNow();
|
quint64 now = usecTimestampNow();
|
||||||
if (_lastFrameReceivedTime != 0) {
|
if (_incomingSequenceNumberStats.getNumReceived() >= NUM_INITIAL_PACKETS_DISCARD) {
|
||||||
quint64 gap = now - _lastFrameReceivedTime;
|
quint64 gap = now - _lastFrameReceivedTime;
|
||||||
_interframeTimeGapStatsForJitterCalc.update(gap);
|
_interframeTimeGapStatsForJitterCalc.update(gap);
|
||||||
_interframeTimeGapStatsForStatsPacket.update(gap);
|
_interframeTimeGapStatsForStatsPacket.update(gap);
|
||||||
|
@ -174,6 +176,8 @@ void InboundAudioStream::frameReceivedUpdateTimingStats() {
|
||||||
}
|
}
|
||||||
_interframeTimeGapStatsForJitterCalc.clearNewStatsAvailableFlag();
|
_interframeTimeGapStatsForJitterCalc.clearNewStatsAvailableFlag();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return arrivalInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
int InboundAudioStream::writeDroppableSilentSamples(int numSilentSamples) {
|
int InboundAudioStream::writeDroppableSilentSamples(int numSilentSamples) {
|
||||||
|
|
|
@ -101,7 +101,7 @@ protected:
|
||||||
|
|
||||||
int writeDroppableSilentSamples(int numSilentSamples);
|
int writeDroppableSilentSamples(int numSilentSamples);
|
||||||
int writeSamplesForDroppedPackets(int numSamples);
|
int writeSamplesForDroppedPackets(int numSamples);
|
||||||
void frameReceivedUpdateTimingStats();
|
SequenceNumberStats::ArrivalInfo frameReceivedUpdateNetworkStats(quint16 sequenceNumber, const QUuid& senderUUID);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue