xref: /xiu/protocol/hls/src/ts.rs (revision b754b692)
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