могу не читать stdout, не писать в stdin
use tokio::io::{AsyncBufReadExt, AsyncWriteExt};
#[tokio::main]
async fn main() {
let filename = "/home/user/Intro.mp3";
let volume: i32 = 30;
let mut mplayer = match tokio::process::Command::new("mplayer")
.arg("-slave")
.arg("-idle")
.arg("-noautosub")
.arg("-noconsolecontrols")
.arg("-nolirc")
.arg("-really-quiet")
.args(&["-softvol", "-volume", &volume.to_string()])
.args(&["-vc", "null"])
.args(&["-vo", "null"])
.args(&["-ao", "alsa:device=plughw=1.0"])
.arg("")
.stdout(std::process::Stdio::piped())
.stdin(std::process::Stdio::piped())
.spawn()
{
Ok(p) => p,
Err(e) => {
println!("Can't mplayer: {}", e);
return;
}
};
let child_in = mplayer.stdin.as_mut().unwrap();
let mut child_out = tokio::io::BufReader::new(mplayer.stdout.as_mut().unwrap());
let mut interval_second = tokio::time::interval(std::time::Duration::from_secs(1));
let cmd = format!("loadfile {}\n", filename);
if let Err(e) = child_in.write_all(cmd.as_bytes()).await {
println!("mplayer error: {}", e);
}
if let Err(e) = child_in.flush().await {
println!("FLUSH: {}", e);
}
let mut line = String::new();
loop {
tokio::select! {
_ = child_out.read_line(&mut line) => {
println!("line:{}", line);
if line.is_empty() {
println!("MPlayer: break");
break;
}
}
_ = interval_second.tick() => {
println!("tick");
}
}
}
println!("finish");
}
Что по ошибке?
Никакой ошибки. Просто тишина
Обсуждают сегодня