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); }
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; //} } } } }