static async Task AsyncHelper(BaseOnvifPtzCamera camera)
        {
            camera.Camera = await OnvifClientFactory.CreateDeviceClientAsync(camera.HostAddress, camera.UserName, camera.Password);

            camera.Media = await OnvifClientFactory.CreateMediaClientAsync(camera.HostAddress, camera.UserName, camera.Password);

            camera.PtzController = await OnvifClientFactory.CreatePTZClientAsync(camera.HostAddress, camera.UserName, camera.Password);
        }
Esempio n. 2
0
        public async Task <OnvifDevice> Setup()
        {
            device = await OnvifClientFactory.CreateDeviceClientAsync(Host + ":" + Port, UserName, Password);

            var devicecapabilities = await device.GetCapabilitiesAsync(new CapabilityCategory[] { CapabilityCategory.All });

            var info = await device.GetDeviceInformationAsync(new GetDeviceInformationRequest()
            {
            });

            media = await OnvifClientFactory.CreateMediaClientAsync(Host + ":" + Port, UserName, Password);

            var profiles = await media.GetProfilesAsync();

            ptz = await Onvif.Core.Client.OnvifClientFactory.CreatePTZClientAsync(Host + ":" + Port, UserName, Password);

            var capabilities = await ptz.GetServiceCapabilitiesAsync();

            var config = await ptz.GetConfigurationsAsync();

            var space = config.PTZConfiguration[0].DefaultAbsolutePantTiltPositionSpace;

            token = profiles.Profiles[0].token;

            xrange = config.PTZConfiguration[0].PanTiltLimits.Range.XRange;
            yrange = config.PTZConfiguration[0].PanTiltLimits.Range.YRange;
            zrange = config.PTZConfiguration[0].ZoomLimits.Range.XRange;


            var status = await ptz.GetStatusAsync(token);

            //var presets = await ptz.GetPresetsAsync(token);

            //Console.WriteLine("preset ");
            //  await ptz.GotoPresetAsync(token, presets.Preset[0].token, null);

            //Thread.Sleep(4000);

            var nodes = await ptz.GetNodesAsync();

            //Console.WriteLine("home ");
            //await ptz.GotoHomePositionAsync(token, null);

            //Thread.Sleep(2000);
            //Console.WriteLine("ContinuousMoveAsync ");

            /*
             * await ptz.ContinuousMoveAsync(token, new PTZSpeed() {PanTilt = new Vector2D() {x = -1f, y = -1}, Zoom = new Vector1D() { x=0f}}, "2");
             * Thread.Sleep(2000);
             * await ptz.StopAsync(token, true, true);
             */
            return(this);
        }
        /// <summary>
        /// Sets up the connection to the camera, enquires to get metadata from the Onvif service
        /// </summary>
        /// <param name="camera"></param>
        /// <returns></returns>
        static async Task AsyncHelper(BaseOnvifPtzCamera camera)
        {
            Globals.Log.Debug(string.Format("Connecting to camera at {0}", camera.HostAddress));

            camera.Camera = await OnvifClientFactory.CreateDeviceClientAsync(camera.HostAddress, camera.UserName, camera.Password);

            camera.MediaClient   = await OnvifClientFactory.CreateMediaClientAsync(camera.HostAddress, camera.UserName, camera.Password);;
            camera.PtzController = await OnvifClientFactory.CreatePTZClientAsync(camera.HostAddress, camera.UserName, camera.Password);

            Mictlanix.DotNet.Onvif.Media.GetProfilesResponse profiles = await camera.MediaClient.GetProfilesAsync();

            camera.MediaProfile = profiles.Profiles.FirstOrDefault();
            if (camera.MediaProfile != null)
            {
                StreamSetup streamSetup = new StreamSetup
                {
                    Stream = StreamType.RTPUnicast, Transport = new Transport()
                };

                streamSetup.Transport.Protocol = TransportProtocol.TCP;
                MediaUri videoStreamUriObject = await camera.MediaClient.GetStreamUriAsync(streamSetup, camera.MediaProfile.Name);

                camera.VideoStreamUri = videoStreamUriObject.Uri;
            }

            Mictlanix.DotNet.Onvif.Device.GetNetworkProtocolsRequest  request  = new Mictlanix.DotNet.Onvif.Device.GetNetworkProtocolsRequest();
            Mictlanix.DotNet.Onvif.Device.GetNetworkProtocolsResponse response = await camera.Camera.GetNetworkProtocolsAsync(request);

            // store http and rtsp ports
            foreach (NetworkProtocol protocol in response.NetworkProtocols)
            {
                string protocolName = protocol.Name.ToString();
                switch (protocolName)
                {
                case "HTTP":
                    camera.HttpPort = protocol.Port[0];
                    break;

                case "RTSP":
                    camera.RtspPort = protocol.Port[0];
                    break;
                }
            }

            Mictlanix.DotNet.Onvif.Media.GetVideoSourcesResponse video_sources = await camera.MediaClient.GetVideoSourcesAsync();

            Globals.Log.Debug("Camera connected");
        }
