ffplay_preview/
ffplay_preview.rs

1use std::{
2  io::{Read, Write},
3  process::{Command, Stdio},
4};
5
6use ffmpeg_sidecar::command::FfmpegCommand;
7
8/// Pipe from ffmpeg to ffplay for debugging purposes
9///
10/// ```console
11/// cargo run --example ffplay_preview
12/// ```
13fn main() {
14  let mut ffmpeg = FfmpegCommand::new()
15    .realtime()
16    .format("lavfi")
17    .input("testsrc=size=1920x1080:rate=60")
18    .codec_video("rawvideo")
19    .format("avi")
20    .output("-")
21    .spawn()
22    .unwrap();
23
24  let mut ffplay = Command::new("ffplay")
25    .args("-i -".split(' '))
26    .stdin(Stdio::piped())
27    .spawn()
28    .unwrap();
29
30  let mut ffmpeg_stdout = ffmpeg.take_stdout().unwrap();
31  let mut ffplay_stdin = ffplay.stdin.take().unwrap();
32
33  // pipe from ffmpeg stdout to ffplay stdin
34  let buf = &mut [0u8; 4096];
35  loop {
36    let n = ffmpeg_stdout.read(buf).unwrap();
37    if n == 0 {
38      break;
39    }
40    ffplay_stdin.write_all(&buf[..n]).unwrap();
41  }
42}