add null output

This commit is contained in:
jb-alvarado 2022-06-27 11:49:43 +02:00
parent 8433c0d74a
commit 884082fa0a
4 changed files with 70 additions and 4 deletions

View File

@ -44,6 +44,7 @@ Check the [releases](https://github.com/ffplayout/ffplayout-engine/releases/late
- **stream** - **stream**
- **desktop** - **desktop**
- **HLS** - **HLS**
- **null** (for debugging)
- JSON RPC server, for getting infos about current playing and controlling - JSON RPC server, for getting infos about current playing and controlling
- [live ingest](/docs/live_ingest.md) - [live ingest](/docs/live_ingest.md)

View File

@ -115,10 +115,9 @@ text:
regex: ^.+[/\\](.*)(.mp4|.mkv)$ regex: ^.+[/\\](.*)(.mp4|.mkv)$
out: out:
help_text: The final playout compression. Set the settings to your needs. help_text: The final playout compression. Set the settings to your needs. 'mode'
'mode' has the standard options 'desktop', 'hls', 'stream'. Self made has the options 'desktop', 'hls', 'null', 'stream'.
outputs can be define, by adding script in output folder with an 'output' function 'preview' works only in streaming output and creates a separate preview stream.
inside. 'preview' works only in streaming output and creates a separate preview stream.
mode: 'stream' mode: 'stream'
preview: false preview: false
preview_param: >- preview_param: >-

View File

@ -11,6 +11,7 @@ use simplelog::*;
mod desktop; mod desktop;
mod hls; mod hls;
mod null;
mod stream; mod stream;
pub use hls::write_hls; pub use hls::write_hls;
@ -55,6 +56,7 @@ pub fn player(
// get ffmpeg output instance // get ffmpeg output instance
let mut enc_proc = match config.out.mode.as_str() { let mut enc_proc = match config.out.mode.as_str() {
"desktop" => desktop::output(config, &ff_log_format), "desktop" => desktop::output(config, &ff_log_format),
"null" => null::output(config, &ff_log_format),
"stream" => stream::output(config, &ff_log_format), "stream" => stream::output(config, &ff_log_format),
_ => panic!("Output mode doesn't exists!"), _ => panic!("Output mode doesn't exists!"),
}; };

View File

@ -0,0 +1,64 @@
use std::process::{self, Command, Stdio};
use simplelog::*;
use ffplayout_lib::filter::v_drawtext;
use ffplayout_lib::utils::{Media, PlayoutConfig};
use ffplayout_lib::vec_strings;
/// Desktop Output
///
/// Instead of streaming, we run a ffplay instance and play on desktop.
pub fn output(config: &PlayoutConfig, log_format: &str) -> process::Child {
let mut enc_filter: Vec<String> = vec![];
let mut enc_cmd = vec_strings![
"-hide_banner",
"-nostats",
"-v",
log_format,
"-re",
"-i",
"pipe:0",
"-f",
"null",
"-"
];
if config.text.add_text && !config.text.text_from_filename {
if let Some(socket) = config.text.bind_address.clone() {
debug!(
"Using drawtext filter, listening on address: <yellow>{}</>",
socket
);
let mut filter: String = "null,".to_string();
filter.push_str(
v_drawtext::filter_node(config, &Media::new(0, String::new(), false)).as_str(),
);
enc_filter = vec!["-vf".to_string(), filter];
}
}
enc_cmd.splice(7..7, enc_filter);
debug!(
"Encoder CMD: <bright-blue>\"ffmpeg {}\"</>",
enc_cmd.join(" ")
);
let enc_proc = match Command::new("ffmpeg")
.args(enc_cmd)
.stdin(Stdio::piped())
.stderr(Stdio::piped())
.spawn()
{
Err(e) => {
error!("couldn't spawn encoder process: {e}");
panic!("couldn't spawn encoder process: {e}")
}
Ok(proc) => proc,
};
enc_proc
}