private TreeViewItem updateNode(VideoParser.Node node)
        {
            TreeViewItem item = new TreeViewItem();

            item.Header     = node.Name;
            item.Tag        = node;
            item.IsExpanded = true;
            VideoParser.Server server = node as CCTVClient.VideoParser.Server;
            if (server != null)
            {
                foreach (VideoParser.Node child in server.Childs)
                {
                    item.Items.Add(updateNode(child));
                }
            }
            else
            {
                VideoParser.Front front = node as VideoParser.Front;
                if (front != null)
                {
                    foreach (VideoParser.Video child in front.Childs)
                    {
                        item.Items.Add(getVideoNode(child, front.Online));
                    }
                }
            }
            return(item);
        }
Beispiel #2
0
        private void getOnlineStatus(Dictionary <string, OnlineStatus> onlineDict, VideoParser.Node node)
        {
            string nodeId = getNodeId(node.Id);

            onlineDict[nodeId] = new OnlineStatus()
            {
                NodeId = nodeId, Online = node.Online
            };

            VideoParser.Server server = node as VideoParser.Server;
            if (server != null)
            {
                if (server.Childs != null)
                {
                    foreach (VideoParser.Node child in server.Childs)
                    {
                        getOnlineStatus(onlineDict, child);
                    }
                }
            }
            else
            {
                VideoParser.Front front = node as VideoParser.Front;
                if (front != null)
                {
                    if (front.Childs != null)
                    {
                        foreach (VideoParser.Video child in front.Childs)
                        {
                            getOnlineStatus(onlineDict, child);
                        }
                    }
                }
            }
        }
        private void classifyInfo(VideoParser.Node node, string serverId)
        {
            //在线标识。
            var nodeId = getNodeId(node.Id);

            _onlineStatus[nodeId] = new CCTVOnlineStatus()
            {
                VideoId = nodeId, Online = node.Online
            };

            VideoParser.Server server = node as VideoParser.Server;
            if (server != null)
            {
                CCTVServerInfo si = new CCTVServerInfo()
                {
                    ServerId          = getNodeId(node.Id),
                    Name              = node.Name,
                    InfoServiceIp     = node.Host,
                    InfoServicePort   = 27010,
                    StreamServerIp    = node.Host,
                    StreamServerPort  = 37010,
                    ControlServerIp   = node.Host,
                    ControlServerPort = 47010
                };
                _servers[si.ServerId] = si;
                if (server.Childs != null)
                {
                    foreach (VideoParser.Node child in server.Childs)
                    {
                        classifyInfo(child, si.ServerId);
                    }
                }
            }
            else
            {
                VideoParser.Front front = node as VideoParser.Front;
                if (front != null)
                {
                    if (front.Childs != null)
                    {
                        int channel = 1;
                        foreach (VideoParser.Video child in front.Childs)
                        {
                            classifyInfo(front, child, channel, serverId);
                            if (front.Type == 1 || front.Type == 11)
                            {
                                channel += 4;
                            }
                            else
                            {
                                channel++;
                            }
                        }
                    }
                }
            }
        }
Beispiel #4
0
        private void getStaticInfo(Dictionary <string, CCTVStaticInfo> staticDict, VideoParser.Front front, VideoParser.Video video, int channel)
        {
            CCTVStaticInfo info = new CCTVStaticInfo()
            {
                VideoId      = getNodeId(video.Id),
                Name         = video.Name,
                IP           = front.Host,
                HighDef      = video.HighDef,
                PanTilt      = video.PanTiltUnit != null && (video.PanTiltUnit.EightDirections || video.PanTiltUnit.FourDirections),
                Zoom         = video.PanTiltUnit != null && video.PanTiltUnit.Zoom,
                AuxSwitch    = getAuxSwitch(video.PanTiltUnit),
                VideoAnalyze = video.VideoAnalyze,
                TargetTrack  = video.PanTiltUnit != null && video.PanTiltUnit.Trackable,
                Streams      = getStreamInfos(video),
            };

            info.ImageTrackHost = ImageTrackInfoProvider.Instance.GetImageTrackHost(video.Id);
            info.ImageTrack     = !string.IsNullOrEmpty(info.ImageTrackHost);
            if (video.DvrChannel > 0)
            {
                channel = video.DvrChannel;
            }
            info.DvrChannelInfo = getDvrChannelInfo(front, channel);

            if (info.TargetTrack && video.PanTiltUnit != null)
            {
                var ptz = video.PanTiltUnit;
                info.Latitude  = ptz.Latitude;
                info.Longitude = ptz.Longitude;
                info.Altitude  = ptz.Altitude;
                info.TrackInfo = new TrackVideoInfo()
                {
                    UpLimit     = ptz.UpLimit,
                    DownLimit   = ptz.DownLimit,
                    LeftLimit   = ptz.LeftLimit,
                    RightLimit  = ptz.RightLimit,
                    MaxViewPort = ptz.WideView,
                    MinViewPort = ptz.TeleView,
                };
            }
            else
            {
                VideoPosition videoPosition;
                if (_videoPosSync.TryGetValue(info.VideoId, out videoPosition))
                {
                    info.Latitude  = videoPosition.Latitude;
                    info.Longitude = videoPosition.Longitude;
                    info.Altitude  = videoPosition.Altitude;
                    info.Heading   = videoPosition.Heading;
                    info.ViewPort  = videoPosition.ViewPort;
                }
            }

            staticDict[info.VideoId] = info;
        }
