private void GetPtzServices(string ip, int port, double deviceTimeOffset) { PTZClient ptzService; OnvifMediaServiceReference.MediaClient mediaService; // Create PTZ and Media object if (txtUser.Text != string.Empty) { //ptzService = OnvifServices.GetOnvifPTZClient(ip, port, txtUser.Text, txtPassword.Text); ptzService = OnvifServices.GetOnvifPTZClient(ServiceUris[OnvifNamespace.PTZ], deviceTimeOffset, txtUser.Text, txtPassword.Text); //mediaService = OnvifServices.GetOnvifMediaClient(ip, port, txtUser.Text, txtPassword.Text); mediaService = OnvifServices.GetOnvifMediaClient(ServiceUris[OnvifNamespace.MEDIA], deviceTimeOffset, txtUser.Text, txtPassword.Text); } else { ptzService = OnvifServices.GetOnvifPTZClient(ServiceUris[OnvifNamespace.PTZ], deviceTimeOffset, "", ""); mediaService = OnvifServices.GetOnvifMediaClient(ServiceUris[OnvifNamespace.MEDIA], deviceTimeOffset, "", ""); } lbxPtzInfo.Items.Add("Supported Operations"); foreach (OperationDescription odc in ptzService.Endpoint.Contract.Operations) { lbxPtzInfo.Items.Add(" " + odc.Name); } Console.WriteLine(ptzService); }
private void PTZTest(DeviceClient client, double deviceTimeOffset, string ip, int port) { // Create Media object OnvifMediaServiceReference.MediaClient mediaService = OnvifServices.GetOnvifMediaClient(ServiceUris[OnvifNamespace.MEDIA], deviceTimeOffset, "", ""); // Create PTZ object PTZClient ptzService = OnvifServices.GetOnvifPTZClient(ServiceUris["http://www.onvif.org/ver20/ptz/wsdl"], deviceTimeOffset, "", ""); // ip, port); // new PTZClient(client.Endpoint.Binding, client.Endpoint.Address); // Get target profile OnvifMediaServiceReference.Profile[] mediaProfiles = mediaService.GetProfiles(); string profileToken = mediaProfiles[0].token; OnvifMediaServiceReference.Profile mediaProfile = mediaService.GetProfile(profileToken); // Get Presets try { PTZPreset[] presets = ptzService.GetPresets(profileToken); lbxPtzInfo.Items.Add(""); lbxPtzInfo.Items.Add("Presets"); foreach (PTZPreset p in presets) { lbxPtzInfo.Items.Add(string.Format(" Preset {0} ({1}) @ {2}:{3} {4}", p.Name, p.token, p.PTZPosition.PanTilt.x, p.PTZPosition.PanTilt.y, p.PTZPosition.Zoom.x)); } UpdatePtzLocation(ptzService, profileToken); } catch (Exception ex) { tssLbl.Text = "Unable to get presets and update location: " + ex.Message; throw; } // Fails if not a PTZ OnvifPtzServiceReference.PTZNode node = ptzService.GetNode("1"); // nodes[0].token); OnvifPtzServiceReference.PTZConfiguration[] ptzConfigs = ptzService.GetConfigurations(); File.AppendAllText("ptz.txt", string.Format("\nPTZ configs found: {0}", ptzConfigs.Length)); File.AppendAllText("ptz.txt", string.Format("\nPTZ config - Name: {0}", ptzConfigs[0].Name)); File.AppendAllText("ptz.txt", string.Format("\nPTZ config - Token: {0}", ptzConfigs[0].token)); }
private void GetOnvifInfo(string ip, int port = 80) { DeviceClient client = OnvifServices.GetOnvifDeviceClient(ip, port); //, "service", "Sierra123")) // new DeviceClient(bind, serviceAddress)) client.Endpoint.Behaviors.Add(new EndpointDiscoveryBehavior()); gbxPtzControl.Visible = true; gbxCommand.Visible = true; // We can now ask for information // ONVIF application programmer guide (5.1.3) suggests checking time first // (no auth required) so time offset can be determined (needed for auth if applicable) client = OnvifServices.GetOnvifDeviceClient(IP.ToString(), Port); System.DateTime dt = GetDeviceTime(client); DeviceTimeOffset = (dt - System.DateTime.UtcNow).TotalSeconds; // Switch to an authenticated client if the username field contains something if (txtUser.Text != string.Empty) { client = OnvifServices.GetOnvifDeviceClient(IP.ToString(), Port, DeviceTimeOffset, txtUser.Text, txtPassword.Text); } GetDeviceInfo(client); GetServices(client); if (lbxCapabilities.Items.Contains(OnvifNamespace.PTZ)) { gbxPtzControl.Enabled = true; gbxCommand.Enabled = true; GetPtzServices(ip, port, DeviceTimeOffset); //PTZTest(client, DeviceTimeOffset, ip, port); } else { gbxPtzControl.Enabled = false; gbxCommand.Enabled = false; } GetMediaInfo(DeviceTimeOffset); }
private void GetMediaInfo(double deviceTimeOffset) { lbxCapabilities.Items.Add(""); lbxCapabilities.Items.Add("Media Info"); //OnvifMediaServiceReference.MediaClient mclient = OnvifServices.GetOnvifMediaClient(IP.ToString(), Port, txtUser.Text, txtPassword.Text); string xaddr = ServiceUris[OnvifNamespace.MEDIA]; OnvifMediaServiceReference.MediaClient mclient = OnvifServices.GetOnvifMediaClient(xaddr, deviceTimeOffset, txtUser.Text, txtPassword.Text); OnvifMediaServiceReference.VideoSource[] videoSources = mclient.GetVideoSources(); foreach (OnvifMediaServiceReference.VideoSource v in videoSources) { string vsInfo = string.Format(" Video Source {0}: Framerate={1}, Resolution={2}x{3}", v.token, v.Framerate, v.Resolution.Width, v.Resolution.Height); lbxCapabilities.Items.Add(string.Format("{0}", vsInfo)); } OnvifMediaServiceReference.Profile[] mProfiles = mclient.GetProfiles(); for (int i = 0; i < mProfiles.Length; i++) { Profile p = mProfiles[i]; string ptz = p.PTZConfiguration != null ? "Yes" : "No"; string pInfo = string.Format(" Profile #{0} [{1}]: Token={2}, PTZ={3}", i + 1, p.Name, p.token, ptz); lbxCapabilities.Items.Add(string.Format("{0}", pInfo)); List <string> uris = GetMediaProfileUris(mclient, p); foreach (string u in uris) { lbxCapabilities.Items.Add(string.Format(" URI: {0}", u)); } } //var sn = mclient.GetSnapshotUri(mProfiles[0].token); //OnvifMediaServiceReference.MetadataConfiguration[] metaDataConfigs = mclient.GetMetadataConfigurations(); //foreach (OnvifMediaServiceReference.MetadataConfiguration mc in metaDataConfigs) //{ // OnvifMediaServiceReference.MetadataConfigurationOptions mco = mclient.GetMetadataConfigurationOptions(mc.token, mProfiles[0].token); //} }