Пример #1
0
        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()));
                    }
                }
            }
        }
Пример #2
0
        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...
                }
            }
        }
Пример #3
0
        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...
                                }
            }
        }
Пример #4
0
        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);
     }
 }
Пример #6
0
 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);
     }
 }
Пример #7
0
        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);
                    }
                }
            }
        }
Пример #8
0
        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);
            }
            }
              }
        }
Пример #9
0
        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()));
              }
            }
              }
        }
Пример #10
0
        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()));
            }
              }
        }