jump out from source loop when playout is terminated

This commit is contained in:
jb-alvarado 2023-10-01 14:11:04 +02:00
parent 902fb99966
commit cf6e5663e9
6 changed files with 42 additions and 46 deletions

60
Cargo.lock generated
View File

@ -352,9 +352,9 @@ dependencies = [
[[package]]
name = "anstream"
version = "0.6.1"
version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f6cd65a4b849ace0b7f6daeebcc1a1d111282227ca745458c61dbf670e52a597"
checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44"
dependencies = [
"anstyle",
"anstyle-parse",
@ -390,9 +390,9 @@ dependencies = [
[[package]]
name = "anstyle-wincon"
version = "3.0.0"
version = "3.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0238ca56c96dfa37bdf7c373c8886dd591322500aceeeccdb2216fe06dc2f796"
checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628"
dependencies = [
"anstyle",
"windows-sys",
@ -492,7 +492,7 @@ dependencies = [
"log",
"parking",
"polling",
"rustix 0.37.23",
"rustix 0.37.24",
"slab",
"socket2 0.4.9",
"waker-fn",
@ -669,9 +669,9 @@ dependencies = [
[[package]]
name = "brotli"
version = "3.3.4"
version = "3.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68"
checksum = "516074a47ef4bce09577a3b379392300159ce5b1ba2e501ff1c819950066100f"
dependencies = [
"alloc-no-stdlib",
"alloc-stdlib",
@ -680,9 +680,9 @@ dependencies = [
[[package]]
name = "brotli-decompressor"
version = "2.3.4"
version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744"
checksum = "da74e2b81409b1b743f8f0c62cc6254afefb8b8e50bbfe3735550f7aeefa3448"
dependencies = [
"alloc-no-stdlib",
"alloc-stdlib",
@ -960,7 +960,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
dependencies = [
"cfg-if",
"hashbrown 0.14.0",
"hashbrown 0.14.1",
"lock_api",
"once_cell",
"parking_lot_core",
@ -1488,9 +1488,9 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
[[package]]
name = "hashbrown"
version = "0.14.0"
version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
checksum = "7dfda62a12f55daeae5015f81b0baea145391cb4520f86c248fc615d72640d12"
dependencies = [
"ahash",
"allocator-api2",
@ -1502,7 +1502,7 @@ version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7"
dependencies = [
"hashbrown 0.14.0",
"hashbrown 0.14.1",
]
[[package]]
@ -1702,12 +1702,12 @@ dependencies = [
[[package]]
name = "indexmap"
version = "2.0.1"
version = "2.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ad227c3af19d4914570ad36d30409928b75967c298feb9ea1969db3a610bb14e"
checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897"
dependencies = [
"equivalent",
"hashbrown 0.14.0",
"hashbrown 0.14.1",
]
[[package]]
@ -1910,9 +1910,9 @@ checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
[[package]]
name = "linux-raw-sys"
version = "0.4.7"
version = "0.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a9bad9f94746442c783ca431b22403b519cd7fbeed0533fdd6328b2f2212128"
checksum = "3852614a3bd9ca9804678ba6be5e3b8ce76dfc902cae004e3e0c44051b6e88db"
[[package]]
name = "local-channel"
@ -2441,9 +2441,9 @@ dependencies = [
[[package]]
name = "regex"
version = "1.9.5"
version = "1.9.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47"
checksum = "ebee201405406dbf528b8b672104ae6d6d63e6d118cb10e4d51abbc7b58044ff"
dependencies = [
"aho-corasick",
"memchr",
@ -2453,9 +2453,9 @@ dependencies = [
[[package]]
name = "regex-automata"
version = "0.3.8"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795"
checksum = "59b23e92ee4318893fa3fe3e6fb365258efbfe6ac6ab30f090cdcbb7aa37efa9"
dependencies = [
"aho-corasick",
"memchr",
@ -2586,9 +2586,9 @@ dependencies = [
[[package]]
name = "rustix"
version = "0.37.23"
version = "0.37.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06"
checksum = "4279d76516df406a8bd37e7dff53fd37d1a093f997a3c34a5c21658c126db06d"
dependencies = [
"bitflags 1.3.2",
"errno",
@ -2600,14 +2600,14 @@ dependencies = [
[[package]]
name = "rustix"
version = "0.38.14"
version = "0.38.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "747c788e9ce8e92b12cd485c49ddf90723550b654b32508f979b71a7b1ecda4f"
checksum = "d2f9da0cbd88f9f09e7814e388301c8414c51c62aa6ce1e4b5c551d49d96e531"
dependencies = [
"bitflags 2.4.0",
"errno",
"libc",
"linux-raw-sys 0.4.7",
"linux-raw-sys 0.4.8",
"windows-sys",
]
@ -2738,7 +2738,7 @@ version = "0.9.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a49e178e4452f45cb61d0cd8cebc1b0fafd3e41929e996cef79aa3aca91f574"
dependencies = [
"indexmap 2.0.1",
"indexmap 2.0.2",
"itoa",
"ryu",
"serde",
@ -2953,7 +2953,7 @@ dependencies = [
"futures-util",
"hashlink",
"hex",
"indexmap 2.0.1",
"indexmap 2.0.2",
"log",
"memchr",
"once_cell",
@ -3166,7 +3166,7 @@ dependencies = [
"cfg-if",
"fastrand 2.0.1",
"redox_syscall",
"rustix 0.38.14",
"rustix 0.38.15",
"windows-sys",
]

View File

@ -509,7 +509,8 @@ fn timed_source(
let mut new_node = node.clone();
new_node.process = Some(false);
trace!("timed source ist last: {last}");
trace!("Node begin: {}", node.begin.unwrap());
trace!("timed source is last: {last}");
if config.playlist.length.contains(':') {
let time_shift = playout_stat.time_shift.lock().unwrap();
@ -524,9 +525,7 @@ fn timed_source(
debug!("Delta: <yellow>{shifted_delta:.3}</>");
}
let sync = check_sync(config, shifted_delta);
if !sync {
if !check_sync(config, shifted_delta) {
new_node.cmd = None;
return new_node;

View File

@ -84,6 +84,11 @@ pub fn player(
'source_iter: for node in get_source {
*play_control.current_media.lock().unwrap() = Some(node.clone());
if proc_control.is_terminated.load(Ordering::SeqCst) {
debug!("Playout is terminated, break out from source loop");
break;
}
if !node.process.unwrap() {
continue;
}
@ -112,10 +117,7 @@ pub fn player(
trace!("Decoder CMD: {:?}", node.cmd);
let mut cmd = match node.cmd {
Some(cmd) => cmd,
None => break,
};
let mut cmd = if let Some(cmd) = node.cmd { cmd } else { break };
let mut dec_cmd = vec_strings!["-hide_banner", "-nostats", "-v", &ff_log_format];
dec_cmd.append(&mut cmd);
@ -217,7 +219,7 @@ pub fn player(
};
}
trace!("Out of source loop");
debug!("Out of source loop");
sleep(Duration::from_secs(1));

View File

@ -145,9 +145,7 @@ impl ProcessControl {
if self.is_alive.load(Ordering::SeqCst) {
self.is_alive.store(false, Ordering::SeqCst);
// if let Some(rpc) = &*self.rpc_handle.lock().unwrap() {
// rpc.clone().close()
// };
trace!("Playout is alive and processes are terminated");
for unit in [Decoder, Encoder, Ingest] {
if let Err(e) = self.stop(unit) {

View File

@ -457,7 +457,7 @@ pub fn get_delta(config: &PlayoutConfig, begin: &f64) -> (f64, f64) {
/// Check if clip in playlist is in sync with global time.
pub fn check_sync(config: &PlayoutConfig, delta: f64) -> bool {
if delta.abs() > config.general.stop_threshold && config.general.stop_threshold > 0.0 {
error!("Clip begin out of sync for <yellow>{delta:.3}</> seconds. Stop playout!");
error!("Clip begin out of sync for <yellow>{delta:.3}</> seconds.");
return false;
}

View File

@ -13,7 +13,6 @@ use ffplayout_lib::utils::{
};
#[test]
#[ignore]
fn test_random_list() {
let clip_list = vec![
Media::new(0, "./assets/with_audio.mp4", true), // 30 seconds
@ -30,7 +29,6 @@ fn test_random_list() {
}
#[test]
#[ignore]
fn test_ordered_list() {
let clip_list = vec![
Media::new(0, "./assets/with_audio.mp4", true), // 30 seconds
@ -53,7 +51,6 @@ fn test_ordered_list() {
}
#[test]
#[ignore]
fn test_filler_list() {
let mut config = PlayoutConfig::new(None);
config.storage.filler = "assets/".into();