Audio Fix
This commit is contained in:
parent
139ca96954
commit
263417844f
@ -65,6 +65,22 @@ pub async fn eye_ear(alsa_dev: &str, id: u32) -> anyhow::Result<AudioStream> {
|
|||||||
|
|
||||||
let (tx, rx) = tokio::sync::mpsc::channel(8192);
|
let (tx, rx) = tokio::sync::mpsc::channel(8192);
|
||||||
|
|
||||||
|
let bus = pipeline.bus().expect("no bus");
|
||||||
|
std::thread::spawn(move || {
|
||||||
|
for msg in bus.iter_timed(gst::ClockTime::NONE) {
|
||||||
|
use gst::MessageView::*;
|
||||||
|
match msg.view() {
|
||||||
|
Error(e) => error!("💥 audio pipeline: {} ({})",
|
||||||
|
e.error(), e.debug().unwrap_or_default()),
|
||||||
|
Warning(w) => warn!("⚠️ audio pipeline: {} ({})",
|
||||||
|
w.error(), w.debug().unwrap_or_default()),
|
||||||
|
StateChanged(s) if s.current() == gst::State::Playing =>
|
||||||
|
debug!("🎶 audio pipeline PLAYING"),
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
/*──────────── callbacks ────────────*/
|
/*──────────── callbacks ────────────*/
|
||||||
sink.set_callbacks(
|
sink.set_callbacks(
|
||||||
gst_app::AppSinkCallbacks::builder()
|
gst_app::AppSinkCallbacks::builder()
|
||||||
@ -113,14 +129,18 @@ pub async fn eye_ear(alsa_dev: &str, id: u32) -> anyhow::Result<AudioStream> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn build_pipeline_desc(dev: &str) -> anyhow::Result<String> {
|
fn build_pipeline_desc(dev: &str) -> anyhow::Result<String> {
|
||||||
|
use gst::ElementFactory; // <- simpler probe
|
||||||
let enc = ["voaacenc", "avenc_aac", "fdkaacenc"]
|
let enc = ["voaacenc", "avenc_aac", "fdkaacenc"]
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.find(|&e| ElementFactory::find(e).is_some())
|
.find(|&e| ElementFactory::find(e).is_some())
|
||||||
.ok_or_else(|| anyhow::anyhow!("no AAC encoder plugin available"))?;
|
.ok_or_else(|| anyhow::anyhow!("no AAC encoder plugin available"))?;
|
||||||
|
|
||||||
Ok(format!(
|
Ok(format!(
|
||||||
"alsasrc name=audsrc device=\"{dev}\" do-timestamp=true ! \
|
// ➊ provide-clock=false lets the USB gadget be master
|
||||||
audio/x-raw,channels=2,rate=48000 ! {enc} bitrate=192000 ! \
|
// ➋ audioconvert+audioresample make sure caps match encoder
|
||||||
aacparse ! queue ! appsink name=asink emit-signals=true max-buffers=64 drop=true"
|
"alsasrc device=\"{dev}\" provide-clock=false do-timestamp=true ! \
|
||||||
|
audioconvert ! audioresample ! audio/x-raw,channels=2,rate=48000,format=F32LE ! \
|
||||||
|
{enc} bitrate=192000 ! aacparse ! queue ! \
|
||||||
|
appsink name=asink emit-signals=true max-buffers=64 drop=true"
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|||||||
@ -119,7 +119,7 @@ pub async fn eye_ball(
|
|||||||
i.error(), i.debug().unwrap_or_default());
|
i.error(), i.debug().unwrap_or_default());
|
||||||
}
|
}
|
||||||
StateChanged(s) if s.current() == gst::State::Playing => {
|
StateChanged(s) if s.current() == gst::State::Playing => {
|
||||||
info!(target:"lesavka_server::video",
|
debug!(target:"lesavka_server::video",
|
||||||
eye = %eye_clone,
|
eye = %eye_clone,
|
||||||
"🎬 pipeline PLAYING");
|
"🎬 pipeline PLAYING");
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user