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); } }
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); } }
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); } }
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); } } }