private void Stream_HeaderEvent(IHeaderPacket obj) { switch (_vType) { case VideoDeviceType.Hikv: { HikHeaderPacket hhp = obj as HikHeaderPacket; if (hhp != null) { CurrentHeader = new HikvStreamHeader(hhp.Buffer); OnStreamHeaderRecieved(CurrentHeader); } } break; case VideoDeviceType.Ffmpeg: { FfmpegHeaderPacket fhp = obj as FfmpegHeaderPacket; if (fhp != null) { CurrentHeader = new FfmpegStreamHeader(fhp.CodecID, fhp.Buffer); OnStreamHeaderRecieved(CurrentHeader); } } break; default: break; } }
private void streamPipe_StreamHeaderReceived(object sender, IStreamHeader e) { _headerType = e.DeviceType; switch (e.DeviceType) { case VideoDeviceType.Hikv: { _headerReceived = true; HikM4Header header = new HikM4Header() { Type = HikM4Decoder.HeaderType, Data = (e as HikvStreamHeader).Buffer }; HikM4Header = header; onHikM4HeaderReceived(new HikM4HeaderEventArgs(header)); //初始化包头 if (_decode) { _hikm4Decoder.InputData(header.Type, header.Data); } } break; case VideoDeviceType.Ffmpeg: { _headerReceived = true; FfmpegStreamHeader tH = e as FfmpegStreamHeader; FfmpegHeader header = new FfmpegHeader() { CodecID = (Constants.AVCodecID)tH.CodecID, Width = 0, Height = 0 }; FfmpegHeader = header; onFfmpegHeaderReceived(new FfmpegHeaderEventArgs(header)); //初始化包头 if (_decode) { _ffmpegDecoder.Init(header.CodecID, header.Width, header.Height); } } break; default: break; } }
private void _client_ReceiveCompleted(object sender, ReceiveEventArgs args) { try { if (args.ByteLenght >= 4) { int code = BitConverter.ToInt32(args.ReceivedBytes, 0); switch (code) { case StreamEntityCode.FfmpegHeader: { CurrentHeader = FfmpegStreamHeader.DeserializeTo(args.ReceivedBytes); OnStreamHeaderRecieved(CurrentHeader); } break; case StreamEntityCode.HikvHeader: { CurrentHeader = HikvStreamHeader.DeserializeTo(args.ReceivedBytes); OnStreamHeaderRecieved(CurrentHeader); } break; case StreamEntityCode.StreamData: { OnStreamDataReceived(StreamData.DeserializeTo(args.ReceivedBytes)); } break; case StreamEntityCode.RemoteError: { RemoteError re = RemoteError.DeserializeTo(args.ReceivedBytes); OnErrorOccurred(new ErrorEventArgs(re.ErrorMessage, ErrorTypes.Receive)); } break; } } } catch (Exception e) { OnErrorOccurred(new ErrorEventArgs($"从远程流媒体服务器获取到异常数据:{e.Message}", ErrorTypes.Receive)); } }