Пример #1
0
 /// <inheritdoc />
 /// <summary>
 /// </summary>
 /// <param name="bytes"></param>
 /// <param name="start"></param>
 /// <param name="finish"></param>
 public MovieFragmentHeaderBox(byte[] bytes, int start, int finish) : base(Mp4Identifier.Mfhd)
 {
     if (finish - start == 8)
     {
         start         += 4;
         SequenceNumber = BitConverter.ToUInt32(Mp4Utils.ReadReverseBytes(bytes, 4, ref start, finish), 0);
     }
     else
     {
         throw new Exception();
     }
 }
Пример #2
0
        /// <inheritdoc />
        /// <summary>
        /// </summary>
        /// <param name="boxBytes"></param>
        /// <param name="start"></param>
        /// <param name="end"></param>
        public TrackRunBox(byte[] boxBytes, int start, int end) : base(Mp4Identifier.Trun)
        {
            TrFlags                             = BitConverter.ToUInt32(Mp4Utils.ReadReverseBytes(boxBytes, 4, ref start, end), 0);
            DataOffsetPresent                   = (1u & TrFlags) != 0u;
            FirstSampleFlagsPresent             = (4u & TrFlags) != 0u;
            SampleDurationPresent               = (256u & TrFlags) != 0u;
            SampleSizePresent                   = (512u & TrFlags) != 0u;
            SampleFlagsPresent                  = (1024u & TrFlags) != 0u;
            SampleCompositionTimeOffsetsPresent = (2048u & TrFlags) != 0u;
            SampleCount                         = BitConverter.ToUInt32(Mp4Utils.ReadReverseBytes(boxBytes, 4, ref start, end), 0);

            if (DataOffsetPresent)
            {
                DataOffset = BitConverter.ToInt32(Mp4Utils.ReadReverseBytes(boxBytes, 4, ref start, end), 0);
            }

            if (FirstSampleFlagsPresent)
            {
                FirstSampleFlags = BitConverter.ToUInt32(Mp4Utils.ReadReverseBytes(boxBytes, 4, ref start, end), 0);
            }

            Array = new Element[SampleCount];

            for (var offset = 0; offset < Array.Length; offset++)
            {
                var sampleDuration = 0u;
                var sampleSize     = 0u;
                var sampleFlags    = 0u;
                var sampleCompositionTimeOffset = 0u;

                if (SampleDurationPresent)
                {
                    sampleDuration = BitConverter.ToUInt32(Mp4Utils.ReadReverseBytes(boxBytes, 4, ref start, end), 0);
                }

                if (SampleSizePresent)
                {
                    sampleSize = BitConverter.ToUInt32(Mp4Utils.ReadReverseBytes(boxBytes, 4, ref start, end), 0);
                }

                if (SampleFlagsPresent)
                {
                    sampleFlags = BitConverter.ToUInt32(Mp4Utils.ReadReverseBytes(boxBytes, 4, ref start, end), 0);
                }

                if (SampleCompositionTimeOffsetsPresent)
                {
                    sampleCompositionTimeOffset = BitConverter.ToUInt32(Mp4Utils.ReadReverseBytes(boxBytes, 4, ref start, end), 0);
                }

                Array[offset] = new Element(sampleDuration, sampleSize, sampleFlags, sampleCompositionTimeOffset);
            }
        }
Пример #3
0
 /// <summary>
 /// </summary>
 /// <param name="bytes"></param>
 /// <param name="version"></param>
 /// <param name="start"></param>
 /// <param name="finish"></param>
 public Element(byte[] bytes, byte version, ref int start, int finish)
 {
     if (version == 0)
     {
         FragmentAbsoluteTime = BitConverter.ToUInt32(Mp4Utils.ReadReverseBytes(bytes, 4, ref start, finish), 0);
         FragmentDuration     = BitConverter.ToUInt32(Mp4Utils.ReadReverseBytes(bytes, 4, ref start, finish), 0);
     }
     else if (version == 1)
     {
         FragmentAbsoluteTime = BitConverter.ToUInt64(Mp4Utils.ReadReverseBytes(bytes, 8, ref start, finish), 0);
         FragmentDuration     = BitConverter.ToUInt64(Mp4Utils.ReadReverseBytes(bytes, 8, ref start, finish), 0);
     }
     else
     {
         throw new Exception();
     }
 }
