use byteorder::{BigEndian, ReadBytesExt};
use bytes::{Buf, Bytes};
use super::header::FlvHeader;
use super::tag::FlvTag;
use crate::error::FlvError;
#[derive(Debug, Clone, PartialEq)]
pub struct FlvFile<'a> {
pub header: FlvHeader,
pub tags: Vec<FlvTag<'a>>,
}
impl FlvFile<'_> {
pub fn demux(reader: &mut std::io::Cursor<Bytes>) -> Result<Self, FlvError> {
let header = FlvHeader::demux(reader)?;
let mut tags = Vec::new();
while reader.has_remaining() {
reader.read_u32::<BigEndian>()?;
if !reader.has_remaining() {
break;
}
let tag = FlvTag::demux(reader)?;
tags.push(tag);
}
Ok(FlvFile { header, tags })
}
}