コード例 #1
0
        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);
        }
コード例 #2
0
 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));
     }
 }
コード例 #3
0
ファイル: VobSubPack.cs プロジェクト: cuilishen/MediaPoint
        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);
            }
        }
コード例 #4
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);
            }
        }