Audio Overhaul

This commit is contained in:
Brad Stein 2025-06-30 01:19:28 -05:00
parent 18be1ecc9e
commit 139ca96954

View File

@ -6,6 +6,7 @@ use futures_util::Stream;
use gstreamer as gst;
use gstreamer_app as gst_app;
use gst::prelude::*;
use gst::ElementFactory;
use lesavka_common::lesavka::AudioPacket;
use tokio_stream::wrappers::ReceiverStream;
use tonic::Status;
@ -50,12 +51,7 @@ pub async fn eye_ear(alsa_dev: &str, id: u32) -> anyhow::Result<AudioStream> {
* alsasrc voaacenc appsink
*
*/
let desc = format!(
"alsasrc name=audsrc device=\"{alsa_dev}\" do-timestamp=true ! \
audio/x-raw,channels=2,rate=48000 ! \
voaacenc bitrate=192000 ! aacparse ! queue ! \
appsink name=asink emit-signals=true max-buffers=64 drop=true"
);
let desc = build_pipeline_desc(alsa_dev)?;
let pipeline: gst::Pipeline = gst::parse::launch(&desc)?
.downcast()
@ -115,3 +111,16 @@ pub async fn eye_ear(alsa_dev: &str, id: u32) -> anyhow::Result<AudioStream> {
inner: ReceiverStream::new(rx),
})
}
fn build_pipeline_desc(dev: &str) -> anyhow::Result<String> {
let enc = ["voaacenc", "avenc_aac", "fdkaacenc"]
.into_iter()
.find(|&e| ElementFactory::find(e).is_some())
.ok_or_else(|| anyhow::anyhow!("no AAC encoder plugin available"))?;
Ok(format!(
"alsasrc name=audsrc device=\"{dev}\" do-timestamp=true ! \
audio/x-raw,channels=2,rate=48000 ! {enc} bitrate=192000 ! \
aacparse ! queue ! appsink name=asink emit-signals=true max-buffers=64 drop=true"
))
}