private void ParseMxf(Stream stream) { stream.Seek(0, SeekOrigin.Begin); ReadHeaderPartitionPack(stream); if (IsValid) { var length = stream.Length; long next = _startPosition; while (next + 20 < length) { stream.Seek(next, SeekOrigin.Begin); var klv = new KlvPacket(stream); next += klv.TotalSize; if (klv.IdentifierType == KeyIdentifier.EssenceElement && klv.DataSize < 500000) { stream.Seek(klv.DataPosition, SeekOrigin.Begin); var buffer = new byte[klv.DataSize]; stream.Read(buffer, 0, buffer.Length); string s = System.Text.Encoding.UTF8.GetString(buffer); if (IsSubtitle(s)) { _subtitleList.Add(s); } } } } }
private void ParseMxf(Stream stream) { stream.Seek(0, SeekOrigin.Begin); ReadHeaderPartitionPack(stream); if (IsValid) { var length = stream.Length; long next = _startPosition; while (next + 20 < length) { stream.Seek(next, SeekOrigin.Begin); var klv = new KlvPacket(stream); next += klv.TotalSize; if ((klv.IdentifierType == KeyIdentifier.EssenceElement || klv.IdentifierType == KeyIdentifier.Unknown) && klv.DataSize < 500000) { stream.Seek(klv.DataPosition, SeekOrigin.Begin); var buffer = new byte[klv.DataSize]; stream.Read(buffer, 0, buffer.Length); if (buffer.Length >= 12) { string s; if (buffer[0] == 0xef && buffer[1] == 0xbb && buffer[2] == 0xbf) { s = System.Text.Encoding.UTF8.GetString(buffer, 3, buffer.Length - 3); } else if (buffer[0] == 0xff && buffer[1] == 0xfe && buffer[2] == 0 && buffer[3] == 0) { s = System.Text.Encoding.GetEncoding(12000).GetString(buffer, 4, buffer.Length - 4); // UTF-32 (LE) } else if (buffer[0] == 0xff && buffer[1] == 0xfe) { s = System.Text.Encoding.Unicode.GetString(buffer, 2, buffer.Length - 2); } else if (buffer[0] == 0xfe && buffer[1] == 0xff) // utf-16 and ucs-2 { s = System.Text.Encoding.BigEndianUnicode.GetString(buffer, 2, buffer.Length - 2); } else if (buffer[0] == 0 && buffer[1] == 0 && buffer[2] == 0xfe && buffer[3] == 0xff) // ucs-4 { s = System.Text.Encoding.GetEncoding(12001).GetString(buffer, 4, buffer.Length - 4); // UTF-32 (BE) } else { s = System.Text.Encoding.UTF8.GetString(buffer); } if (IsSubtitle(s)) { _subtitleList.Add(s); } } } } } }
private void ParseMxf(Stream stream) { stream.Seek(0, SeekOrigin.Begin); ReadHeaderPartitionPack(stream); if (IsValid) { var length = stream.Length; long next = _startPosition; while (next + 20 < length) { stream.Seek(next, SeekOrigin.Begin); var klv = new KlvPacket(stream); //Console.WriteLine(); //Console.WriteLine("Key: " + klv.DisplayKey); //Console.WriteLine("Type: " + klv.IdentifyerType); //Console.WriteLine("Total size: " + klv.TotalSize); //Console.WriteLine("Data position: " + klv.DataPosition); //if (klv.IdentifyerType == KeyIdentifier.PartitionPack) // Console.WriteLine("Partition status: " + klv.PartionStatus); next += klv.TotalSize; if (klv.IdentifierType == KeyIdentifier.EssenceElement && klv.DataSize < 500000) { stream.Seek(klv.DataPosition, SeekOrigin.Begin); var buffer = new byte[klv.DataSize]; stream.Read(buffer, 0, buffer.Length); string s = System.Text.Encoding.UTF8.GetString(buffer); if (IsSubtitle(s)) { _subtitleList.Add(s); } } } } }