forked from xiaozhi/xiaozhi-esp32
Add audio_send_queue to synchronize timestamp
This commit is contained in:
@@ -121,10 +121,10 @@ bool MqttProtocol::SendText(const std::string& text) {
|
||||
return true;
|
||||
}
|
||||
|
||||
void MqttProtocol::SendAudio(const AudioStreamPacket& packet) {
|
||||
bool MqttProtocol::SendAudio(const AudioStreamPacket& packet) {
|
||||
std::lock_guard<std::mutex> lock(channel_mutex_);
|
||||
if (udp_ == nullptr) {
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
std::string nonce(aes_nonce_);
|
||||
@@ -141,10 +141,10 @@ void MqttProtocol::SendAudio(const AudioStreamPacket& packet) {
|
||||
if (mbedtls_aes_crypt_ctr(&aes_ctx_, packet.payload.size(), &nc_off, (uint8_t*)nonce.c_str(), stream_block,
|
||||
(uint8_t*)packet.payload.data(), (uint8_t*)&encrypted[nonce.size()]) != 0) {
|
||||
ESP_LOGE(TAG, "Failed to encrypt audio data");
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
udp_->Send(encrypted);
|
||||
return udp_->Send(encrypted) > 0;
|
||||
}
|
||||
|
||||
void MqttProtocol::CloseAudioChannel() {
|
||||
|
||||
@@ -26,7 +26,7 @@ public:
|
||||
~MqttProtocol();
|
||||
|
||||
bool Start() override;
|
||||
void SendAudio(const AudioStreamPacket& packet) override;
|
||||
bool SendAudio(const AudioStreamPacket& packet) override;
|
||||
bool OpenAudioChannel() override;
|
||||
void CloseAudioChannel() override;
|
||||
bool IsAudioChannelOpened() const override;
|
||||
|
||||
@@ -63,7 +63,7 @@ public:
|
||||
virtual bool OpenAudioChannel() = 0;
|
||||
virtual void CloseAudioChannel() = 0;
|
||||
virtual bool IsAudioChannelOpened() const = 0;
|
||||
virtual void SendAudio(const AudioStreamPacket& packet) = 0;
|
||||
virtual bool SendAudio(const AudioStreamPacket& packet) = 0;
|
||||
virtual void SendWakeWordDetected(const std::string& wake_word);
|
||||
virtual void SendStartListening(ListeningMode mode);
|
||||
virtual void SendStopListening();
|
||||
|
||||
@@ -28,9 +28,9 @@ bool WebsocketProtocol::Start() {
|
||||
return true;
|
||||
}
|
||||
|
||||
void WebsocketProtocol::SendAudio(const AudioStreamPacket& packet) {
|
||||
bool WebsocketProtocol::SendAudio(const AudioStreamPacket& packet) {
|
||||
if (websocket_ == nullptr) {
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (version_ == 2) {
|
||||
@@ -44,7 +44,7 @@ void WebsocketProtocol::SendAudio(const AudioStreamPacket& packet) {
|
||||
bp2->payload_size = htonl(packet.payload.size());
|
||||
memcpy(bp2->payload, packet.payload.data(), packet.payload.size());
|
||||
|
||||
websocket_->Send(serialized.data(), serialized.size(), true);
|
||||
return websocket_->Send(serialized.data(), serialized.size(), true);
|
||||
} else if (version_ == 3) {
|
||||
std::string serialized;
|
||||
serialized.resize(sizeof(BinaryProtocol3) + packet.payload.size());
|
||||
@@ -54,9 +54,9 @@ void WebsocketProtocol::SendAudio(const AudioStreamPacket& packet) {
|
||||
bp3->payload_size = htons(packet.payload.size());
|
||||
memcpy(bp3->payload, packet.payload.data(), packet.payload.size());
|
||||
|
||||
websocket_->Send(serialized.data(), serialized.size(), true);
|
||||
return websocket_->Send(serialized.data(), serialized.size(), true);
|
||||
} else {
|
||||
websocket_->Send(packet.payload.data(), packet.payload.size(), true);
|
||||
return websocket_->Send(packet.payload.data(), packet.payload.size(), true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ public:
|
||||
~WebsocketProtocol();
|
||||
|
||||
bool Start() override;
|
||||
void SendAudio(const AudioStreamPacket& packet) override;
|
||||
bool SendAudio(const AudioStreamPacket& packet) override;
|
||||
bool OpenAudioChannel() override;
|
||||
void CloseAudioChannel() override;
|
||||
bool IsAudioChannelOpened() const override;
|
||||
|
||||
Reference in New Issue
Block a user