@@ -194,7 +194,8 @@ async fn background_converter(
194194 stats : Arc < Mutex < Stats > > ,
195195 mut shutdown : broadcast:: Receiver < ( ) > ,
196196 ff : FfmpegPaths ,
197- resolution : String ,
197+ streams : Vec < StreamConfig > ,
198+ default_resolution : String ,
198199) {
199200 let mut interval = tokio:: time:: interval ( tokio:: time:: Duration :: from_secs ( 30 ) ) ;
200201
@@ -212,6 +213,16 @@ async fn background_converter(
212213 use std:: os:: unix:: fs:: PermissionsExt ;
213214 let _ = std:: fs:: set_permissions( & path, std:: fs:: Permissions :: from_mode( 0o644 ) ) ;
214215 }
216+ // 從檔名取得 stream name,查找對應的解析度設定
217+ let resolution = path. file_stem( )
218+ . and_then( |s| s. to_str( ) )
219+ . and_then( |name| name. split( '_' ) . next( ) )
220+ . and_then( |stream_name| {
221+ streams. iter( )
222+ . find( |s| s. name == stream_name)
223+ . and_then( |s| s. resolution. clone( ) )
224+ } )
225+ . unwrap_or_else( || default_resolution. clone( ) ) ;
215226 // 檢查檔案是否正在寫入(修改時間 > 10 秒前)
216227 if let Ok ( metadata) = path. metadata( ) {
217228 if let Ok ( modified) = metadata. modified( ) {
@@ -258,9 +269,10 @@ pub async fn run_daemon(config: &Config, stats: Arc<Mutex<Stats>>, ff: &FfmpegPa
258269 let converter_shutdown = shutdown_tx. subscribe ( ) ;
259270 let output_dir = config. output . dir . clone ( ) ;
260271 let converter_ff = ff. clone ( ) ;
261- let converter_resolution = config. output . resolution . clone ( ) ;
272+ let converter_streams = config. rtsp . streams . clone ( ) ;
273+ let converter_default_resolution = config. output . resolution . clone ( ) ;
262274 tokio:: spawn ( async move {
263- background_converter ( output_dir, converter_stats, converter_shutdown, converter_ff, converter_resolution ) . await ;
275+ background_converter ( output_dir, converter_stats, converter_shutdown, converter_ff, converter_streams , converter_default_resolution ) . await ;
264276 tracing:: error!( "[轉檔] 背景任務意外結束" ) ;
265277 } ) ;
266278
0 commit comments