Beispiel #5
0
        private DVRChannelInfo getDvrChannelInfo(VideoParser.Front front, int channel)
        {
            var type = getDvrType(front.Type);

            if (type == DVRChannelInfo.DVRType.Unknown)
            {
                return(null);
            }
            else
            {
                return new DVRChannelInfo()
                       {
                           Type    = type,
                           Host    = front.Host,
                           Port    = front.Port,
                           User    = front.User,
                           Pass    = front.Pass,
                           Channel = channel,
                       }
            };
        }
 private static void collectVideoId(HashSet <ulong> videoIdSet, VideoParser.Node node)
 {
     VideoParser.Server server = node as VideoParser.Server;
     if (server != null)
     {
         foreach (VideoParser.Node child in server.Childs)
         {
             collectVideoId(videoIdSet, child);
         }
     }
     else
     {
         VideoParser.Front front = node as VideoParser.Front;
         if (front != null)
         {
             foreach (VideoParser.Video video in front.Childs)
             {
                 videoIdSet.Add(video.Id);
             }
         }
     }
 }
Beispiel #7
0
 public void AddTrackVideo(VideoParser.Node node)
 {
     VideoParser.Server server = node as VideoParser.Server;
     if (server != null)
     {
         foreach (VideoParser.Node child in server.Childs)
         {
             AddTrackVideo(child);
         }
     }
     else
     {
         VideoParser.Front front = node as VideoParser.Front;
         if (front != null)
         {
             foreach (VideoParser.Video child in front.Childs)
             {
                 addTrackVideo(child);
             }
         }
     }
 }
Beispiel #8
0
        private void getHierarchyInfo(string parentId, VideoParser.Node node)
        {
            string nodeId = getNodeId(node.Id);

            _dictHier[nodeId] = new CCTVHierarchyInfo()
            {
                Id        = nodeId,
                Name      = node.Name,
                Type      = getNodeType(node),
                ParentId  = parentId,
                ElementId = nodeId
            };

            VideoParser.Server server = node as VideoParser.Server;
            if (server != null)
            {
                if (server.Childs != null)
                {
                    foreach (VideoParser.Node child in server.Childs)
                    {
                        getHierarchyInfo(nodeId, child);
                    }
                }
            }
            else
            {
                VideoParser.Front front = node as VideoParser.Front;
                if (front != null)
                {
                    if (front.Childs != null)
                    {
                        foreach (VideoParser.Video child in front.Childs)
                        {
                            getHierarchyInfo(nodeId, child);
                        }
                    }
                }
            }
        }
Beispiel #9
0
        private void getHierarchyInfo(Dictionary <string, HierarchyInfo> hierarchyDict, string parentId, VideoParser.Node node)
        {
            string nodeId = getNodeId(node.Id);

            hierarchyDict[nodeId] = new HierarchyInfo()
            {
                NodeId   = nodeId,
                Name     = node.Name,
                Type     = getNodeType(node),
                ParentId = parentId,
            };

            VideoParser.Server server = node as VideoParser.Server;
            if (server != null)
            {
                if (server.Childs != null)
                {
                    foreach (VideoParser.Node child in server.Childs)
                    {
                        getHierarchyInfo(hierarchyDict, nodeId, child);
                    }
                }
            }
            else
            {
                VideoParser.Front front = node as VideoParser.Front;
                if (front != null)
                {
                    if (front.Childs != null)
                    {
                        foreach (VideoParser.Video child in front.Childs)
                        {
                            getHierarchyInfo(hierarchyDict, nodeId, child);
                        }
                    }
                }
            }
        }
