public void ReceiveDataReadStream(DataPackage pkgData) { //收到实时码流数据【采集器→主机】 ushort packID = 0; Struct_FileHead fileHead = new Struct_FileHead(); byte[] readBytes = null; byte[] dataBuffer = pkgData.PureData; using (MemoryStream ms = new MemoryStream(dataBuffer)) { using (BinaryReader br = new BinaryReader(ms)) { fileHead.Buffer = br.ReadBytes(4); //要读取文件的参数 packID = br.ReadUInt16(); //包序号 int packDataLen = br.ReadUInt16(); //该包数据中图像数据长度,最大 506 字节。 readBytes = br.ReadBytes(packDataLen); } } if (readBytes != null && readBytes.Length > 0) { if (OnDataChanged != null) { //通知主程序处理实时码流数据 StreamHandlerEventArgs eventArgs = new StreamHandlerEventArgs(RunMode.Stream); eventArgs.OperState = OperationState.StreamReceiving; eventArgs.Buffer = readBytes; eventArgs.Value = null; //if (readBytes.Length == 12) //{ // //媒体流数据包包头,包含了时间戳以及数据流信息 // Struct_PacketHeader packetHeader = new Struct_PacketHeader(readBytes); // eventArgs.Value = packetHeader; //} //else //{ // File.WriteAllBytes("H:\\aa", readBytes); //} OnDataChanged(this, eventArgs); } } }
void ProStream(StreamHandlerEventArgs e) { //实时码流 if (e.OperState == OperationState.StreamOpen) { //打开码流,初始化实时码流 } else if (e.OperState == OperationState.StreamClose) { //关闭码流 } else if (e.OperState == OperationState.StreamReceiving) { //显示实时码流图像 byte[] buffer = ((StreamHandlerEventArgs)e).Buffer; if (e.Value != null) { } //显示实时图像流 //bw.Write(buffer); string text = string.Format("[Len: {0}] {1} \r\n", buffer.Length, Utils.ConvertTools.ToHexString(buffer)); WriteLogText(text); } }
public void ReceiveStreamAction(DataPackage pkgData) { //收到 "开关实时码流" 的应答【采集器→主机】 byte retCode = 0; byte[] dataBuffer = pkgData.PureData; using (MemoryStream ms = new MemoryStream(dataBuffer)) { using (BinaryReader br = new BinaryReader(ms)) { retCode = br.ReadByte(); //结果码: 0-码流关闭,1-码流打开 curStatus_ctl = br.ReadByte(); //输出开关量状态 br.ReadInt16(); //R保留 macState = 1; } } if (retCode == 0) { //收到实时码流已关闭命令 OpenState = false; if (OnDataChanged != null) { StreamHandlerEventArgs eventArgs = new StreamHandlerEventArgs(RunMode.Stream); eventArgs.OperState = OperationState.StreamClose; OnDataChanged(this, eventArgs); } } else { //收到实时码流已打开命令 OpenState = true; if (OnDataChanged != null) { StreamHandlerEventArgs eventArgs = new StreamHandlerEventArgs(RunMode.Stream); eventArgs.OperState = OperationState.StreamOpen; OnDataChanged(this, eventArgs); } } }