private List <(ElementDescriptor Element, ulong Position)> ReadSeekHeads(EbmlReader ebmlReader) { List <(ElementDescriptor, ulong)> availableElements = null; ElementDescriptor desc; ElementDescriptor availDesc = null; ulong pos = 0; ebmlReader.EnterContainer(); while (ebmlReader.ReadNext()) { if (_descriptorsMap.TryGetValue(ebmlReader.ElementId.EncodedValue, out desc)) { if (desc.Name == "Seek") { ebmlReader.EnterContainer(); try { while (ebmlReader.ReadNext()) { if (_descriptorsMap.TryGetValue(ebmlReader.ElementId.EncodedValue, out desc)) { if (desc.Name == "SeekID") { byte[] data = new byte[ebmlReader.ElementSize]; ebmlReader.ReadBinary(data, 0, data.Length); MemoryStream mem = new MemoryStream(data); byte[] temp = new byte[data.Length]; VInt id = VInt.Read(mem, data.Length, temp); _descriptorsMap.TryGetValue(id.EncodedValue, out availDesc); } else if (desc.Name == "SeekPosition") { pos = ebmlReader.ReadUInt(); } } } if (availableElements == null) { availableElements = new List <(ElementDescriptor, ulong)>(); } if (availDesc != null && pos > 0) { availableElements.Add((availDesc, pos)); } } catch { } } ebmlReader.LeaveContainer(); } } ebmlReader.LeaveContainer(); return(availableElements); }