mirror of
https://github.com/alfg/mp4-rust.git
synced 2025-04-15 08:14:15 +00:00
.
This commit is contained in:
parent
792a92222a
commit
b388238837
2 changed files with 33 additions and 0 deletions
16
src/track.rs
16
src/track.rs
|
@ -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;
|
||||
|
|
|
@ -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(())
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue