public void Parse(HDSBinaryReader br, bool longIdFields, bool longOffsetFields) { time = br.ReadUInt64(); if (longIdFields) { segment = br.ReadUInt32(); fragment = br.ReadUInt32(); } else { segment = br.ReadUInt16(); fragment = br.ReadUInt16(); } if (longOffsetFields) { afraOffset = br.ReadUInt64(); offsetFromAfra = br.ReadUInt64(); } else { afraOffset = br.ReadUInt32(); offsetFromAfra = br.ReadUInt32(); } }
public void Parse(HDSBinaryReader br, bool longOffsetFields) { time = br.ReadUInt64(); if (longOffsetFields) { offset = br.ReadUInt64(); } else { offset = br.ReadUInt32(); } }
public static BoxInfo getNextBoxInfo(HDSBinaryReader br) { if (!br.BaseStream.CanRead || (br.BytesAvailable < F4FConstants.FIELD_SIZE_LENGTH + F4FConstants.FIELD_TYPE_LENGTH)) { return(null); } uint size = br.ReadUInt32(); string type = br.ReadUtfBytes(F4FConstants.FIELD_TYPE_LENGTH); uint length = F4FConstants.FIELD_SIZE_LENGTH + F4FConstants.FIELD_TYPE_LENGTH; if (size == F4FConstants.FLAG_USE_LARGE_SIZE) { size = (uint)br.ReadUInt64(); length += F4FConstants.FIELD_LARGE_SIZE_LENGTH; } if (type == F4FConstants.EXTENDED_TYPE) { // Read past the extended type. br.Position += F4FConstants.FIELD_EXTENDED_TYPE_LENGTH; length += F4FConstants.FIELD_EXTENDED_TYPE_LENGTH; } return(new BoxInfo(size, type, length)); }
public void Parse(HDSBinaryReader br) { firstFragment = br.ReadUInt32(); durationAccrued = br.ReadUInt64(); duration = br.ReadUInt32(); if (duration == 0) { discontinuityIndicator = br.ReadByte(); } }
public override void Parse(BoxInfo bi, HDSBinaryReader br) { base.Parse(bi, br); bootstrapVersion = br.ReadUInt32(); byte temp = br.ReadByte(); profile = (uint)(temp >> 6); live = ((temp & 0x20) > 0); update = ((temp & 0x01) > 0); timeScale = br.ReadUInt32(); currentMediaTime = br.ReadUInt64(); smpteTimeCodeOffset = br.ReadUInt64(); movieIdentifier = br.ReadString(); serverBaseURLs.Clear(); int serverEntryCount = br.ReadByte(); for (int i = 0; i < serverEntryCount; i++) { serverBaseURLs.Add(br.ReadString()); } qualitySegmentURLModifiers.Clear(); int qualityEntryCount = br.ReadByte(); for (int i = 0; i < qualityEntryCount; i++) { qualitySegmentURLModifiers.Add(br.ReadString()); } drmData = br.ReadString(); metadata = br.ReadString(); segmentRunTables.Clear(); uint segmentRunTableCount = br.ReadByte(); for (uint i = 0; i < segmentRunTableCount; i++) { BoxInfo boxInfo = BoxInfo.getNextBoxInfo(br); if (boxInfo == null) { break; } if (boxInfo.Type == F4FConstants.BOX_TYPE_ASRT) { AdobeSegmentRunTable asrt = new AdobeSegmentRunTable(); asrt.Parse(boxInfo, br); segmentRunTables.Add(asrt); } } fragmentRunTables.Clear(); uint fragmentRunTableCount = br.ReadByte(); for (uint i = 0; i < fragmentRunTableCount; i++) { BoxInfo boxInfo = BoxInfo.getNextBoxInfo(br); if (boxInfo == null) { break; } if (boxInfo.Type == F4FConstants.BOX_TYPE_AFRT) { AdobeFragmentRunTable afrt = new AdobeFragmentRunTable(); afrt.Parse(boxInfo, br); fragmentRunTables.Add(afrt); } } // Check if live stream is still live if (live && (fragmentRunTables.Count > 0) && ContentComplete()) { live = false; RemoveLastFragment(); } }