xref: /xiu/protocol/hls/src/test_flv2hls.rs (revision b754b692)
1 #[cfg(test)]
2 mod tests {
3     use crate::errors::MediaError;
4     use crate::flv2hls::Flv2HlsRemuxer;
5     use bytes::BytesMut;
6     use xflv::define::FlvData;
7 
8     use xflv::demuxer::FlvDemuxer;
9 
10     use std::fs::File;
11     use std::io::prelude::*;
12     use std::time::Instant;
13 
14     #[allow(dead_code)]
print(data: BytesMut)15     pub fn print(data: BytesMut) {
16         println!("==========={}", data.len());
17         let mut idx = 0;
18         for i in data {
19             print!("{i:02X} ");
20             idx += 1;
21             if idx % 16 == 0 {
22                 println!()
23             }
24         }
25 
26         println!("===========")
27     }
28     #[allow(dead_code)]
print_flv_data(data: FlvData)29     pub fn print_flv_data(data: FlvData) {
30         match data {
31             FlvData::Audio { timestamp, data } => {
32                 println! {"==audio data begin=="};
33                 println! {"timestamp: {timestamp}"};
34                 println! {"data :"};
35                 print(data);
36                 println! {"==audio data end=="};
37             }
38             FlvData::Video { timestamp, data } => {
39                 println! {"==video data begin=="};
40                 println! {"timestamp: {timestamp}"};
41                 println! {"data :"};
42                 print(data);
43                 println! {"==video data end=="};
44             }
45             _ => {
46                 println!("not video or audio ")
47             }
48         }
49     }
50 
51     //#[test]
52     #[allow(dead_code)]
test_flv2hls() -> Result<(), MediaError>53     fn test_flv2hls() -> Result<(), MediaError> {
54         let mut file =
55             File::open("/Users/zexu/github/xiu/protocol/hls/src/xgplayer_demo.flv").unwrap();
56         let mut contents = Vec::new();
57 
58         file.read_to_end(&mut contents)?;
59 
60         let mut data = BytesMut::new();
61         data.extend(contents);
62 
63         let mut demuxer = FlvDemuxer::new(data);
64         demuxer.read_flv_header()?;
65 
66         let start = Instant::now();
67         let mut media_demuxer =
68             Flv2HlsRemuxer::new(5, String::from("live"), String::from("test"), false);
69 
70         loop {
71             let data_ = demuxer.read_flv_tag();
72 
73             match data_ {
74                 Ok(data) => {
75                     if let Some(real_data) = data {
76                         media_demuxer.process_flv_data(real_data)?;
77                     }
78                 }
79 
80                 Err(err) => {
81                     media_demuxer.flush_remaining_data()?;
82                     log::error!("readd err: {}", err);
83                     break;
84                 }
85             }
86         }
87 
88         let elapsed = start.elapsed();
89         println!("Debug: {elapsed:?}");
90 
91         Ok(())
92     }
93 }
94