Ejemplo n.º 1
0
        public Camera BuildCamera(CameraProfile profile, CameraConfig config, byte[] thumbnail)
        {
            lock (_accessLock)
            {
                // 检查给定的源是否存在
                if (profile.FilterType == FilterType.LocalCamera ||
                    profile.FilterType == FilterType.LocalDesktop)
                {
                    if (!Locator.Get <IFilterManager>().IsFilterExist(profile.FilterType, profile.FilterId))
                    {
                        throw new FilterNotFoundException(string.Format(CultureInfo.InvariantCulture,
                                                                        "Cannot find filter by type [{0}] and id [{1}].",
                                                                        profile.FilterType, profile.FilterId));
                    }
                }

                Camera camera = _cameras.Find(c => c.Id == profile.Id);
                if (camera == null)
                {
                    camera = CameraBuilder.Create(profile, config);
                    _cameras.Add(camera);

                    camera.Thumbnail = thumbnail;
                }

                return(camera);
            }
        }
Ejemplo n.º 2
0
        public Camera UpdateCamera(string cameraId, string cameraName, string description, string tags)
        {
            lock (_accessLock)
            {
                Camera camera = _cameras.Find(c => c.Id == cameraId);
                if (camera != null)
                {
                    camera.Profile.Name        = cameraName;
                    camera.Profile.Description = description;
                    camera.Profile.Tags        = tags;
                    Locator.Get <ICameraRepository>().Save(CameraBuilder.Translate(camera));
                }

                return(camera);
            }
        }
Ejemplo n.º 3
0
        public Camera CreateCamera(CameraProfile profile, CameraConfig config)
        {
            lock (_accessLock)
            {
                // 检查给定的源是否存在
                if (profile.FilterType == FilterType.LocalCamera ||
                    profile.FilterType == FilterType.LocalDesktop)
                {
                    if (!Locator.Get <IFilterManager>().IsFilterExist(profile.FilterType, profile.FilterId))
                    {
                        throw new FilterNotFoundException(string.Format(CultureInfo.InvariantCulture,
                                                                        "Cannot find filter by type [{0}] and id [{1}].",
                                                                        profile.FilterType, profile.FilterId));
                    }
                }
                else if (profile.FilterType == FilterType.LocalAVIFile)
                {
                    if (!File.Exists(profile.FilterId))
                    {
                        throw new FilterNotFoundException(string.Format(CultureInfo.InvariantCulture,
                                                                        "Cannot find filter by type [{0}] and id [{1}].",
                                                                        profile.FilterType, profile.FilterId));
                    }
                }

                // 构造摄像机
                Camera camera = _cameras.Find(c => c.Id == profile.Id);
                if (camera == null)
                {
                    camera = CameraBuilder.Create(profile, config);
                    _cameras.Add(camera);

                    camera.Thumbnail = Locator.Get <IStreamingManager>().GetCameraSnapshot(camera.Id);

                    Locator.Get <ICameraRepository>().Save(CameraBuilder.Translate(camera));
                }

                return(camera);
            }
        }
Ejemplo n.º 4
0
        private static void LoadCamera()
        {
            // get local filters
            List <DesktopFilter> desktopFilters = Locator.Get <IFilterManager>().GetDesktopFilters().ToList();
            List <CameraFilter>  cameraFilters  = Locator.Get <IFilterManager>().GetCameraFilters().ToList();

            // get cameras from db and published status
            List <CameraData>          cameraDatas          = Locator.Get <ICameraRepository>().FindAll().ToList();
            List <PublishedCameraData> publishedCameraDatas = Locator.Get <IPublishedCameraRepository>().FindAll().ToList();

            // matching local filters and db cameras
            foreach (var camera in cameraDatas)
            {
                if ((FilterType)camera.Profile.FilterType == FilterType.LocalDesktop ||
                    (FilterType)camera.Profile.FilterType == FilterType.LocalCamera)
                {
                    IFilter filter = null;
                    if ((FilterType)camera.Profile.FilterType == FilterType.LocalDesktop)
                    {
                        filter = desktopFilters.FirstOrDefault(d => d.Id == camera.Profile.FilterId);
                    }
                    else if ((FilterType)camera.Profile.FilterType == FilterType.LocalCamera)
                    {
                        filter = cameraFilters.FirstOrDefault(d => d.Id == camera.Profile.FilterId);
                    }

                    if (filter != null)
                    {
                        CameraProfile profile = CameraBuilder.FromFilter(camera.Id, filter);
                        profile.Name        = camera.Profile.Name;
                        profile.Description = camera.Profile.Description;
                        profile.Tags        = camera.Profile.Tags;

                        Locator.Get <ICameraManager>().BuildCamera(
                            profile,
                            CameraBuilder.Translate(camera.Config),
                            camera.Thumbnail);
                    }
                    else
                    {
                        // camera filter is not found, maybe it has been removed, this camera is invalid
                        Locator.Get <ICameraRepository>().Remove(camera.Id);
                    }
                }
                else
                {
                    // AVIFile, JPEG, MJPEG
                    Locator.Get <ICameraManager>().BuildCamera(
                        CameraBuilder.Translate(camera.Profile),
                        CameraBuilder.Translate(camera.Config),
                        camera.Thumbnail);
                }
            }

            foreach (var item in publishedCameraDatas)
            {
                Camera camera = Locator.Get <ICameraManager>().GetCamera(item.Id);
                if (camera != null)
                {
                    if (item.Destinations != null && item.Destinations.Count > 0)
                    {
                        Locator.Get <IStreamingManager>().PublishCamera(camera.Id,
                                                                        (from d in item.Destinations select new PublishDestination(d.Address, d.Port)).ToList());
                    }
                }
                else
                {
                    // camera filter is not found, maybe it has been removed, this camera is invalid
                    Locator.Get <IPublishedCameraRepository>().Remove(item.Id);
                }
            }
        }