/// <inheritdoc /> /// <summary> /// </summary> /// <param name="bytes"></param> /// <param name="start"></param> /// <param name="finish"></param> public TrackFragmentBox(byte[] bytes, int start, int finish) : base(Mp4Identifier.Traf) { while (start < finish) { var mp4Box = Mp4Utils.GetBox(bytes, ref start, finish); switch (mp4Box?.Mp4Identifier) { case null: continue; case Mp4Identifier.Tfhd: Tfhd = mp4Box as TrackFragmentHeaderBox; break; case Mp4Identifier.Sdtp: Sdtp = mp4Box as SampleDependencyTypeBox; break; case Mp4Identifier.Trun: Trun = mp4Box as TrackRunBox; break; case Mp4Identifier.Tfrf: Tfrf = mp4Box as TfrfBox; break; case Mp4Identifier.Tfxd: Tfxd = mp4Box as TfxdBox; break; } } }
public void parseHeader(out DateTime creationTime, out DateTime modificationTime, out TimeSpan duration, out uint timescale) { creationTime = Mp4Utils.time(creation_time); modificationTime = Mp4Utils.time(modification_time); timescale = BinaryPrimitives.ReverseEndianness(scale); double seconds = ((double)BinaryPrimitives.ReverseEndianness(dur)) / timescale; duration = TimeSpan.FromSeconds(seconds); }
/// <inheritdoc /> /// <summary> /// </summary> /// <param name="bytes"></param> /// <param name="start"></param> /// <param name="finish"></param> public TfrfBox(byte[] bytes, int start, int finish) : base(Mp4Identifier.Tfrf) { Version = Mp4Utils.ReadReverseBytes(bytes, 1, ref start, finish)[0]; Flags = Mp4Utils.ReadReverseBytes(bytes, 3, ref start, finish); var length = (int)Mp4Utils.ReadReverseBytes(bytes, 1, ref start, finish)[0]; Array = new Element[length]; for (var index = 0; index < length; index++) { Array[index] = new Element(bytes, Version, ref start, finish); } }
/// <inheritdoc /> /// <summary> /// </summary> /// <param name="bytes"></param> /// <param name="start"></param> /// <param name="finish"></param> public MovieFragmentBox(byte[] bytes, int start, int finish) : base(Mp4Identifier.Moof) { while (start < finish) { var mp4Box = Mp4Utils.GetBox(bytes, ref start, finish); switch (mp4Box?.Mp4Identifier) { case null: continue; case Mp4Identifier.Traf: TrackFragmentBox = mp4Box as TrackFragmentBox; break; case Mp4Identifier.Mfhd: MovieFragmentHeaderBox = mp4Box as MovieFragmentHeaderBox; break; } } }
/// <summary> /// </summary> /// <param name="boxBytes"></param> /// <param name="start"></param> /// <param name="finish"></param> public Fragment(byte[] boxBytes, int start, int finish) { while (start < finish) { var mp4Box = Mp4Utils.GetBox(boxBytes, ref start, finish); switch (mp4Box?.Mp4Identifier) { case null: continue; case Mp4Identifier.Mdat: MediaDataBox = mp4Box as MediaDataBox; break; case Mp4Identifier.Moof: MovieFragmentBox = mp4Box as MovieFragmentBox; break; } } }