private void _mediaMessageReader_MessageReceived(MdvrMediaMessage message) { if (message.MessageType == MdvrMediaMessageTypes.RealTimeVideo) { using (var ms = new MemoryStream(message.ByteList.ToArray())) { using (var br = new BinaryReader(ms)) { var videoData = new RealTimeVideoModel(); videoData.FrameType = br.ReadInt32(); videoData.DataLength = br.ReadInt32(); videoData.Timestamp = br.ReadInt64(); videoData.Buffer = br.ReadBytes(videoData.DataLength); if (Directory.Exists("Test") == false) { Directory.CreateDirectory("Test"); } using (var fs = File.Create(string.Format("Test/{0}.bin", Guid.NewGuid()))) { using (var bw = new BinaryWriter(fs)) { bw.Write(videoData.Buffer); } } using (var fs = File.OpenWrite(string.Format("Test/{0}.264", DevIDNO))) { using (var bw = new BinaryWriter(fs)) { bw.Write(videoData.Buffer); } } } } } }
public void Read(byte[] bytes, int byteCnt) { using (var ms = new MemoryStream(bytes)) { using (var br = new BinaryReader(ms)) { while (ms.Position < byteCnt) { switch (_field) { case MediaMessageFields.Start: if (MdvrMessageHelper.GetString(br.ReadBytes(8)) == MdvrMessageHelper.MediaMessageStart) { _msg = new MdvrMediaMessage(); _field = MediaMessageFields.MessageLength; } break; case MediaMessageFields.MessageLength: _msg.MessageLength = br.ReadInt32(); _field = MediaMessageFields.MessageType; break; case MediaMessageFields.MessageType: _msg.MessageType = br.ReadInt16(); _field = MediaMessageFields.SerialNo; break; case MediaMessageFields.SerialNo: _msg.SerialNo = br.ReadInt16(); _field = MediaMessageFields.Time; break; case MediaMessageFields.Time: _msg.Tick = br.ReadInt32(); _field = MediaMessageFields.Data; break; case MediaMessageFields.Data: if (_msg.ByteList.Count < _msg.DataLength) { _msg.ByteList.Add(br.ReadByte()); if (_msg.ByteList.Count == _msg.DataLength) { _field = MediaMessageFields.End; } } break; case MediaMessageFields.End: if (MdvrMessageHelper.GetString(br.ReadBytes(4)) == MdvrMessageHelper.MediaMessageEnd) { MessageReceived?.Invoke(_msg); } _field = MediaMessageFields.Start; break; } } } } }