コード例 #1
0
 private void onVideoBasePacketReceived(VideoBasePacket packet)
 {
     if (packet != null)
     {
         _baseRec.UpdateVideoBase(packet);
         loadVideoBase();
     }
 }
コード例 #2
0
        private void onVideoBase(VideoBasePacket packet)
        {
            var handle = VideoBaseReceived;

            if (handle != null)
            {
                handle(packet);
            }
        }
コード例 #3
0
        private void onVideoBasePacketReceived(VideoBasePacket obj)
        {
            var handle = VideoBaseEvent;

            if (handle != null && obj != null)
            {
                handle(obj);
            }
        }
コード例 #4
0
        public void TestVideoBasePacketLong()
        {
            VideoBasePacket packet = new VideoBasePacket(new byte[30], new DateTime(2016, 1, 1), 1000000000000);

            byte[] buffer  = VideoBasePacket.Encode(packet);
            var    packet2 = VideoBasePacket.Decode(buffer);

            AssertAreEqual(packet, packet2);
        }
コード例 #5
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);
        }
コード例 #6
0
 public void SetVideoBaseInfo(VideoBasePacket packet)
 {
     lock (_lockObj)
     {
         if (_recorder != null)
         {
             _recorder.Set(new StreamPacket(packet.Time, DataType.SysHead, packet.Header));
             IsInitedVideoBase = true;
         }
     }
 }
コード例 #7
0
        private byte[] getVideoBasePacketBuffer(VideoBaseInfomParam param)
        {
            var packet = StorageDownloader.Instance.GetVideoBaseInfom(param.VideoId, param.StreamId, param.BeginTime, param.EndTime);

            if (packet != null)
            {
                return(VideoBasePacket.Encode(packet));
            }
            else
            {
                return(new byte[0]);
            }
        }
コード例 #8
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);
            }
        }
コード例 #9
0
        public void TestStorageDownloader_BaseInfom_100()
        {
            int      length = 100;
            DateTime start  = DateTime.Now;

            VideoBasePacket[] infos = new VideoBasePacket[length];
            for (int index = 0; index < length; index++)
            //Parallel.For(0, length, index =>
            {
                string videoId = string.Format("VideoId_{0:X}", 0x50BAD15900010301 + index);
                infos[index] = StorageDownloader.Instance.GetVideoBaseInfom(videoId, 2, new DateTime(2012, 12, 31, 1, 53, 30), new DateTime(2013, 1, 2, 23, 55, 30));
            }
            //);
            Console.WriteLine(DateTime.Now - start);
            for (int i = 0; i < infos.Length; i++)
            {
                Assert.AreEqual(2, infos[i].Header.Length);
                Assert.AreEqual((3600 * 10 / 5) * ((20 + 6) + 4 * (20 + 3)), infos[i].Length);
            }
        }
コード例 #10
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;
                    }
                }
            }
        }
コード例 #11
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);
            }
        }
コード例 #12
0
 private void onVideoBase(VideoBasePacket obj)
 {
     BaseInfo = obj;
     startDownload();
 }
コード例 #13
0
 public static void AssertAreEqual(VideoBasePacket exp, VideoBasePacket act)
 {
     Assert.AreEqual(exp.Header.Length, act.Header.Length);
     Assert.AreEqual(exp.Time, act.Time);
     Assert.AreEqual(exp.Length, act.Length);
 }