private void Client_ReceiveCompleted(object sender, SocketHelper.Events.ReceiveEventArgs args) { if (args.ByteLength > 0) { using (MemoryStream ms = new MemoryStream(args.ReceivedBytes)) { using (BinaryReader br = new BinaryReader(ms)) { int code = br.ReadInt32(); switch ((ParamCode)code) { case ParamCode.TimePeriods: { OnVideoDataInfoReceived(VideoTimePeriodsPacket.Decode(ms)); } break; case ParamCode.LocalDownSource: { OnTreeNodesReceived(LocalVideosInfoPacket.Decode(ms)); } break; case ParamCode.Message: onMessage(MessagePacket.Decode(ms)); break; } } } } }
public static void AssertAreEqual(VideoTimePeriodsPacket exp, VideoTimePeriodsPacket act) { Assert.AreNotSame(exp, act); Assert.AreEqual(exp.VideoId, act.VideoId); Assert.AreEqual(exp.StreamId, act.StreamId); TimePeriodPacketTest.AssertAreEqualArray(exp.TimePeriods, act.TimePeriods); }
public void TestLocalVideosInfoPacket() { TimePeriodPacket tpp = new TimePeriodPacket(new DateTime(2016, 7, 25), new DateTime(2016, 7, 25, 17, 0, 0)); VideoTimePeriodsPacket[] vtpps = new VideoTimePeriodsPacket[] { new VideoTimePeriodsPacket(new VideoInfo("id", 2), new TimePeriodPacket[0]), new VideoTimePeriodsPacket(new VideoInfo("id2", 2), new TimePeriodPacket[] { new TimePeriodPacket(new DateTime(2016, 7, 25), new DateTime(2016, 7, 25, 16, 40, 0)) }) }; LocalVideosInfoPacket packet = new LocalVideosInfoPacket(tpp, vtpps); byte[] buffer = LocalVideosInfoPacket.Encode(packet); var packet2 = LocalVideosInfoPacket.Decode(buffer); Assert.AreNotSame(packet, packet2); TimePeriodPacketTest.AssertAreEqual(packet.TimePeriod, packet2.TimePeriod); Assert.AreNotSame(packet.ValidTimePeriods, packet2.ValidTimePeriods); Assert.AreEqual(packet.ValidTimePeriods.Length, packet2.ValidTimePeriods.Length); for (int i = 0; i < packet.ValidTimePeriods.Length; i++) { VideoTimePeriodsPacketTest.AssertAreEqual(packet.ValidTimePeriods[i], packet2.ValidTimePeriods[i]); } }
public void TestVideoTimePeriodsPacket() { VideoTimePeriodsPacket packet = new VideoTimePeriodsPacket(new VideoInfo("id", 2), new TimePeriodPacket[0]); var buffer = VideoTimePeriodsPacket.Encode(packet); VideoTimePeriodsPacket packet2 = VideoTimePeriodsPacket.Decode(buffer); AssertAreEqual(packet, packet2); }
private void onVideoStoragePacket(VideoTimePeriodsPacket packet) { var handler = VideoInfoReceived; if (handler != null) { handler(packet); } }
private void OnVideoDataInfoReceived(VideoTimePeriodsPacket vtpp) { EventHandler <VideoDataInfoEventArgs> handler = VideoDataInfoReceived; if (handler != null) { handler(this, new VideoDataInfoEventArgs(vtpp.VideoId, vtpp.StreamId, vtpp.TimePeriods)); } }
public void Setup() { beginTime = new DateTime(2016, 5, 6, 13, 58, 0); basePacket = new VideoBasePacket(new byte[] { 1, 2, 3, 5, 6, 7, 128, 200, 0, 15 }, beginTime, 1000000); var tpps = new TimePeriodPacket[] { new TimePeriodPacket(beginTime.AddMinutes(1), beginTime.AddMinutes(10)), new TimePeriodPacket(beginTime.AddMinutes(15), beginTime.AddMinutes(30)), }; packet = new VideoTimePeriodsPacket(new VideoInfo("test", 1), tpps); }
private byte[] getVideoTimePeriodsPacketBuffer(VideoBaseInfomParam param) { VideoTimePeriodsPacket packet = StorageSearcher.Instance.Search(param.BeginTime, param.EndTime, param as VideoInfo); if (packet != null) { return(VideoTimePeriodsPacket.Encode(packet)); } else { return(new byte[0]); } }
public VideoTimePeriodsPacket[] Search(DateTime beginTime, DateTime endTime, IVideoInfo[] videoInfos) { int length = videoInfos.Length; VideoTimePeriodsPacket[] array = new VideoTimePeriodsPacket[length]; if (length > 0) { Parallel.For(0, length, index => { array[index] = Search(beginTime, endTime, videoInfos[index]); }); } return(array); }
private void onVideoTimePeriodsReceived(VideoTimePeriodsPacket packet) { if (packet != null) { var handle = VideoTimePeriodsEvent; if (handle != null) { handle(this, packet); } if (packet.TimePeriods.Length == 0) { onErrorStatus("未找到相关视频。"); } } }
private void testVideoTimePeriodsPacket(string videoId, int streamId, int length, int lastSeconds = 0) { //查找当天数据 IVideoInfo info = new VideoInfo(videoId, streamId); DateTime beginTime = DateTime.Now.Date.Subtract(TimeSpan.FromDays(1)); DateTime endTime = DateTime.Now.Date.AddHours(10); VideoTimePeriodsPacket packet = StorageSearcher.Instance.Search(beginTime, endTime, info); Assert.IsNotNull(packet); Assert.AreEqual(streamId, packet.StreamId); Assert.AreEqual(videoId, packet.VideoId); Assert.AreEqual(length, packet.TimePeriods.Length); if (packet.TimePeriods.Length > 0) { Assert.AreEqual(DateTime.Now.Date, packet.TimePeriods[0].BeginTime); Assert.AreEqual(DateTime.Now.Date.AddSeconds(lastSeconds), packet.TimePeriods[0].EndTime); } }
private void Client_ReceiveCompleted(object sender, ReceiveEventArgs args) { try { if (args.ByteLength > 0) { onBytesLengthReceived(args.ByteLength); using (MemoryStream ms = new MemoryStream(args.ReceivedBytes)) { int code = PacketBase.ReadInt(ms); switch ((ParamCode)code) { case ParamCode.TimePeriods: onVideoStoragePacket(VideoTimePeriodsPacket.Decode(ms)); break; case ParamCode.VideoPacket: onVideoPacket(VideoStreamsPacket.Decode(ms)); break; case ParamCode.VideoBaseInfo: onVideoBasePacket(VideoBasePacket.Decode(ms)); break; case ParamCode.DownloadInfosAll: onDownloadInfosAll(DownloadInfoExpandPacket.DecodeArray(ms)); break; case ParamCode.DownloadInfosAdd: onDownloadInfosAdd(DownloadInfoExpandPacket.Decode(ms)); break; case ParamCode.DownloadInfoPart: onDownloadInfoPart(DownloadInfoPartConverter.Decode(ms)); break; } } } } catch (Exception ex) { onException(ex); } }
private void onReceived(object sender, ReceiveEventArgs args) { if (args.ByteLength > 0) { using (MemoryStream ms = new MemoryStream(args.ReceivedBytes)) { int code = PacketBase.ReadInt(ms); //Console.WriteLine("{0} - {1}", (ParamCode)code, args.ByteLength); switch ((ParamCode)code) { case ParamCode.TimePeriods: //接收所有有效视频分布 onTimePeriodsAll(VideoTimePeriodsPacket.Decode(ms).TimePeriods); break; case ParamCode.VideoBaseInfo: //设置视频基本信息 onVideoBase(VideoBasePacket.Decode(ms)); break; case ParamCode.DownloadProgress: //接收推送的下载进度。 onTimePeriodsDownloaded(VideoTimePeriodsPacket.Decode(ms).TimePeriods); break; case ParamCode.VideoPacket: //接收视频包数据流 onVideoStreams(VideoStreamsPacket.Decode(ms)); break; case ParamCode.LocalDownloadPath: onDownloadPathReceived(PacketBase.ReadString(ms)); break; case ParamCode.Message: onVideoMessageFeedback(MessagePacket.Decode(ms)); break; } } } }
public void GetVideoDataInfoAsync(VideoInfo[] vis, DateTime begin, DateTime end) { if (!SourceValid) { throw new ErrorMessageException("尚未设置数据源地址。"); } if (_src.SrcType == SourceType.Local) { if (_localVideos != null && _localVideos.ValidTimePeriods != null) { //启动线程模拟异步事件。 new Thread(() => { foreach (VideoInfo vi in vis) { VideoTimePeriodsPacket rst = _localVideos.ValidTimePeriods.FirstOrDefault(vtpp => vtpp.VideoId == vi.VideoId); if (rst != null) { OnVideoDataInfoReceived(rst); } } }) { IsBackground = true }.Start(); } } else { EnsureStart(); if (_src.Storage != null) { VideoDataInfoParam param = new VideoDataInfoParam(_src.Storage.Ip, _src.Storage.Port, vis, begin, end); Client.Send((int)ParamCode.VideoInfosTimePeriods, VideoDataInfoParam.Encode(param)); } else { throw new ErrorMessageException("未配置集中存储相关信息。"); } } }
private void onVideoTimePeriodsReceived(VideoDownloadCmd vd, VideoTimePeriodsPacket packet) { _baseRec.UpdateTimePeriods(packet); loadRecorder(); }
private void run() { try { //时间段分布 while (!_disposeEvent.WaitOne(1)) { VideoTimePeriodsPacket valid = _download.GetVideoTimePeriods(); if (valid != null) { send(ParamCode.TimePeriods, VideoTimePeriodsPacket.Encode(valid)); break; } } //视频包头 while (!_disposeEvent.WaitOne(1)) { VideoBasePacket vbp = _download.GetVideoBasePacket(); if (vbp != null) { send(ParamCode.VideoBaseInfo, VideoBasePacket.Encode(vbp)); break; } } //实时下载进度 while (!_disposeEvent.WaitOne(1)) { Thread.Sleep(1000); bool canStopFeedback = canStopFeedbackProcess(); VideoTimePeriodsPacket down = _download.GetCompletedTimePeriods(); if (down != null) { send(ParamCode.DownloadProgress, VideoTimePeriodsPacket.Encode(down)); } if (canStopFeedback) { Console.WriteLine("Stop Feedback RealTime Process! "); if (_download is OnlineDownloadManager) { var downStatus = (_download as OnlineDownloadManager).DownloadStatus; if (downStatus != DownloadStatus.Completed) { var name = _download.GetVideoTimePeriods().VideoName; string status = DownloadStatusManager.ToHanZi(downStatus); string message = name + status + "!"; if (downStatus == DownloadStatus.Error) { message += "\n" + (_download as OnlineDownloadManager).ErrorInfo; } if (downStatus != DownloadStatus.Deleted) { sendMessage(MessageType.Warn, message, "停止更新下载进度!"); } } } break; } } } catch (Exception ex) { Exception e = ex.InnerException == null? ex : ex.InnerException; sendMessage(MessageType.Error, e.Message, "停止更新下载进度!"); Console.WriteLine(ex); } }
private void onVideoTimePeriodsEvent(VideoDownloadCmd vd, VideoTimePeriodsPacket packet) { send(ParamCode.TimePeriods, VideoTimePeriodsPacket.Encode(packet)); vd.Dispose(); }