mirror of
https://github.com/overte-org/overte.git
synced 2025-06-16 20:40:03 +02:00
Merge pull request #8348 from ZappoMan/beltAndSuspenders
implement codec renegotiation in client
This commit is contained in:
commit
a1dc9beddb
6 changed files with 27 additions and 4 deletions
|
@ -113,7 +113,7 @@ int AudioMixerClientData::parseData(ReceivedMessage& message) {
|
||||||
avatarAudioStream->setupCodec(_codec, _selectedCodecName, AudioConstants::MONO);
|
avatarAudioStream->setupCodec(_codec, _selectedCodecName, AudioConstants::MONO);
|
||||||
qDebug() << "creating new AvatarAudioStream... codec:" << _selectedCodecName;
|
qDebug() << "creating new AvatarAudioStream... codec:" << _selectedCodecName;
|
||||||
|
|
||||||
connect(avatarAudioStream, &InboundAudioStream::mismatchedAudioCodec, this, &AudioMixerClientData::sendSelectAudioFormat);
|
connect(avatarAudioStream, &InboundAudioStream::mismatchedAudioCodec, this, &AudioMixerClientData::handleMismatchAudioFormat);
|
||||||
|
|
||||||
auto emplaced = _audioStreams.emplace(
|
auto emplaced = _audioStreams.emplace(
|
||||||
QUuid(),
|
QUuid(),
|
||||||
|
@ -345,6 +345,11 @@ QJsonObject AudioMixerClientData::getAudioStreamStats() {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AudioMixerClientData::handleMismatchAudioFormat(SharedNodePointer node, const QString& currentCodec, const QString& recievedCodec) {
|
||||||
|
qDebug() << __FUNCTION__ << "sendingNode:" << *node << "currentCodec:" << currentCodec << "recievedCodec:" << recievedCodec;
|
||||||
|
sendSelectAudioFormat(node, currentCodec);
|
||||||
|
}
|
||||||
|
|
||||||
void AudioMixerClientData::sendSelectAudioFormat(SharedNodePointer node, const QString& selectedCodecName) {
|
void AudioMixerClientData::sendSelectAudioFormat(SharedNodePointer node, const QString& selectedCodecName) {
|
||||||
auto replyPacket = NLPacket::create(PacketType::SelectedAudioFormat);
|
auto replyPacket = NLPacket::create(PacketType::SelectedAudioFormat);
|
||||||
replyPacket->writeString(selectedCodecName);
|
replyPacket->writeString(selectedCodecName);
|
||||||
|
|
|
@ -84,6 +84,7 @@ signals:
|
||||||
void injectorStreamFinished(const QUuid& streamIdentifier);
|
void injectorStreamFinished(const QUuid& streamIdentifier);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
void handleMismatchAudioFormat(SharedNodePointer node, const QString& currentCodec, const QString& recievedCodec);
|
||||||
void sendSelectAudioFormat(SharedNodePointer node, const QString& selectedCodecName);
|
void sendSelectAudioFormat(SharedNodePointer node, const QString& selectedCodecName);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -119,6 +119,9 @@ AudioClient::AudioClient() :
|
||||||
this, &AudioClient::processReceivedSamples, Qt::DirectConnection);
|
this, &AudioClient::processReceivedSamples, Qt::DirectConnection);
|
||||||
connect(this, &AudioClient::changeDevice, this, [=](const QAudioDeviceInfo& outputDeviceInfo) { switchOutputToAudioDevice(outputDeviceInfo); });
|
connect(this, &AudioClient::changeDevice, this, [=](const QAudioDeviceInfo& outputDeviceInfo) { switchOutputToAudioDevice(outputDeviceInfo); });
|
||||||
|
|
||||||
|
connect(&_receivedAudioStream, &InboundAudioStream::mismatchedAudioCodec, this, &AudioClient::handleMismatchAudioFormat);
|
||||||
|
|
||||||
|
|
||||||
_inputDevices = getDeviceNames(QAudio::AudioInput);
|
_inputDevices = getDeviceNames(QAudio::AudioInput);
|
||||||
_outputDevices = getDeviceNames(QAudio::AudioOutput);
|
_outputDevices = getDeviceNames(QAudio::AudioOutput);
|
||||||
|
|
||||||
|
@ -147,6 +150,12 @@ AudioClient::~AudioClient() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AudioClient::handleMismatchAudioFormat(SharedNodePointer node, const QString& currentCodec, const QString& recievedCodec) {
|
||||||
|
qDebug() << __FUNCTION__ << "sendingNode:" << *node << "currentCodec:" << currentCodec << "recievedCodec:" << recievedCodec;
|
||||||
|
selectAudioFormat(recievedCodec);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void AudioClient::reset() {
|
void AudioClient::reset() {
|
||||||
_receivedAudioStream.reset();
|
_receivedAudioStream.reset();
|
||||||
_stats.reset();
|
_stats.reset();
|
||||||
|
@ -532,7 +541,13 @@ void AudioClient::negotiateAudioFormat() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioClient::handleSelectedAudioFormat(QSharedPointer<ReceivedMessage> message) {
|
void AudioClient::handleSelectedAudioFormat(QSharedPointer<ReceivedMessage> message) {
|
||||||
_selectedCodecName = message->readString();
|
QString selectedCodecName = message->readString();
|
||||||
|
selectAudioFormat(selectedCodecName);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AudioClient::selectAudioFormat(const QString& selectedCodecName) {
|
||||||
|
|
||||||
|
_selectedCodecName = selectedCodecName;
|
||||||
|
|
||||||
qDebug() << "Selected Codec:" << _selectedCodecName;
|
qDebug() << "Selected Codec:" << _selectedCodecName;
|
||||||
|
|
||||||
|
|
|
@ -104,6 +104,7 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
void negotiateAudioFormat();
|
void negotiateAudioFormat();
|
||||||
|
void selectAudioFormat(const QString& selectedCodecName);
|
||||||
|
|
||||||
const MixedProcessedAudioStream& getReceivedAudioStream() const { return _receivedAudioStream; }
|
const MixedProcessedAudioStream& getReceivedAudioStream() const { return _receivedAudioStream; }
|
||||||
MixedProcessedAudioStream& getReceivedAudioStream() { return _receivedAudioStream; }
|
MixedProcessedAudioStream& getReceivedAudioStream() { return _receivedAudioStream; }
|
||||||
|
@ -153,6 +154,7 @@ public slots:
|
||||||
void handleNoisyMutePacket(QSharedPointer<ReceivedMessage> message);
|
void handleNoisyMutePacket(QSharedPointer<ReceivedMessage> message);
|
||||||
void handleMuteEnvironmentPacket(QSharedPointer<ReceivedMessage> message);
|
void handleMuteEnvironmentPacket(QSharedPointer<ReceivedMessage> message);
|
||||||
void handleSelectedAudioFormat(QSharedPointer<ReceivedMessage> message);
|
void handleSelectedAudioFormat(QSharedPointer<ReceivedMessage> message);
|
||||||
|
void handleMismatchAudioFormat(SharedNodePointer node, const QString& currentCodec, const QString& recievedCodec);
|
||||||
|
|
||||||
void sendDownstreamAudioStatsPacket() { _stats.sendDownstreamAudioStatsPacket(); }
|
void sendDownstreamAudioStatsPacket() { _stats.sendDownstreamAudioStatsPacket(); }
|
||||||
void handleAudioInput();
|
void handleAudioInput();
|
||||||
|
|
|
@ -147,7 +147,7 @@ int InboundAudioStream::parseData(ReceivedMessage& message) {
|
||||||
writeDroppableSilentSamples(networkSamples);
|
writeDroppableSilentSamples(networkSamples);
|
||||||
// inform others of the mismatch
|
// inform others of the mismatch
|
||||||
auto sendingNode = DependencyManager::get<NodeList>()->nodeWithUUID(message.getSourceID());
|
auto sendingNode = DependencyManager::get<NodeList>()->nodeWithUUID(message.getSourceID());
|
||||||
emit mismatchedAudioCodec(sendingNode, _selectedCodecName);
|
emit mismatchedAudioCodec(sendingNode, _selectedCodecName, codecInPacket);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -182,7 +182,7 @@ public:
|
||||||
void cleanupCodec();
|
void cleanupCodec();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void mismatchedAudioCodec(SharedNodePointer sendingNode, const QString& desiredCodec);
|
void mismatchedAudioCodec(SharedNodePointer sendingNode, const QString& currentCodec, const QString& recievedCodec);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
/// This function should be called every second for all the stats to function properly. If dynamic jitter buffers
|
/// This function should be called every second for all the stats to function properly. If dynamic jitter buffers
|
||||||
|
|
Loading…
Reference in a new issue