From 4c852f5260aaa86c5d550c17757d9c61faac8de9 Mon Sep 17 00:00:00 2001 From: linbo <1034003879@qq.com> Date: Fri, 10 Oct 2025 10:27:45 +0800 Subject: [PATCH] update ffmpeg_speaker --- .../speaker/ffmpeg_speaker/ffmpeg_speaker.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/devices/speaker/ffmpeg_speaker/ffmpeg_speaker.cpp b/src/devices/speaker/ffmpeg_speaker/ffmpeg_speaker.cpp index 0c50eedb..22302ecf 100644 --- a/src/devices/speaker/ffmpeg_speaker/ffmpeg_speaker.cpp +++ b/src/devices/speaker/ffmpeg_speaker/ffmpeg_speaker.cpp @@ -78,16 +78,17 @@ void ffmpegSpeaker::start() { } void ffmpegSpeaker::resetPlayState() { - state_.is_decoding = false; - state_.is_running = false; - state_.is_paused = false; - audio_path_.clear(); - if (pcm_handle_) { snd_pcm_drain(pcm_handle_); snd_pcm_close(pcm_handle_); pcm_handle_ = nullptr; } + state_.is_decoding = false; + state_.is_running = false; + state_.is_paused = false; + audio_path_.clear(); + + LOG(INFO) << "[ffmpegSpeaker] (resetPlayState): Success, id=" << id_; } @@ -346,7 +347,12 @@ void ffmpegSpeaker::play_audio_() { else { //音频数据队列为空且解码已经结束,退出 if (!state_.is_decoding) { - break; + if (pcm_handle_) { + // 停止播放,清空缓存,否则结束会有杂音 + snd_pcm_drop(pcm_handle_); + LOG(INFO) << "[ffmpegSpeaker] ALSA buffer cleared"; + break; + } } this_thread::sleep_for(chrono::seconds(1)); // 空队列等待 }