Exemple #1
0
        private void doPsByte(byte[] psDate)
        {
            if (!(psDate[0] == 0 && psDate[1] == 0 && psDate[2] == 1 && psDate[3] == 0xBA))
            {
                Console.WriteLine("出错了!!!!!!!!");
            }
            long   scr      = 0;
            Stream msStream = new System.IO.MemoryStream(psDate);

            var ph = new PSPacketHeader(msStream);

            scr = ph.GetSCR();
            List <PESPacket> videoPESList = new List <PESPacket>();

            while (msStream.Length - msStream.Position > 4)
            {
                bool findStartCode = msStream.ReadByte() == 0x00 && msStream.ReadByte() == 0x00 && msStream.ReadByte() == 0x01 && msStream.ReadByte() == 0xE0;
                if (findStartCode)
                {
                    msStream.Seek(-4, SeekOrigin.Current);
                    var pesVideo = new PESPacket();
                    pesVideo.SetBytes(msStream);
                    var esdata = pesVideo.PES_Packet_Data;
                    videoPESList.Add(pesVideo);
                }
            }
            msStream.Close();
            HandlES(videoPESList);
        }
Exemple #2
0
        private void AnalyzeThead()
        {
            long scr = 0;

            while (_isWorking)
            {
                bool findStartCode = false;
                byte flag          = 0;
                lock (_lock)
                {
                    if (ms.Length - ms.ReadPosition > 4)
                    {
                        findStartCode = ms.ReadByte() == 0x00 && ms.ReadByte() == 0x00 && ms.ReadByte() == 0x01;
                        if (findStartCode)
                        {
                            flag = (byte)ms.ReadByte();
                            if (flag == 0xBA || flag == 0xBB || flag == 0xBC || flag == 0xE0 || flag == 0xC0)
                            {
                                ms.Seek(-4, SeekOrigin.Current);
                            }
                        }
                    }
                }
                if (findStartCode)
                {
                    try
                    {
                        switch (flag)
                        {
                        case 0xBA:    //PS流包头
                            var ph = new PSPacketHeader(ms);
                            scr = ph.GetSCR();
                            break;

                        case 0xBB:    //PS流系统头,有些流没有该值
                            new PSSystemHeader(ms);
                            break;

                        case 0xBC:    //PS流map
                            var map = new PSMap(ms);
                            break;

                        case 0xE0:    //PES包(视频)
                            var pesVideo = new PESPacket();
                            pesVideo.SetBytes(ms);
                            var frame = AnalyzeNewFrame(pesVideo, false);
                            if (frame != null)
                            {
                                frame.nTimetick = scr;
                            }
                            if (frame != null && frame.nIsKeyFrame == 1)
                            {
                                lock (_lock)
                                    ms = ms.Tolave();
                            }
                            break;

                        case 0xC0:    //PES包(音频)
                            var pesAudio = new PESPacket();
                            pesAudio.SetBytes(ms);
                            AnalyzeNewFrame(pesAudio, true);
                            break;

                        case 0xBD:
                            byte[] lenbuf = new byte[2];
                            ms.Read(lenbuf, 0, 2);
                            var len = BitConverter.ToInt16(lenbuf, 0);
                            len    = IPAddress.HostToNetworkOrder((short)len);
                            lenbuf = new byte[len];
                            ms.Read(lenbuf, 0, len);
                            break;
                        }
                    }
                    catch (Exception e)
                    {
                        //if (_isWorking && SLW.Base.AppConfig._D)
                        //{
                        //    //GLib.DebugEx.WriteLog(e);
                        //    throw;
                        //}
                    }
                }
            }
        }