1
0
Fork 0
mirror of https://github.com/alfg/mp4-rust.git synced 2024-12-22 12:06:33 +00:00

Add reading of emsg boxes when reading fragments

This commit is contained in:
Jensenn 2024-03-26 15:27:53 -06:00
parent 35560e94f5
commit 2b9cf97f7a
2 changed files with 8 additions and 3 deletions

View file

@ -138,6 +138,7 @@ impl<R: Read + Seek> Mp4Reader<R> {
let mut moofs = Vec::new(); let mut moofs = Vec::new();
let mut moof_offsets = Vec::new(); let mut moof_offsets = Vec::new();
let mut emsgs = Vec::new();
let mut current = start; let mut current = start;
while current < size { while current < size {
@ -166,6 +167,10 @@ impl<R: Read + Seek> Mp4Reader<R> {
moofs.push(moof); moofs.push(moof);
moof_offsets.push(moof_offset); moof_offsets.push(moof_offset);
} }
BoxType::EmsgBox => {
let emsg = EmsgBox::read_box(&mut reader, s)?;
emsgs.push(emsg);
}
_ => { _ => {
// XXX warn!() // XXX warn!()
skip_box(&mut reader, s)?; skip_box(&mut reader, s)?;
@ -209,7 +214,7 @@ impl<R: Read + Seek> Mp4Reader<R> {
ftyp: self.ftyp.clone(), ftyp: self.ftyp.clone(),
moov: self.moov.clone(), moov: self.moov.clone(),
moofs, moofs,
emsgs: Vec::new(), emsgs,
tracks, tracks,
size, size,
}) })

View file

@ -261,7 +261,7 @@ impl Mp4Track {
pub fn sequence_parameter_set(&self) -> Result<&[u8]> { pub fn sequence_parameter_set(&self) -> Result<&[u8]> {
if let Some(ref avc1) = self.trak.mdia.minf.stbl.stsd.avc1 { if let Some(ref avc1) = self.trak.mdia.minf.stbl.stsd.avc1 {
match avc1.avcc.sequence_parameter_sets.get(0) { match avc1.avcc.sequence_parameter_sets.first() {
Some(nal) => Ok(nal.bytes.as_ref()), Some(nal) => Ok(nal.bytes.as_ref()),
None => Err(Error::EntryInStblNotFound( None => Err(Error::EntryInStblNotFound(
self.track_id(), self.track_id(),
@ -276,7 +276,7 @@ impl Mp4Track {
pub fn picture_parameter_set(&self) -> Result<&[u8]> { pub fn picture_parameter_set(&self) -> Result<&[u8]> {
if let Some(ref avc1) = self.trak.mdia.minf.stbl.stsd.avc1 { if let Some(ref avc1) = self.trak.mdia.minf.stbl.stsd.avc1 {
match avc1.avcc.picture_parameter_sets.get(0) { match avc1.avcc.picture_parameter_sets.first() {
Some(nal) => Ok(nal.bytes.as_ref()), Some(nal) => Ok(nal.bytes.as_ref()),
None => Err(Error::EntryInStblNotFound( None => Err(Error::EntryInStblNotFound(
self.track_id(), self.track_id(),