Audio Overhaul
This commit is contained in:
parent
18be1ecc9e
commit
139ca96954
@ -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"
|
||||
))
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user