// Read the file. private void Read(ReadStyle propertiesStyle) { // Create a dummie outer box, as perscribed by the specs. Mpeg4FileBox file_box = new Mpeg4FileBox(this); // Find the movie box and item text. If the movie box doen'type exist, an // exception will be thrown on the next call, but if there is no movie // box, the file can'type possibly be valid. Mpeg4IsoMovieBox moov_box = (Mpeg4IsoMovieBox)file_box.FindChildDeep("moov"); Mpeg4AppleItemListBox ilst_box = (Mpeg4AppleItemListBox)moov_box.FindChildDeep("ilst"); // If we have a ItemListBox, deparent it. if (ilst_box != null) { ilst_box.RemoveFromParent(); } // Create the tag. tag = new Mpeg4AppleTag(ilst_box, this); // If we're not reading properties, we're done. if (propertiesStyle == ReadStyle.None) { return; } // Get the movie header box. Mpeg4IsoMovieHeaderBox mvhd_box = (Mpeg4IsoMovieHeaderBox)moov_box.FindChildDeep("mvhd"); Mpeg4IsoAudioSampleEntry sample_entry = null; // Find a TrackBox with a sound Handler. foreach (Mpeg4Box box in moov_box.Children) { if (box.BoxType == "trak") { // If the handler isn'type sound, it could be metadata or video or // any number of other things. Mpeg4IsoHandlerBox hdlr_box = (Mpeg4IsoHandlerBox)box.FindChildDeep("hdlr"); if (hdlr_box == null || hdlr_box.HandlerType != "soun") { continue; } // This track SHOULD contain at least one sample entry. sample_entry = (Mpeg4IsoAudioSampleEntry)box.FindChildDeep(typeof(Mpeg4IsoAudioSampleEntry)); break; } } // If we have a MovieHeaderBox, deparent it. if (mvhd_box != null) { mvhd_box.RemoveFromParent(); } // If we have a SampleEntry, deparent it. if (sample_entry != null) { sample_entry.RemoveFromParent(); } // Read the properties. properties = new Mpeg4Properties(mvhd_box, sample_entry, propertiesStyle); }
public Mpeg4Properties(Mpeg4IsoMovieHeaderBox mvhdBox, Mpeg4IsoAudioSampleEntry sampleEntry, ReadStyle style) : base(style) { this.mvhdBox = mvhdBox; this.sampleEntry = sampleEntry; }