Small fix for audio packet handling

merge-requests/2/head
Phil Taylor 2021-03-14 08:44:30 +00:00
rodzic 3187651098
commit 03de9b0dfd
5 zmienionych plików z 22 dodań i 8 usunięć

Wyświetl plik

@ -977,8 +977,12 @@ qint64 audioHandler::readData(char* data, qint64 maxlen)
{
int timediff = packet->time.msecsTo(QTime::currentTime());
if (timediff > (int)latency * 2) {
//qDebug(logAudio()) << "Packet " << hex << packet->seq << " arrived too late (increase rx buffer size!) " << dec << packet->time.msecsTo(QTime::currentTime()) << "ms";
packet = audioBuffer.erase(packet); // returns next packet
qDebug(logAudio()) << "Packet " << hex << packet->seq <<
" arrived too late (increase rx latency!) " <<
dec << packet->time.msecsTo(QTime::currentTime()) << "ms";
while (packet !=audioBuffer.end() && timediff > (int)latency) {
packet = audioBuffer.erase(packet); // returns next packet
}
}
else if (packet->seq == lastSeq+1 || packet->seq <= lastSeq)
{

Wyświetl plik

@ -24,7 +24,7 @@
#define INTERNAL_SAMPLE_RATE 48000
struct audioPacket {
quint16 seq;
quint32 seq;
QTime time;
quint16 sent;
QByteArray datain;
@ -85,7 +85,7 @@ private:
int chunkSize;
bool chunkAvailable;
quint16 lastSeq;
quint32 lastSeq;
QAudioFormat format;
QAudioDeviceInfo deviceInfo;

Wyświetl plik

@ -846,11 +846,19 @@ void udpAudio::dataReceived()
*/
control_packet_t in = (control_packet_t)r.constData();
if (in->type != 0x01 && in->len >= 0xAC) {
if (in->seq == 0)
{
// Seq number has rolled over.
seqPrefix++;
}
// 0xac is the smallest possible audio packet.
lastReceived = QTime::currentTime();
audioPacket tempAudio;
tempAudio.seq = in->seq;
tempAudio.seq = (quint32)seqPrefix << 16 | in->seq;
tempAudio.time = lastReceived;
tempAudio.sent = 0;
tempAudio.datain = r.mid(0x18);
@ -1067,8 +1075,8 @@ void udpBase::dataReceived(QByteArray r)
std::sort(rxSeqBuf.begin(), rxSeqBuf.end());
if (in->seq < rxSeqBuf.front())
{
qDebug(logUdp()) << this->metaObject()->className() << ": ******* seq number may have rolled over ****** previous highest: " << hex << rxSeqBuf.back() << " current: " << hex << in->seq;
qDebug(logUdp()) << this->metaObject()->className() << ": ******* seq number has rolled over ****** previous highest: " << hex << rxSeqBuf.back() << " current: " << hex << in->seq;
//seqPrefix++;
// Looks like it has rolled over so clear buffer and start again.
rxSeqBuf.clear();
return;

Wyświetl plik

@ -129,6 +129,8 @@ public:
quint32 packetsSent=0;
quint32 packetsLost=0;
quint16 seqPrefix=0;
private:
void sendRetransmitRequest();

Wyświetl plik

@ -620,7 +620,7 @@ void udpServer::commonReceived(QList<CLIENT*>* l,CLIENT* current, QByteArray r)
// Found matching entry?
// Send "untracked" as it has already been sent once.
QMutexLocker locker(&mutex);
qDebug(logUdpServer()) << current->ipAddress.toString() << ":" << current->port << ": Sending retransmit of " << Qt::hex << match->seqNum;
qDebug(logUdpServer()) << current->ipAddress.toString() << ":" << current->port << ": Sending retransmit of " << hex << match->seqNum;
match->retransmitCount++;
current->socket->writeDatagram(match->data, current->ipAddress, current->port);
match++;