public override void Read(BoxReader reader) { using (new SizeChecker(this, reader)) { base.Read(reader); TrackHeaderBox.Read(reader); while (this.Size > (ulong)(reader.BaseStream.Position - (long)this.Offset)) { long pos = reader.BaseStream.Position; BoxType next = reader.PeekNextBoxType(); if (next == BoxTypes.Edts) { EdtsBox = new EdtsBox(); EdtsBox.movieTimeScale = movieTimeScale; EdtsBox.Read(reader); } else if (next == BoxTypes.TrackReference) { TrackReferenceBox = new TrackReferenceBox(); TrackReferenceBox.Read(reader); } else if (next == BoxTypes.Media) { MediaBox = new MediaBox(this); MediaBox.Read(reader); } else { Box unknown = new Box(BoxTypes.Any); unknown.Read(reader); Debug.WriteLine(string.Format("Unknow box type {0} in Trak box, skipped", next.ToString())); } } } }
public override void Read(BoxReader reader) { using (SizeChecker checker = new SizeChecker(this, reader)) { base.Read(reader); this.TrackFragmentHeaderBox.Read(reader); this.TrackFragmentRunBox.Read(reader); while (checker.DataLeft() > 8) { // it appears that Independent and Disposable Sample Box is optional BoxType nextbox = reader.PeekNextBoxType(); if (nextbox == BoxTypes.IndependentAndDisposableSamplesBox) { this.IndependentAndDisposableSamplesBox = new IndependentAndDisposableSamplesBox(this.TrackFragmentRunBox.Samples.Count); this.IndependentAndDisposableSamplesBox.Read(reader); continue; } if (nextbox == BoxTypes.UUID) { UserUniqueIDBox = new UserUniqueIDBox(); UserUniqueIDBox.Read(reader); continue; } break; // this shouldn't happen, and it should force the SizeChecker to throw an exception as it means we didn't read everything... } } }
public override void Read(BoxReader reader) { using (SizeChecker checker = new SizeChecker(this, reader)) { base.Read(reader); this.TrackFragmentHeaderBox.Read(reader); this.TrackFragmentRunBox.Read(reader); while (checker.DataLeft() > 8) { // it appears that Independent and Disposable Sample Box is optional BoxType nextbox = reader.PeekNextBoxType(); if (nextbox == BoxTypes.IndependentAndDisposableSamplesBox) { this.IndependentAndDisposableSamplesBox = new IndependentAndDisposableSamplesBox(this.TrackFragmentRunBox.Samples.Count); this.IndependentAndDisposableSamplesBox.Read(reader); continue; } if (nextbox == BoxTypes.UUID) { UserUniqueIDBox = new UserUniqueIDBox(); UserUniqueIDBox.Read(reader); continue; } break; // this shouldn't happen, and it should force the SizeChecker to throw an exception as it means we didn't read everything... } } }
public ISMVFile(string inDir, string inFileName) { strDir = inDir; strFileName = inFileName; boxReader = new BoxReader(File.Open(Path.Combine(inDir, inFileName), FileMode.Open, FileAccess.Read, FileShare.Read)); boxReader2 = new BoxReader(File.Open(Path.Combine(inDir, inFileName), FileMode.Open, FileAccess.Read, FileShare.Read)); ftb.Read(boxReader); mmb.Read(boxReader); BoxType nextType = boxReader.PeekNextBoxType(); }
public override void Read(BoxReader reader) { using (new SizeChecker(this, reader)) { base.Read(reader); this.TrackFragmentRandomAccessBoxes = new List<TrackFragmentRandomAccessBox>(); while (reader.PeekNextBoxType() == BoxTypes.TrackFragmentRandomAccess) { TrackFragmentRandomAccessBox item = new TrackFragmentRandomAccessBox(); item.Read(reader); this.TrackFragmentRandomAccessBoxes.Add(item); } this.MovieFragmentRandomAccessOffsetBox = new MovieFragmentRandomAccessOffsetBox(); this.MovieFragmentRandomAccessOffsetBox.Read(reader); } }
public override void Read(BoxReader reader) { using (new SizeChecker(this, reader)) { base.Read(reader); this.TrackFragmentRandomAccessBoxes = new List <TrackFragmentRandomAccessBox>(); while (reader.PeekNextBoxType() == BoxTypes.TrackFragmentRandomAccess) { TrackFragmentRandomAccessBox item = new TrackFragmentRandomAccessBox(); item.Read(reader); this.TrackFragmentRandomAccessBoxes.Add(item); } this.MovieFragmentRandomAccessOffsetBox = new MovieFragmentRandomAccessOffsetBox(); this.MovieFragmentRandomAccessOffsetBox.Read(reader); } }
public override void Read(BoxReader reader) { using (new SizeChecker(this, reader)) { base.Read(reader); // Apple either omits the header, or puts it after the TrackExtendBoxes BoxType boxType = reader.PeekNextBoxType(); if (boxType == BoxTypes.MovieExtendsHeader) { MovieExtendsHeaderBox = new MovieExtendsHeaderBox(); MovieExtendsHeaderBox.Read(reader); } // Apple puts the MovieExtendsBoxes BEFORE TrackBoxes, so TrackBoxes may be NULL below. if (parent.TrackBoxes != null) { TrackExtendBoxes = new TrackExtendsBox[parent.TrackBoxes.Length]; for (int i = 0; i < parent.TrackBoxes.Length; i++) { TrackExtendBoxes[i] = new TrackExtendsBox(); TrackExtendBoxes[i].Read(reader); } } else { // get the size of a TrackExtendsBox, then use that to determine the size of the array Box test = new Box(BoxTypes.Any); test.Read(reader); reader.BaseStream.Position = (long)test.Offset; if (MovieExtendsHeaderBox == null) { TrackExtendBoxes = new TrackExtendsBox[(this.Size - 8) / test.Size]; } else { TrackExtendBoxes = new TrackExtendsBox[(this.Size - 8 - MovieExtendsHeaderBox.Size) / test.Size]; } for (int i = 0; i < TrackExtendBoxes.Length; i++) { TrackExtendBoxes[i] = new TrackExtendsBox(); TrackExtendBoxes[i].Read(reader); } } } }
public override void Read(BoxReader reader) { using (new SizeChecker(this, reader)) { base.Read(reader); // Apple either omits the header, or puts it after the TrackExtendBoxes BoxType boxType = reader.PeekNextBoxType(); if (boxType == BoxTypes.MovieExtendsHeader) { MovieExtendsHeaderBox = new MovieExtendsHeaderBox(); MovieExtendsHeaderBox.Read(reader); } // Apple puts the MovieExtendsBoxes BEFORE TrackBoxes, so TrackBoxes may be NULL below. if (parent.TrackBoxes != null) { TrackExtendBoxes = new TrackExtendsBox[parent.TrackBoxes.Length]; for (int i = 0; i < parent.TrackBoxes.Length; i++) { TrackExtendBoxes[i] = new TrackExtendsBox(); TrackExtendBoxes[i].Read(reader); } } else { // get the size of a TrackExtendsBox, then use that to determine the size of the array Box test = new Box(BoxTypes.Any); test.Read(reader); reader.BaseStream.Position = (long)test.Offset; if (MovieExtendsHeaderBox == null) TrackExtendBoxes = new TrackExtendsBox[(this.Size - 8) / test.Size]; else TrackExtendBoxes = new TrackExtendsBox[(this.Size - 8 - MovieExtendsHeaderBox.Size) / test.Size]; for (int i = 0; i < TrackExtendBoxes.Length; i++) { TrackExtendBoxes[i] = new TrackExtendsBox(); TrackExtendBoxes[i].Read(reader); } } } }
public override void Read(BoxReader reader) { using (new SizeChecker(this, reader)) { base.Read(reader); TrackHeaderBox.Read(reader); while (this.Size > (ulong)(reader.BaseStream.Position - (long)this.Offset)) { long pos = reader.BaseStream.Position; BoxType next = reader.PeekNextBoxType(); if (next == BoxTypes.Edts) { EdtsBox = new EdtsBox(); EdtsBox.movieTimeScale = movieTimeScale; EdtsBox.Read(reader); } else if (next == BoxTypes.TrackReference) { TrackReferenceBox = new TrackReferenceBox(); TrackReferenceBox.Read(reader); } else if (next == BoxTypes.Media) { MediaBox = new MediaBox(this); MediaBox.Read(reader); } else { Box unknown = new Box(BoxTypes.Any); unknown.Read(reader); Debug.WriteLine(string.Format("Unknow box type {0} in Trak box, skipped", next.ToString())); } } } }
public override void Read(BoxReader reader) { using (new SizeChecker(this, reader)) { long pos = reader.BaseStream.Position; base.Read(reader); for (int i = 0; i < 2; i++) reader.ReadUInt32(); // unsigned int(32)[2] reserved = 0 ChannelCount = reader.ReadUInt16(); SampleSize = reader.ReadUInt16(); PreDefined = reader.ReadUInt16(); // unsigned int(16) pre_defined = 0 reader.ReadUInt16(); // unsigned int(16) reserved = 0 SampleRate = reader.ReadUInt32() >> 16; // read esds or avcc boxes BoxType bt = reader.PeekNextBoxType(); switch (bt.ToString().ToLower()) { case "esds": // AudioSampleEntry type is mp4a (denotes AAC encoding) case "avcc": PrivDataFullBox = new AnyPrivFullBox(bt, string.Empty); PrivDataFullBox.Read(reader); break; case "wfex": // AudioSampleEntry type is wma PrivDataBox = new AnyPrivBox(bt, string.Empty); PrivDataBox.Read(reader); break; case "damr": // 3gpp sound PrivDataFullBox = new AnyPrivFullBox(bt, string.Empty); PrivDataFullBox.Read(reader); break; default: throw new Exception(string.Format("AudioSampleEntry has unknown contents: {0}", bt.ToString())); } } }