mirror of
https://github.com/alfg/mp4-rust.git
synced 2025-02-22 16:06:16 +00:00
chore(reader): refactor read_header
This commit is contained in:
parent
0e81b1f70c
commit
86cc348100
1 changed files with 14 additions and 23 deletions
|
@ -72,33 +72,24 @@ impl<R: Read + Seek> Mp4Reader<R> {
|
|||
current = reader.stream_position()?;
|
||||
}
|
||||
|
||||
if ftyp.is_none() {
|
||||
return Err(Error::BoxNotFound(BoxType::FtypBox));
|
||||
}
|
||||
if moov.is_none() {
|
||||
return Err(Error::BoxNotFound(BoxType::MoovBox));
|
||||
}
|
||||
let ftyp = ftyp.ok_or(Error::BoxNotFound(BoxType::FtypBox))?;
|
||||
let moov = moov.ok_or(Error::BoxNotFound(BoxType::MoovBox))?;
|
||||
|
||||
let size = current - start;
|
||||
let mut tracks = if let Some(ref moov) = moov {
|
||||
if moov.traks.iter().any(|trak| trak.tkhd.track_id == 0) {
|
||||
return Err(Error::InvalidData("illegal track id 0"));
|
||||
}
|
||||
moov.traks
|
||||
.iter()
|
||||
.map(|trak| (trak.tkhd.track_id, Mp4Track::from(trak)))
|
||||
.collect()
|
||||
} else {
|
||||
HashMap::new()
|
||||
};
|
||||
if moov.traks.iter().any(|trak| trak.tkhd.track_id == 0) {
|
||||
return Err(Error::InvalidData("illegal track id 0"));
|
||||
}
|
||||
let mut tracks: HashMap<u32, Mp4Track> = moov
|
||||
.traks
|
||||
.iter()
|
||||
.map(|trak| (trak.tkhd.track_id, Mp4Track::from(trak)))
|
||||
.collect();
|
||||
|
||||
// Update tracks if any fragmented (moof) boxes are found.
|
||||
if !moofs.is_empty() {
|
||||
let mut default_sample_duration = 0;
|
||||
if let Some(ref moov) = moov {
|
||||
if let Some(ref mvex) = &moov.mvex {
|
||||
default_sample_duration = mvex.trex.default_sample_duration
|
||||
}
|
||||
if let Some(ref mvex) = &moov.mvex {
|
||||
default_sample_duration = mvex.trex.default_sample_duration
|
||||
}
|
||||
|
||||
for moof in moofs.iter() {
|
||||
|
@ -116,8 +107,8 @@ impl<R: Read + Seek> Mp4Reader<R> {
|
|||
|
||||
Ok(Mp4Reader {
|
||||
reader,
|
||||
ftyp: ftyp.ok_or(crate::error::Error::BoxNotFound(BoxType::FtypBox))?,
|
||||
moov: moov.ok_or(crate::error::Error::BoxNotFound(BoxType::MoovBox))?,
|
||||
ftyp,
|
||||
moov,
|
||||
moofs,
|
||||
emsgs,
|
||||
size,
|
||||
|
|
Loading…
Reference in a new issue