Exemplo n.º 1
0
        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;
                        }
                    }
                }
            }
        }
Exemplo n.º 2
0
 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]);
            }
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        private void onVideoStoragePacket(VideoTimePeriodsPacket packet)
        {
            var handler = VideoInfoReceived;

            if (handler != null)
            {
                handler(packet);
            }
        }
Exemplo n.º 6
0
        private void OnVideoDataInfoReceived(VideoTimePeriodsPacket vtpp)
        {
            EventHandler <VideoDataInfoEventArgs> handler = VideoDataInfoReceived;

            if (handler != null)
            {
                handler(this, new VideoDataInfoEventArgs(vtpp.VideoId, vtpp.StreamId, vtpp.TimePeriods));
            }
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        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]);
            }
        }
Exemplo n.º 9
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);
        }
Exemplo n.º 10
0
 private void onVideoTimePeriodsReceived(VideoTimePeriodsPacket packet)
 {
     if (packet != null)
     {
         var handle = VideoTimePeriodsEvent;
         if (handle != null)
         {
             handle(this, packet);
         }
         if (packet.TimePeriods.Length == 0)
         {
             onErrorStatus("未找到相关视频。");
         }
     }
 }
Exemplo n.º 11
0
        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);
            }
        }
Exemplo n.º 12
0
        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);
            }
        }
Exemplo n.º 13
0
        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;
                    }
                }
            }
        }
Exemplo n.º 14
0
 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("未配置集中存储相关信息。");
         }
     }
 }
Exemplo n.º 15
0
 private void onVideoTimePeriodsReceived(VideoDownloadCmd vd, VideoTimePeriodsPacket packet)
 {
     _baseRec.UpdateTimePeriods(packet);
     loadRecorder();
 }
Exemplo n.º 16
0
        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);
            }
        }
Exemplo n.º 17
0
 private void onVideoTimePeriodsEvent(VideoDownloadCmd vd, VideoTimePeriodsPacket packet)
 {
     send(ParamCode.TimePeriods, VideoTimePeriodsPacket.Encode(packet));
     vd.Dispose();
 }