add pipe example
This commit is contained in:
parent
e8d828f60d
commit
86695a0d98
95
examples/pipe_ffmpeg.rs
Normal file
95
examples/pipe_ffmpeg.rs
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
use std::{
|
||||||
|
io::{prelude::*, Read},
|
||||||
|
process::{Command, Stdio},
|
||||||
|
thread::sleep,
|
||||||
|
time::Duration,
|
||||||
|
};
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let mut enc_proc = match Command::new("ffplay")
|
||||||
|
.args(["-v", "error", "-hide_banner", "-nostats", "-i", "pipe:0"])
|
||||||
|
.stdin(Stdio::piped())
|
||||||
|
.stderr(Stdio::piped())
|
||||||
|
.spawn()
|
||||||
|
{
|
||||||
|
Err(e) => panic!("couldn't spawn ffplay: {}", e),
|
||||||
|
Ok(proc) => proc,
|
||||||
|
};
|
||||||
|
|
||||||
|
let mut buffer: [u8; 65424] = [0; 65424];
|
||||||
|
|
||||||
|
let mut dec_proc = match Command::new("ffmpeg")
|
||||||
|
.args([
|
||||||
|
"-f",
|
||||||
|
"lavfi",
|
||||||
|
"-i",
|
||||||
|
"testsrc=duration=6:size=1280x720:rate=25",
|
||||||
|
"-f",
|
||||||
|
"lavfi",
|
||||||
|
"-i",
|
||||||
|
"anoisesrc=d=6:c=pink:r=48000:a=0.5",
|
||||||
|
"-pix_fmt",
|
||||||
|
"yuv420p",
|
||||||
|
"-c:v",
|
||||||
|
"mpeg2video",
|
||||||
|
"-g",
|
||||||
|
"1",
|
||||||
|
"-b:v",
|
||||||
|
"50000k",
|
||||||
|
"-minrate",
|
||||||
|
"50000k",
|
||||||
|
"-maxrate",
|
||||||
|
"50000k",
|
||||||
|
"-bufsize",
|
||||||
|
"25000k",
|
||||||
|
"-c:a",
|
||||||
|
"s302m",
|
||||||
|
"-strict",
|
||||||
|
"-2",
|
||||||
|
"-ar",
|
||||||
|
"48000",
|
||||||
|
"-ac",
|
||||||
|
"2",
|
||||||
|
"-f",
|
||||||
|
"mpegts",
|
||||||
|
"-",
|
||||||
|
])
|
||||||
|
.stdout(Stdio::piped())
|
||||||
|
.stderr(Stdio::piped())
|
||||||
|
.spawn()
|
||||||
|
{
|
||||||
|
Err(e) => panic!("couldn't spawn ffmpeg: {}", e),
|
||||||
|
Ok(proc) => proc,
|
||||||
|
};
|
||||||
|
|
||||||
|
let mut enc_writer = enc_proc.stdin.as_ref().unwrap();
|
||||||
|
let dec_reader = dec_proc.stdout.as_mut().unwrap();
|
||||||
|
|
||||||
|
loop {
|
||||||
|
let bytes_len = match dec_reader.read(&mut buffer[..]) {
|
||||||
|
Ok(length) => length,
|
||||||
|
Err(e) => panic!("Reading error from decoder: {:?}", e)
|
||||||
|
};
|
||||||
|
|
||||||
|
match enc_writer.write(&buffer[..bytes_len]) {
|
||||||
|
Ok(_) => (),
|
||||||
|
Err(e) => panic!("Err: {:?}", e),
|
||||||
|
};
|
||||||
|
|
||||||
|
if bytes_len == 0 {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
match dec_proc.wait() {
|
||||||
|
Ok(_) => println!("decoding done..."),
|
||||||
|
Err(e) => panic!("Enc error: {:?}", e),
|
||||||
|
}
|
||||||
|
|
||||||
|
sleep(Duration::from_secs(1));
|
||||||
|
|
||||||
|
match enc_proc.kill() {
|
||||||
|
Ok(_) => println!("Playout done..."),
|
||||||
|
Err(e) => panic!("Enc error: {:?}", e),
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user