1 use { 2 super::errors::MediaError, 3 bytes::BytesMut, 4 std::{fs, fs::File, io::Write}, 5 }; 6 7 pub struct Ts { 8 ts_number: u32, 9 live_path: String, 10 } 11 12 impl Ts { new(app_name: String, stream_name: String) -> Self13 pub fn new(app_name: String, stream_name: String) -> Self { 14 let live_path = format!("./{app_name}/{stream_name}"); 15 fs::create_dir_all(live_path.clone()).unwrap(); 16 17 Self { 18 ts_number: 0, 19 live_path, 20 } 21 } write(&mut self, data: BytesMut) -> Result<(String, String), MediaError>22 pub fn write(&mut self, data: BytesMut) -> Result<(String, String), MediaError> { 23 let ts_file_name = format!("{}.ts", self.ts_number); 24 let ts_file_path = format!("{}/{}", self.live_path, ts_file_name); 25 self.ts_number += 1; 26 27 let mut ts_file_handler = File::create(ts_file_path.clone())?; 28 ts_file_handler.write_all(&data[..])?; 29 30 Ok((ts_file_name, ts_file_path)) 31 } delete(&mut self, ts_file_name: String)32 pub fn delete(&mut self, ts_file_name: String) { 33 fs::remove_file(ts_file_name).unwrap(); 34 } 35 } 36