public void ReadData(Common.DataCallBack dataCallBack)
{
NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log);
Thread th = new Thread(new ThreadStart(() =>
{
while (!shouldStop)
{
try
{
if (pipedStream != null && pipedStream.IsConnected)
{
byte[] byteArray = new byte[4]; //unit字节长度
pipedStream.ReadMode = PipeTransmissionMode.Byte;
MediaData mediaData = new MediaData();
pipedStream.Read(byteArray, 0, 4);
mediaData.Size = (uint)BitConverter.ToInt32(byteArray, 0);
if (mediaData.Size == 0)
{
continue;
}
pipedStream.Read(byteArray, 0, 4);
mediaData.StreamType = (StreamType)BitConverter.ToInt32(byteArray, 0);
pipedStream.Read(byteArray, 0, 4);
mediaData.DataType = (MediaDataType)BitConverter.ToInt32(byteArray, 0);
pipedStream.Read(byteArray, 0, 4);
mediaData.FrameType = (FrameDataType)BitConverter.ToInt32(byteArray, 0);
byte[] dataByteArray = new byte[mediaData.Size];
//读取管道中的流
pipedStream.Read(dataByteArray, 0, (int)mediaData.Size);
mediaData.Data = dataByteArray;
mediaDataSize = mediaData.Size;
//if (wCount < 1200)
//{
// fs.Write(mediaData.Data, 0, (int)mediaData.Size);
// wCount++;
//}
//回调函数
dataCallBack(cameraNo, mediaData, cameraNo.Substring(0, cameraNo.IndexOf("#")));
}
}
catch (Exception ex)
{
logEx.Error("VideoPipe.ReadData is error,ex={0}", ex.ToString());
if (pipedStream != null && !pipedStream.IsConnected)
{
VideoPipeManage.Instance().DeleteVideoPipe(cameraNo);
Stop();
}
}
}
}));
th.IsBackground = true;
th.Start();
}