diff options
Diffstat (limited to 'common')
-rw-r--r-- | common/src/config.rs | 66 | ||||
-rw-r--r-- | common/src/lib.rs | 19 | ||||
-rw-r--r-- | common/src/stream.rs | 13 |
3 files changed, 79 insertions, 19 deletions
diff --git a/common/src/config.rs b/common/src/config.rs index aded4ff..e30e70b 100644 --- a/common/src/config.rs +++ b/common/src/config.rs @@ -4,7 +4,7 @@ Copyright (C) 2023 metamuffin <metamuffin.org> */ -use crate::user::PermissionSet; +use crate::{user::PermissionSet, EncodingProfile}; use serde::{Deserialize, Serialize}; use std::{collections::HashMap, path::PathBuf}; @@ -19,6 +19,7 @@ pub struct GlobalConfig { #[serde(default = "default::temp_path")] pub temp_path: PathBuf, #[serde(default = "default::cache_path")] pub cache_path: PathBuf, #[serde(default = "default::admin_username")] pub admin_username: String, + #[serde(default = "default::transcoding_profiles")] pub transcoding_profiles: Vec<EncodingProfile>, #[serde(default = "default::max_in_memory_cache_size")] pub max_in_memory_cache_size: usize, pub admin_password: String, #[serde(default)] pub cookie_key: Option<String>, @@ -28,16 +29,61 @@ pub struct GlobalConfig { #[serde(default)] pub default_permission_set: PermissionSet, } -#[rustfmt::skip] mod default { + use crate::EncodingProfile; use std::path::PathBuf; - pub fn admin_username() -> String { "admin".into() } - pub fn login_expire() -> i64 { 60*60*24 } - pub fn asset_path() -> PathBuf { "data/assets".into() } - pub fn database_path() -> PathBuf { "data/database".into() } - pub fn library_path() -> PathBuf { "data/library".into() } - pub fn cache_path() -> PathBuf { "data/cache".into() } - pub fn temp_path() -> PathBuf { "/tmp".into() } - pub fn max_in_memory_cache_size() -> usize { 50_000_000 } + pub fn admin_username() -> String { + "admin".into() + } + pub fn login_expire() -> i64 { + 60 * 60 * 24 + } + pub fn asset_path() -> PathBuf { + "data/assets".into() + } + pub fn database_path() -> PathBuf { + "data/database".into() + } + pub fn library_path() -> PathBuf { + "data/library".into() + } + pub fn cache_path() -> PathBuf { + "data/cache".into() + } + pub fn temp_path() -> PathBuf { + "/tmp".into() + } + pub fn max_in_memory_cache_size() -> usize { + 50_000_000 + } + pub fn transcoding_profiles() -> Vec<EncodingProfile> { + vec![ + EncodingProfile::Video { + codec: "libsvtav1".to_string(), + preset: 8, + bitrate: 2_000_000, + width: 1920, + }, + EncodingProfile::Video { + codec: "libsvtav1".to_string(), + preset: 8, + bitrate: 1_500_000, + width: 1280, + }, + EncodingProfile::Audio { + codec: "libopus".to_string(), + bitrate: 128_000, + sample_rate: None, + }, + EncodingProfile::Audio { + codec: "libopus".to_string(), + bitrate: 64_000, + sample_rate: None, + }, + EncodingProfile::Subtitles { + codec: "webvtt".to_string(), + }, + ] + } } diff --git a/common/src/lib.rs b/common/src/lib.rs index c425c21..6d1a78c 100644 --- a/common/src/lib.rs +++ b/common/src/lib.rs @@ -142,3 +142,22 @@ pub enum SourceTrackKind { }, Subtitles, } + +#[derive(Debug, Clone, Deserialize, Serialize)] +#[serde(rename_all = "snake_case")] +pub enum EncodingProfile { + Video { + codec: String, + preset: u8, + bitrate: usize, + width: usize, + }, + Audio { + codec: String, + bitrate: usize, + sample_rate: Option<f64>, + }, + Subtitles { + codec: String, + }, +} diff --git a/common/src/stream.rs b/common/src/stream.rs index 1fb3761..8a7ff36 100644 --- a/common/src/stream.rs +++ b/common/src/stream.rs @@ -13,8 +13,7 @@ pub struct StreamSpec { pub tracks: Vec<usize>, pub format: StreamFormat, pub webm: Option<bool>, - pub bitrate: Option<usize>, - pub width: Option<usize>, + pub profile: Option<usize>, pub index: Option<usize>, } @@ -37,8 +36,7 @@ impl Default for StreamSpec { tracks: Vec::new(), format: StreamFormat::Matroska, webm: Some(true), - width: None, - bitrate: None, + profile: None, index: None, } } @@ -62,8 +60,8 @@ impl StreamSpec { ) .unwrap(); } - if let Some(bitrate) = self.bitrate { - write!(u, "&bitrate={bitrate}").unwrap(); + if let Some(profile) = self.profile { + write!(u, "&profile={profile}").unwrap(); } if let Some(index) = self.index { write!(u, "&index={index}").unwrap(); @@ -71,9 +69,6 @@ impl StreamSpec { if let Some(webm) = self.webm { write!(u, "&webm={webm}").unwrap(); } - if let Some(width) = self.width { - write!(u, "&width={width}").unwrap(); - } u } } |