Implement core of filter subcommand
This commit is contained in:
parent
bac34e94c5
commit
413375102e
3 changed files with 47 additions and 0 deletions
43
src/commands/filter.rs
Normal file
43
src/commands/filter.rs
Normal file
|
@ -0,0 +1,43 @@
|
|||
use std::{
|
||||
error::Error,
|
||||
io,
|
||||
io::prelude::*
|
||||
};
|
||||
|
||||
use clap::{App, ArgMatches, SubCommand};
|
||||
use futures::Stream;
|
||||
|
||||
use super::StdinStream;
|
||||
use webmetro::{
|
||||
chunk::{
|
||||
Chunk,
|
||||
WebmStream
|
||||
},
|
||||
fixers::ChunkStream,
|
||||
stream_parser::StreamEbml
|
||||
};
|
||||
|
||||
pub fn options() -> App<'static, 'static> {
|
||||
SubCommand::with_name("filter")
|
||||
.about("Copies WebM from stdin to stdout, applying the same cleanup & stripping the relay server does.")
|
||||
}
|
||||
|
||||
pub fn run(_args: &ArgMatches) -> Result<(), Box<Error>> {
|
||||
|
||||
let stdin = io::stdin();
|
||||
let chunk_stream: Box<Stream<Item = Chunk, Error = Box<Error>>> = Box::new(
|
||||
StdinStream::new(stdin.lock())
|
||||
.parse_ebml()
|
||||
.chunk_webm()
|
||||
.map_err(|err| Box::new(err) as Box<Error>)
|
||||
.fix_timecodes()
|
||||
);
|
||||
|
||||
let stdout = io::stdout();
|
||||
let mut stdout_writer = stdout.lock();
|
||||
for chunk in chunk_stream.wait() {
|
||||
stdout_writer.write_all(chunk?.as_ref())?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
|
@ -10,6 +10,7 @@ use futures::{
|
|||
};
|
||||
|
||||
pub mod dump;
|
||||
pub mod filter;
|
||||
pub mod relay;
|
||||
|
||||
/// A hackish adapter that makes chunks of bytes from stdin available as a Stream;
|
||||
|
|
|
@ -8,6 +8,7 @@ mod commands;
|
|||
use clap::{App, AppSettings};
|
||||
use commands::{
|
||||
relay,
|
||||
filter,
|
||||
dump
|
||||
};
|
||||
|
||||
|
@ -17,6 +18,7 @@ fn options() -> App<'static, 'static> {
|
|||
.about("Utilities for broadcasting & relaying live WebM video/audio streams")
|
||||
.setting(AppSettings::VersionlessSubcommands)
|
||||
.subcommand(relay::options())
|
||||
.subcommand(filter::options())
|
||||
.subcommand(dump::options())
|
||||
}
|
||||
|
||||
|
@ -24,6 +26,7 @@ fn main() {
|
|||
let args = options().get_matches();
|
||||
|
||||
match args.subcommand() {
|
||||
("filter", Some(sub_args)) => filter::run(sub_args),
|
||||
("relay", Some(sub_args)) => relay::run(sub_args),
|
||||
("dump", Some(sub_args)) => dump::run(sub_args),
|
||||
_ => {
|
||||
|
|
Loading…
Reference in a new issue