1
0
Fork 0
mirror of https://github.com/alfg/mp4-rust.git synced 2025-04-15 08:14:15 +00:00
This commit is contained in:
damitha 2025-03-21 12:53:39 +11:00
parent 792a92222a
commit b388238837
2 changed files with 33 additions and 0 deletions

View file

@ -4,6 +4,7 @@ use std::convert::TryFrom;
use std::io::{Read, Seek, SeekFrom, Write};
use std::time::Duration;
use crate::elst::ElstEntry;
use crate::mp4box::traf::TrafBox;
use crate::mp4box::trak::TrakBox;
use crate::mp4box::trun::TrunBox;
@ -929,9 +930,24 @@ impl Mp4TrackWriter {
}
pub(crate) fn write_end<W: Write + Seek>(&mut self, writer: &mut W) -> Result<TrakBox> {
return self.write_end_with_offset(writer, 0);
}
pub(crate) fn write_end_with_offset<W: Write + Seek>(&mut self, writer: &mut W, offset: u64) -> Result<TrakBox> {
self.write_chunk(writer)?;
let max_sample_size = self.max_sample_size();
self.trak.edts = Some(EdtsBox { elst: Some(ElstBox {
version: 1,
flags: 0,
entries: vec![ElstEntry {
segment_duration: self.trak.mdia.mdhd.duration,
media_time: offset,
media_rate: 1,
media_rate_fraction: 0,
}],
})});
if let Some(ref mut mp4a) = self.trak.mdia.minf.stbl.stsd.mp4a {
if let Some(ref mut esds) = mp4a.esds {
esds.es_desc.dec_config.buffer_size_db = max_sample_size;

View file

@ -146,4 +146,21 @@ impl<W: Write + Seek> Mp4Writer<W> {
moov.write_box(&mut self.writer)?;
Ok(())
}
pub fn write_end_with_offset(&mut self, offset: u64) -> Result<()> {
let mut moov = MoovBox::default();
for track in self.tracks.iter_mut() {
moov.traks.push(track.write_end_with_offset(&mut self.writer,offset)?);
}
self.update_mdat_size()?;
moov.mvhd.timescale = self.timescale;
moov.mvhd.duration = self.duration;
if moov.mvhd.duration > (u32::MAX as u64) {
moov.mvhd.version = 1
}
moov.write_box(&mut self.writer)?;
Ok(())
}
}