use { super::errors::MediaError, bytes::BytesMut, std::{fs, fs::File, io::Write}, }; pub struct Ts { ts_number: u32, live_path: String, } impl Ts { pub fn new(app_name: String, stream_name: String) -> Self { let live_path = format!("./{app_name}/{stream_name}"); fs::create_dir_all(live_path.clone()).unwrap(); Self { ts_number: 0, live_path, } } pub fn write(&mut self, data: BytesMut) -> Result<(String, String), MediaError> { let ts_file_name = format!("{}.ts", self.ts_number); let ts_file_path = format!("{}/{}", self.live_path, ts_file_name); self.ts_number += 1; let mut ts_file_handler = File::create(ts_file_path.clone())?; ts_file_handler.write_all(&data[..])?; Ok((ts_file_name, ts_file_path)) } pub fn delete(&mut self, ts_file_name: String) { fs::remove_file(ts_file_name).unwrap(); } }