1
0
Fork 0
mirror of https://github.com/alfg/mp4-rust.git synced 2025-04-16 16:54:14 +00:00

parse meta in moov and trak position

This commit is contained in:
Jessa 2023-01-16 11:22:33 -08:00
parent 79c837c950
commit 5f61fd2b68
2 changed files with 18 additions and 0 deletions

View file

@ -1,6 +1,7 @@
use serde::Serialize;
use std::io::{Read, Seek, SeekFrom, Write};
use crate::meta::MetaBox;
use crate::mp4box::*;
use crate::mp4box::{mvex::MvexBox, mvhd::MvhdBox, trak::TrakBox, udta::UdtaBox};
@ -8,6 +9,9 @@ use crate::mp4box::{mvex::MvexBox, mvhd::MvhdBox, trak::TrakBox, udta::UdtaBox};
pub struct MoovBox {
pub mvhd: MvhdBox,
#[serde(skip_serializing_if = "Option::is_none")]
pub meta: Option<MetaBox>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mvex: Option<MvexBox>,
@ -56,6 +60,7 @@ impl<R: Read + Seek> ReadBox<&mut R> for MoovBox {
let start = box_start(reader)?;
let mut mvhd = None;
let mut meta = None;
let mut udta = None;
let mut mvex = None;
let mut traks = Vec::new();
@ -71,6 +76,9 @@ impl<R: Read + Seek> ReadBox<&mut R> for MoovBox {
BoxType::MvhdBox => {
mvhd = Some(MvhdBox::read_box(reader, s)?);
}
BoxType::MetaBox => {
meta = Some(MetaBox::read_box(reader, s)?);
}
BoxType::MvexBox => {
mvex = Some(MvexBox::read_box(reader, s)?);
}
@ -98,6 +106,7 @@ impl<R: Read + Seek> ReadBox<&mut R> for MoovBox {
Ok(MoovBox {
mvhd: mvhd.unwrap(),
meta,
udta,
mvex,
traks,

View file

@ -1,6 +1,7 @@
use serde::Serialize;
use std::io::{Read, Seek, SeekFrom, Write};
use crate::meta::MetaBox;
use crate::mp4box::*;
use crate::mp4box::{edts::EdtsBox, mdia::MdiaBox, tkhd::TkhdBox};
@ -11,6 +12,9 @@ pub struct TrakBox {
#[serde(skip_serializing_if = "Option::is_none")]
pub edts: Option<EdtsBox>,
#[serde(skip_serializing_if = "Option::is_none")]
pub meta: Option<MetaBox>,
pub mdia: MdiaBox,
}
@ -55,6 +59,7 @@ impl<R: Read + Seek> ReadBox<&mut R> for TrakBox {
let mut tkhd = None;
let mut edts = None;
let mut meta = None;
let mut mdia = None;
let mut current = reader.seek(SeekFrom::Current(0))?;
@ -71,6 +76,9 @@ impl<R: Read + Seek> ReadBox<&mut R> for TrakBox {
BoxType::EdtsBox => {
edts = Some(EdtsBox::read_box(reader, s)?);
}
BoxType::MetaBox => {
meta = Some(MetaBox::read_box(reader, s)?);
}
BoxType::MdiaBox => {
mdia = Some(MdiaBox::read_box(reader, s)?);
}
@ -95,6 +103,7 @@ impl<R: Read + Seek> ReadBox<&mut R> for TrakBox {
Ok(TrakBox {
tkhd: tkhd.unwrap(),
edts,
meta,
mdia: mdia.unwrap(),
})
}