add null output
This commit is contained in:
parent
8433c0d74a
commit
884082fa0a
@ -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)
|
||||||
|
|
||||||
|
@ -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: >-
|
||||||
|
@ -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!"),
|
||||||
};
|
};
|
||||||
|
64
ffplayout-engine/src/output/null.rs
Normal file
64
ffplayout-engine/src/output/null.rs
Normal 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
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user