[fix](trx-server): enable audio by default and fix playback thread panic

Enable audio streaming by default in AudioConfig.

Fix panic in audio playback thread caused by calling
tokio::runtime::Handle::current() from a plain std::thread.
Use rx.blocking_recv() instead, which is the correct API for
consuming a tokio mpsc receiver from a synchronous context.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Stanislaw Grams <stanislawgrams@gmail.com>
This commit is contained in:
2026-02-07 15:05:25 +01:00
parent 96edf7fc09
commit 3b606688bc
2 changed files with 11 additions and 14 deletions
+9 -12
View File
@@ -206,22 +206,19 @@ fn run_playback(
stream.play()?;
info!("Audio playback: started");
let rt = tokio::runtime::Handle::current();
let mut pcm_buf = vec![0f32; frame_samples];
rt.block_on(async {
while let Some(packet) = rx.recv().await {
match decoder.decode_float(&packet, &mut pcm_buf, false) {
Ok(decoded) => {
let mut ring = ring_writer.lock().unwrap();
ring.extend(&pcm_buf[..decoded * channels as usize]);
}
Err(e) => {
warn!("Opus decode error: {}", e);
}
while let Some(packet) = rx.blocking_recv() {
match decoder.decode_float(&packet, &mut pcm_buf, false) {
Ok(decoded) => {
let mut ring = ring_writer.lock().unwrap();
ring.extend(&pcm_buf[..decoded * channels as usize]);
}
Err(e) => {
warn!("Opus decode error: {}", e);
}
}
});
}
Ok(())
}
+2 -2
View File
@@ -172,7 +172,7 @@ pub struct AudioConfig {
impl Default for AudioConfig {
fn default() -> Self {
Self {
enabled: false,
enabled: true,
listen: IpAddr::V4(std::net::Ipv4Addr::LOCALHOST),
port: 4533,
rx_enabled: true,
@@ -305,7 +305,7 @@ mod tests {
assert!(config.listen.enabled);
assert_eq!(config.listen.port, 4532);
assert!(config.listen.auth.tokens.is_empty());
assert!(!config.audio.enabled);
assert!(config.audio.enabled);
assert_eq!(config.audio.port, 4533);
assert_eq!(config.audio.sample_rate, 48000);
}