#[cfg(test)]
mod tests {
use crate::errors::MediaError;
use crate::flv2hls::Flv2HlsRemuxer;
use bytes::BytesMut;
use xflv::define::FlvData;
use xflv::demuxer::FlvDemuxer;
use std::fs::File;
use std::io::prelude::*;
use std::time::Instant;
#[allow(dead_code)]
pub fn print(data: BytesMut) {
println!("==========={}", data.len());
let mut idx = 0;
for i in data {
print!("{i:02X} ");
idx += 1;
if idx % 16 == 0 {
println!()
}
}
println!("===========")
}
#[allow(dead_code)]
pub fn print_flv_data(data: FlvData) {
match data {
FlvData::Audio { timestamp, data } => {
println! {"==audio data begin=="};
println! {"timestamp: {timestamp}"};
println! {"data :"};
print(data);
println! {"==audio data end=="};
}
FlvData::Video { timestamp, data } => {
println! {"==video data begin=="};
println! {"timestamp: {timestamp}"};
println! {"data :"};
print(data);
println! {"==video data end=="};
}
_ => {
println!("not video or audio ")
}
}
}
#[allow(dead_code)]
fn test_flv2hls() -> Result<(), MediaError> {
let mut file =
File::open("/Users/zexu/github/xiu/protocol/hls/src/xgplayer_demo.flv").unwrap();
let mut contents = Vec::new();
file.read_to_end(&mut contents)?;
let mut data = BytesMut::new();
data.extend(contents);
let mut demuxer = FlvDemuxer::new(data);
demuxer.read_flv_header()?;
let start = Instant::now();
let mut media_demuxer =
Flv2HlsRemuxer::new(5, String::from("live"), String::from("test"), false);
loop {
let data_ = demuxer.read_flv_tag();
match data_ {
Ok(data) => {
if let Some(real_data) = data {
media_demuxer.process_flv_data(real_data)?;
}
}
Err(err) => {
media_demuxer.flush_remaining_data()?;
log::error!("readd err: {}", err);
break;
}
}
}
let elapsed = start.elapsed();
println!("Debug: {elapsed:?}");
Ok(())
}
}