Пример #4
0
        /// <inheritdoc />
        /// <summary>
        /// </summary>
        /// <param name="bytes"></param>
        /// <param name="start"></param>
        /// <param name="finish"></param>
        public SampleDependencyTypeBox(byte[] bytes, int start, int finish) : base(Mp4Identifier.Sdtp)
        {
            Array   = new Element[finish - start];
            Version = BitConverter.ToUInt32(Mp4Utils.ReadReverseBytes(bytes, 4, ref start, finish), 0);

            for (var index = 0; index < finish - start; index++)
            {
                var value    = Mp4Utils.ReadReverseBytes(bytes, 1, ref start, finish)[0];
                var reserved = (byte)(value >> 6);

                value <<= 2;

                var sampleDependsOn = (byte)(value >> 6);

                value      <<= 2;
                Array[index] = new Element(reserved, sampleDependsOn, (byte)(value >> 6), (byte)((value << 2) >> 6));
            }
        }
Пример #5
0
        /// <inheritdoc />
        /// <summary>
        /// </summary>
        /// <param name="bytes"></param>
        /// <param name="start"></param>
        /// <param name="finish"></param>
        public TfxdBox(byte[] bytes, int start, int finish) : base(Mp4Identifier.Tfxd)
        {
            Version = Mp4Utils.ReadReverseBytes(bytes, 1, ref start, finish)[0];
            Flags   = Mp4Utils.ReadReverseBytes(bytes, 3, ref start, finish);

            if (Version == 0)
            {
                FragmentAbsoluteTime = BitConverter.ToUInt32(Mp4Utils.ReadReverseBytes(bytes, 4, ref start, finish), 0);
                FragmentDuration     = BitConverter.ToUInt32(Mp4Utils.ReadReverseBytes(bytes, 4, ref start, finish), 0);
            }
            else if (Version == 1)
            {
                FragmentAbsoluteTime = BitConverter.ToUInt64(Mp4Utils.ReadReverseBytes(bytes, 8, ref start, finish), 0);
                FragmentDuration     = BitConverter.ToUInt64(Mp4Utils.ReadReverseBytes(bytes, 8, ref start, finish), 0);
            }
            else
            {
                throw new Exception();
            }
        }
Пример #6
0
        /// <inheritdoc />
        /// <summary>
        /// </summary>
        /// <param name="boxBytes"></param>
        /// <param name="start"></param>
        /// <param name="finish"></param>
        public TrackFragmentHeaderBox(byte[] boxBytes, int start, int finish) : base(Mp4Identifier.Tfhd)
        {
            TfFlags = BitConverter.ToUInt32(Mp4Utils.ReadReverseBytes(boxBytes, 4, ref start, finish), 0);
            BaseDataOffsetPresent         = (1u & TfFlags) != 0u;
            SampleDescriptionIndexPresent = (2u & TfFlags) != 0u;
            DefaultSampleDurationPresent  = (8u & TfFlags) != 0u;
            DefaultSampleSizePresent      = (16u & TfFlags) != 0u;
            DefaultSampleFlagsPresent     = (32u & TfFlags) != 0u;
            DurationIsEmpty = (65536u & TfFlags) != 0u;
            TrackId         = BitConverter.ToUInt32(Mp4Utils.ReadReverseBytes(boxBytes, 4, ref start, finish), 0);

            if (BaseDataOffsetPresent)
            {
                BaseDataOffset = BitConverter.ToUInt64(Mp4Utils.ReadReverseBytes(boxBytes, 8, ref start, finish), 0);
            }

            if (SampleDescriptionIndexPresent)
            {
                SampleDescriptionIndex = BitConverter.ToUInt32(Mp4Utils.ReadReverseBytes(boxBytes, 4, ref start, finish), 0);
            }

            if (DefaultSampleDurationPresent)
            {
                DefaultSampleDuration = BitConverter.ToUInt32(Mp4Utils.ReadReverseBytes(boxBytes, 4, ref start, finish), 0);
            }

            if (DefaultSampleSizePresent)
            {
                DefaultSampleSize = BitConverter.ToUInt32(Mp4Utils.ReadReverseBytes(boxBytes, 4, ref start, finish), 0);
            }

            if (DefaultSampleFlagsPresent)
            {
                DefaultSampleFlags = BitConverter.ToUInt32(Mp4Utils.ReadReverseBytes(boxBytes, 4, ref start, finish), 0);
            }
        }