private static void AddPesPacket(List <DvbSubPes> list, List <Packet> packetList) { int bufferSize = 0; foreach (var p in packetList) { bufferSize += p.Payload.Length; } var pesData = new byte[bufferSize]; int pesIndex = 0; foreach (var p in packetList) { Buffer.BlockCopy(p.Payload, 0, pesData, pesIndex, p.Payload.Length); pesIndex += p.Payload.Length; } DvbSubPes pes; if (VobSubParser.IsMpeg2PackHeader(pesData)) { pes = new DvbSubPes(pesData, Mpeg2Header.Length); } else if (VobSubParser.IsPrivateStream1(pesData, 0)) { pes = new DvbSubPes(pesData, 0); } else { pes = new DvbSubPes(pesData, 0); } list.Add(pes); }
public static bool IsVobSub(string fileName) { using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { var buffer = new byte[4]; fs.Read(buffer, 0, buffer.Length); return(VobSubParser.IsMpeg2PackHeader(buffer) || VobSubParser.IsPrivateStream1(buffer, 0)); } }
public VobSubPack(byte[] buffer, IdxParagraph idxLine) { _buffer = buffer; IdxLine = idxLine; if (VobSubParser.IsMpeg2PackHeader(buffer)) { Mpeg2Header = new Mpeg2Header(buffer); PacketizedElementaryStream = new PacketizedElementaryStream(buffer, Mpeg2Header.Length); } else if (VobSubParser.IsPrivateStream1(buffer, 0)) { PacketizedElementaryStream = new PacketizedElementaryStream(buffer, 0); } }
/// <summary> /// Can be used with e.g. MemoryStream or FileStream /// </summary> /// <param name="ms">Input stream</param> public void Parse(Stream ms) { var dataIndices = GetDataIndicesAndPesStart(ms, out var dvbPesStartIndex); if (dvbPesStartIndex <= 0) { return; } ms.Position = 0; foreach (var dataIndex in dataIndices) { ms.Seek(dvbPesStartIndex + dataIndex.Offset, SeekOrigin.Begin); var pesData = new byte[dataIndex.Length]; var bytesRead = ms.Read(pesData, 0, pesData.Length); if (bytesRead < pesData.Length) { break; // incomplete packet at end-of-file } DvbSubPes pes; if (VobSubParser.IsMpeg2PackHeader(pesData)) { pes = new DvbSubPes(pesData, Mpeg2Header.Length); } else if (VobSubParser.IsPrivateStream1(pesData, 0)) { pes = new DvbSubPes(pesData, 0); } else { pes = new DvbSubPes(0, pesData); } pes.PresentationTimestamp = dataIndex.Pts; _dvbSubs.Add(pes); } }