Esempio n. 4
0
        static async Task AsyncMain(string[] args)
        {
            try
            {
                var clientFactory     = new OnvifClientFactory();
                var baseUri           = ConfigurationManager.AppSettings["BaseUri"];
                var client            = clientFactory.CreateClient(baseUri);
                var systemDateAndTime = await client.DeviceService.GetSystemDateAndTimeAsync();

                Console.WriteLine(systemDateAndTime);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
Esempio n. 5
0
        static async Task MainAsync(string host, string username, string password)
        {
            var device = await OnvifClientFactory.CreateDeviceClientAsync(host, username, password);

            var media = await OnvifClientFactory.CreateMediaClientAsync(host, username, password);

            var streamSetup = new StreamSetup {
                Stream    = StreamType.RTPUnicast,
                Transport = new Transport {
                    Protocol = TransportProtocol.UDP
                }
            };

            var ptz = await OnvifClientFactory.CreatePTZClientAsync(host, username, password);

            var imaging = await OnvifClientFactory.CreateImagingClientAsync(host, username, password);

            var caps = await device.GetCapabilitiesAsync(new CapabilityCategory[] { CapabilityCategory.All });

            bool absolute_move   = false;
            bool relative_move   = false;
            bool continuous_move = false;
            bool focus           = false;

            Console.WriteLine("Capabilities");

            Console.WriteLine("\tDevice: " + caps.Capabilities.Device.XAddr);
            Console.WriteLine("\tEvents: " + caps.Capabilities.Events.XAddr);
            Console.WriteLine("\tImaging: " + caps.Capabilities.Imaging.XAddr);
            Console.WriteLine("\tMedia: " + caps.Capabilities.Media.XAddr);
            Console.WriteLine("\tPTZ: " + caps.Capabilities.PTZ.XAddr);

            var profiles = await media.GetProfilesAsync();

            string profile_token = null;

            Console.WriteLine("Profiles count :" + profiles.Profiles.Length);

            foreach (var profile in profiles.Profiles)
            {
                Console.WriteLine($"Profile: {profile.token}");

                if (profile_token == null)
                {
                    profile_token   = profile.token;
                    absolute_move   = !string.IsNullOrWhiteSpace(profile.PTZConfiguration.DefaultAbsolutePantTiltPositionSpace);
                    relative_move   = !string.IsNullOrWhiteSpace(profile.PTZConfiguration.DefaultRelativePanTiltTranslationSpace);
                    continuous_move = !string.IsNullOrWhiteSpace(profile.PTZConfiguration.DefaultContinuousPanTiltVelocitySpace);
                }

                Console.WriteLine($"\tTranslation Support");
                Console.WriteLine($"\t\tAbsolute Translation: {!string.IsNullOrWhiteSpace (profile.PTZConfiguration.DefaultAbsolutePantTiltPositionSpace)}");
                Console.WriteLine($"\t\tRelative Translation: {!string.IsNullOrWhiteSpace (profile.PTZConfiguration.DefaultRelativePanTiltTranslationSpace)}");
                Console.WriteLine($"\t\tContinuous Translation: {!string.IsNullOrWhiteSpace (profile.PTZConfiguration.DefaultContinuousPanTiltVelocitySpace)}");

                if (!string.IsNullOrWhiteSpace(profile.PTZConfiguration.DefaultRelativePanTiltTranslationSpace))
                {
                    var pan  = profile.PTZConfiguration.PanTiltLimits.Range.XRange;
                    var tilt = profile.PTZConfiguration.PanTiltLimits.Range.YRange;
                    var zoom = profile.PTZConfiguration.ZoomLimits.Range.XRange;

                    Console.WriteLine($"\tPan Limits: [{pan.Min}, {pan.Max}] Tilt Limits: [{tilt.Min}, {tilt.Max}] Tilt Limits: [{zoom.Min}, {zoom.Max}]");
                }
            }

            foreach (var profile in profiles.Profiles)
            {
                var mediaUri = await media.GetStreamUriAsync(streamSetup, profile.token);

                Console.WriteLine($"使用 {profile.token} 获取直播地址 Uri={mediaUri.Uri} Timeout={mediaUri.Timeout}");
            }

            return;

            var configs = await ptz.GetConfigurationsAsync();

            foreach (var config in configs.PTZConfiguration)
            {
                Console.WriteLine($"PTZ Configuration: {config.token}");
            }

            var video_sources = await media.GetVideoSourcesAsync();

            string vsource_token = null;

            foreach (var source in video_sources.VideoSources)
            {
                Console.WriteLine($"Video Source: {source.token}");

                if (vsource_token == null)
                {
                    vsource_token = source.token;
                    focus         = source.Imaging.Focus != null;
                }

                Console.WriteLine($"\tFramerate: {source.Framerate}");
                Console.WriteLine($"\tResolution: {source.Resolution.Width}x{source.Resolution.Height}");

                Console.WriteLine($"\tFocus Settings");

                if (source.Imaging.Focus == null)
                {
                    Console.WriteLine($"\t\tNone");
                }
                else
                {
                    Console.WriteLine($"\t\tMode: {source.Imaging.Focus.AutoFocusMode}");
                    Console.WriteLine($"\t\tNear Limit: {source.Imaging.Focus.NearLimit}");
                    Console.WriteLine($"\t\tFar Limit: {source.Imaging.Focus.FarLimit}");
                    Console.WriteLine($"\t\tDefault Speed: {source.Imaging.Focus.DefaultSpeed}");
                }

                Console.WriteLine($"\tExposure Settings");

                if (source.Imaging.Exposure == null)
                {
                    Console.WriteLine($"\t\tNone");
                }
                else
                {
                    Console.WriteLine($"\t\tMode: {source.Imaging.Exposure.Mode}");
                    Console.WriteLine($"\t\tMin Iris: {source.Imaging.Exposure.MinIris}");
                    Console.WriteLine($"\t\tMax Iris: {source.Imaging.Exposure.MaxIris}");
                }

                Console.WriteLine($"\tImage Settings");

                var imaging_opts = await imaging.GetOptionsAsync(source.token);

                Console.WriteLine($"\t\tBrightness: {source.Imaging.Brightness} [{imaging_opts.Brightness?.Min}, {imaging_opts.Brightness?.Max}]");
                Console.WriteLine($"\t\tColor Saturation: {source.Imaging.ColorSaturation} [{imaging_opts.ColorSaturation?.Min}, {imaging_opts.ColorSaturation?.Max}]");
                Console.WriteLine($"\t\tContrast: {source.Imaging.Contrast} [{imaging_opts.Contrast?.Min}, {imaging_opts.Contrast?.Max}]");
                Console.WriteLine($"\t\tSharpness: {source.Imaging.Sharpness} [{imaging_opts.Sharpness?.Min}, {imaging_opts.Sharpness?.Max}]");
            }

            if (focus)
            {
                Console.WriteLine($"Focus");

                var image_status = await imaging.GetStatusAsync(vsource_token);

                Console.WriteLine($"\tStatus");

                Console.WriteLine($"\t\tPosition: {image_status.FocusStatus20.Position}");
                Console.WriteLine($"\t\tStatus: {image_status.FocusStatus20.MoveStatus}");
                Console.WriteLine($"\t\tError: {image_status.FocusStatus20.Error}");

                Console.WriteLine($"\tSetting Focus Mode: Manual");

                var image_settings = await imaging.GetImagingSettingsAsync(vsource_token);

                if (image_settings.Focus == null)
                {
                    image_settings.Focus = new FocusConfiguration20 {
                        AutoFocusMode = AutoFocusMode.MANUAL
                    };

                    await imaging.SetImagingSettingsAsync(vsource_token, image_settings, false);
                }
                else if (image_settings.Focus.AutoFocusMode != AutoFocusMode.MANUAL)
                {
                    image_settings.Focus.AutoFocusMode = AutoFocusMode.MANUAL;
                    await imaging.SetImagingSettingsAsync(vsource_token, image_settings, false);
                }
            }

            var focus_opts = await imaging.GetMoveOptionsAsync(vsource_token);

            if (focus_opts.Absolute != null)
            {
                Console.WriteLine($"\tMoving Focus Absolute");

                await imaging.MoveAsync(vsource_token, new FocusMove {
                    Absolute = new AbsoluteFocus {
                        Position = 0f,
                        //Speed = 1f,
                        //SpeedSpecified = true
                    }
                });

                await Task.Delay(500);
            }

            if (focus_opts.Relative != null)
            {
                Console.WriteLine($"\tMoving Focus Relative");

                await imaging.MoveAsync(vsource_token, new FocusMove {
                    Relative = new RelativeFocus {
                        Distance = 0.01f,
                        //Speed = 1f,
                        //SpeedSpecified = true
                    }
                });

                await Task.Delay(500);
            }

            if (focus_opts.Continuous != null)
            {
                Console.WriteLine($"\tMoving Focus Continuous...");

                await imaging.MoveAsync(vsource_token, new FocusMove {
                    Continuous = new ContinuousFocus {
                        Speed = 1f
                    }
                });

                await Task.Delay(500);

                await imaging.StopAsync(vsource_token);
            }

            var ptz_status = await ptz.GetStatusAsync(profile_token);

            if (ptz_status.Position != null)
            {
                Console.WriteLine($"Position: [{ptz_status.Position.PanTilt.x}, {ptz_status.Position.PanTilt.y}, {ptz_status.Position.Zoom.x}]");
            }
            if (ptz_status.MoveStatus != null)
            {
                Console.WriteLine($"Pan/Tilt Status: {ptz_status.MoveStatus.PanTilt} Zoom Status: {ptz_status.MoveStatus.Zoom}");
            }

            if (absolute_move)
            {
                Console.WriteLine($"Absolute Move...");

                await ptz.AbsoluteMoveAsync(profile_token, new PTZVector {
                    PanTilt = new Vector2D {
                        x = 0.5f,
                        y = 0
                    },
                    Zoom = new Vector1D {
                        x = 0f
                    }
                }, new PTZSpeed {
                    PanTilt = new Vector2D {
                        x = 1f,
                        y = 1f
                    },
                    Zoom = new Vector1D {
                        x = 0f
                    }
                });

                await Task.Delay(3000);

                ptz_status = await ptz.GetStatusAsync(profile_token);

                Console.WriteLine($"Position: [{ptz_status.Position.PanTilt.x}, {ptz_status.Position.PanTilt.y}, {ptz_status.Position.Zoom.x}]");
                Console.WriteLine($"Pan/Tilt Status: {ptz_status.MoveStatus.PanTilt} Zoom Status: {ptz_status.MoveStatus.Zoom}");
            }

            if (relative_move)
            {
                Console.WriteLine($"Relative Move...");

                await ptz.RelativeMoveAsync(profile_token, new PTZVector {
                    PanTilt = new Vector2D {
                        x = 0.1f,
                        y = 0.1f
                    },
                    Zoom = new Vector1D {
                        x = 0.1f
                    }
                }, new PTZSpeed {
                    PanTilt = new Vector2D {
                        x = 0.1f,
                        y = 0.1f
                    },
                    Zoom = new Vector1D {
                        x = 0.1f
                    }
                });

                await Task.Delay(3000);

                ptz_status = await ptz.GetStatusAsync(profile_token);

                Console.WriteLine($"Position: [{ptz_status.Position.PanTilt.x}, {ptz_status.Position.PanTilt.y}, {ptz_status.Position.Zoom.x}]");
                Console.WriteLine($"Pan/Tilt Status: {ptz_status.MoveStatus.PanTilt} Zoom Status: {ptz_status.MoveStatus.Zoom}");
            }

            if (continuous_move)
            {
                Console.WriteLine($"Continuous Move...");

                await ptz.ContinuousMoveAsync(profile_token, new PTZSpeed {
                    PanTilt = new Vector2D {
                        x = 0,
                        y = -1
                    },
                    Zoom = new Vector1D {
                        x = 0
                    }
                }, null);

                await Task.Delay(1500);

                await ptz.StopAsync(profile_token, true, true);

                ptz_status = await ptz.GetStatusAsync(profile_token);

                Console.WriteLine($"Position: [{ptz_status.Position.PanTilt.x}, {ptz_status.Position.PanTilt.y}, {ptz_status.Position.Zoom.x}]");
                Console.WriteLine($"Pan/Tilt Status: {ptz_status.MoveStatus.PanTilt} Zoom Status: {ptz_status.MoveStatus.Zoom}");
            }

            var presets = await ptz.GetPresetsAsync(profile_token);

            Console.WriteLine("Presets count: " + presets.Preset.Length);

            foreach (var preset in presets.Preset)
            {
                var pan  = preset.PTZPosition.PanTilt.x;
                var tilt = preset.PTZPosition.PanTilt.y;
                var zoom = preset.PTZPosition.Zoom.x;

                Console.WriteLine($"Preset: {preset.token} Name: {preset.Name} Pan: {pan} Tilt: {tilt} Zoom: {zoom}");

                await ptz.GotoPresetAsync(profile_token, preset.token, null);

                await Task.Delay(1500);

                //await ptz.RemovePresetAsync (profile_token, preset.token);
            }

            if (presets.Preset.Length == 0)
            {
                var new_preset = await ptz.SetPresetAsync(new SetPresetRequest {
                    ProfileToken = profile_token,
                    PresetName   = "P1"
                });

                Console.WriteLine($"New Preset: {new_preset.PresetToken}");
            }
        }