Beispiel #10
0
 private void getStaticInfo(Dictionary <string, CCTVStaticInfo> staticDict, VideoParser.Node node)
 {
     VideoParser.Server server = node as VideoParser.Server;
     if (server != null)
     {
         if (server.Childs != null)
         {
             foreach (VideoParser.Node child in server.Childs)
             {
                 getStaticInfo(staticDict, child);
             }
         }
     }
     else
     {
         VideoParser.Front front = node as VideoParser.Front;
         if (front != null)
         {
             if (front.Childs != null)
             {
                 int channel = 1;
                 foreach (VideoParser.Video child in front.Childs)
                 {
                     getStaticInfo(staticDict, front, child, channel);
                     if (front.Type == 1 || front.Type == 11)
                     {
                         channel += 4;
                     }
                     else
                     {
                         channel++;
                     }
                 }
             }
         }
     }
 }
        private void classifyInfo(VideoParser.Front front, VideoParser.Video video, int channel, string serverId)
        {
            //在线标识。
            var videoId = getNodeId(video.Id);

            if (video.DvrChannel > 0)
            {
                channel = video.DvrChannel;
            }

            _onlineStatus[videoId] = new CCTVOnlineStatus()
            {
                VideoId = videoId, Online = video.Online
            };

            CCTVStaticInfo info = new CCTVStaticInfo()
            {
                VideoId   = videoId,
                Name      = video.Name,
                ImageType = video.HighDef ? ImageType.HighDef : ImageType.Unknow,
                Platform  = CCTVPlatformType.CCTV1,
                Streams   = getStreamInfos(video, channel),
            };

            if (video.PanTiltUnit != null && video.PanTiltUnit.Trackable)
            {
                var ptz = video.PanTiltUnit;
                info.Latitude  = ptz.Latitude;
                info.Longitude = ptz.Longitude;
                info.Altitude  = ptz.Altitude;
                //生成摄像机象限信息
                CCTVCameraLimits camera = new CCTVCameraLimits()
                {
                    VideoId     = info.VideoId,
                    UpLimit     = ptz.UpLimit,
                    DownLimit   = ptz.DownLimit,
                    LeftLimit   = ptz.LeftLimit,
                    RightLimit  = ptz.RightLimit,
                    MaxViewPort = ptz.WideView,
                    MinViewPort = ptz.TeleView
                };
                _cameras[camera.VideoId] = camera;
            }
            else
            {
                VideoPosition videoPosition;
                if (_vpSync.TryGetValue(info.VideoId, out videoPosition))
                {
                    info.Latitude  = videoPosition.Latitude;
                    info.Longitude = videoPosition.Longitude;
                    info.Altitude  = videoPosition.Altitude;
                    info.Heading   = videoPosition.Heading;
                    info.ViewPort  = videoPosition.ViewPort;
                }
            }
            _statics[info.VideoId] = info;

            //视频跟踪
            var vTrackHost = ImageTrackInfoProvider.Instance.GetImageTrackHost(video.Id);

            if (!string.IsNullOrWhiteSpace(vTrackHost))
            {
                var vTrack = new CCTVVideoTrack()
                {
                    Ip      = vTrackHost,
                    RpcPort = 8068,
                    SubPort = 8061,
                    VideoId = info.VideoId
                };
                _videoTracks[vTrack.VideoId] = vTrack;
            }


            //生成设备信息。
            CCTVDeviceInfo di = new CCTVDeviceInfo()
            {
                VideoId           = info.VideoId,
                DeviceType        = DeviceType.HikIP,
                PreferredServerId = serverId,
                User     = front.User,
                Password = front.Pass,
                Port     = front.Port
            };

            //大于33的认为是IP直连。
            if (channel >= 33)
            {
                di.Ip = video.Host;
            }
            else
            {
                di.Ip = front.Host;
            }
            _devices[di.VideoId] = di;

            //TODO:生成控制信息。徐测试以此方法生成是否可行。
            CCTVControlConfig cc = new CCTVControlConfig()
            {
                VideoId   = info.VideoId,
                Type      = getControlType(video.PanTiltUnit),
                Ip        = di.Ip,
                Port      = di.Port,
                Channel   = channel,
                AuxSwitch = getAuxSwitch(video.PanTiltUnit)
            };

            _controls[cc.VideoId] = cc;
        }