|
|
|
@ -136,23 +136,25 @@ namespace IoTNode.DeviceServices.Onvif
|
|
|
|
|
IoTGatewayId = node.Id
|
|
|
|
|
};
|
|
|
|
|
deviceRepo.Add(device);
|
|
|
|
|
deviceRepo.SaveChanges();
|
|
|
|
|
var fileName = $"ffmpeg-{Helper.Instance.GetRunTime()}{(RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? ".exe" : "")}";
|
|
|
|
|
var file = Path.Combine(this._env.WebRootPath, fileName);
|
|
|
|
|
var pushValue = device.Data.FirstOrDefault(o => o.Name == "推流")?.Value ?? "是";
|
|
|
|
|
this.UpdateData(deviceRepo, device, device.CreateData("Push", pushValue, IoTDataType.Data, IoTValueType.String, "推流"));
|
|
|
|
|
this.UpdateData(deviceRepo, device, device.CreateData("Record", "否", IoTDataType.Data, IoTValueType.String, "录像"));
|
|
|
|
|
this.UpdateData(deviceRepo, device, device.CreateData("ffmpeg.file", file, IoTDataType.Info, IoTValueType.String, "ffmpeg路径", hidden: true));
|
|
|
|
|
this.UpdateData(deviceRepo, device, device.CreateData("ffmpeg.args", GetSetting("ffmpeg.args"), IoTDataType.Info, IoTValueType.String, "ffmpeg.args", hidden: true));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (device.Ip != ipCamera.Ip)
|
|
|
|
|
{
|
|
|
|
|
device.Ip = ipCamera.Ip;
|
|
|
|
|
deviceRepo.SaveChanges();
|
|
|
|
|
}
|
|
|
|
|
device.Ip = ipCamera.Ip;
|
|
|
|
|
}
|
|
|
|
|
deviceRepo.SaveChanges();
|
|
|
|
|
this.UpdateData(deviceRepo, device, device.CreateData("DeviceUrl", ipCamera.DeviceUrl, IoTDataType.Info, IoTValueType.String, "设备地址"));
|
|
|
|
|
this.UpdateData(deviceRepo, device, device.CreateData("PtzAddress", ipCamera.PTZAddress, IoTDataType.Info, IoTValueType.String, "云台地址"));
|
|
|
|
|
this.UpdateData(deviceRepo, device, device.CreateData("Ptz3DZoomSupport", ipCamera.Ptz3DZoomSupport ? "是" : "否", IoTDataType.Info, IoTValueType.String, "缩放支持"));
|
|
|
|
|
|
|
|
|
|
var fileName = $"ffmpeg-{Helper.Instance.GetRunTime()}{(RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? ".exe" : "")}";
|
|
|
|
|
var file = Path.Combine(this._env.WebRootPath, fileName);
|
|
|
|
|
var pushValue = device.Data.FirstOrDefault(o => o.Name == "推流")?.Value ?? "是";
|
|
|
|
|
this.UpdateData(deviceRepo, device, device.CreateData("Push", pushValue, IoTDataType.Data, IoTValueType.String, "推流"));
|
|
|
|
|
this.UpdateData(deviceRepo, device, device.CreateData("Record", "否", IoTDataType.Data, IoTValueType.String, "录像"));
|
|
|
|
|
this.UpdateData(deviceRepo, device, device.CreateData("ffmpeg.file", file, IoTDataType.Info, IoTValueType.String, "ffmpeg路径", hidden: true));
|
|
|
|
|
this.UpdateData(deviceRepo, device, device.CreateData("ffmpeg.args", GetSetting("ffmpeg.args"), IoTDataType.Info, IoTValueType.String, "ffmpeg.args", hidden: true));
|
|
|
|
|
deviceRepo.SaveChanges();
|
|
|
|
|
|
|
|
|
|
var profiles = this._onvifDeviceManagement.GetProfiles(ipCamera.DeviceUrl, ipCamera.MediaUrl);
|
|
|
|
|
var needAuth = false;
|
|
|
|
|
var hasAuth = false;
|
|
|
|
@ -187,13 +189,13 @@ namespace IoTNode.DeviceServices.Onvif
|
|
|
|
|
var token = device.Data.FirstOrDefault(o => o.Key == "ProfileToken")?.Value;
|
|
|
|
|
if (string.IsNullOrEmpty(token))
|
|
|
|
|
{
|
|
|
|
|
token = ipCamera.Profiles.Last().Token;
|
|
|
|
|
token = ipCamera.Profiles.First().Token;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (!ipCamera.Profiles.Any(o => o.Token == token))
|
|
|
|
|
{
|
|
|
|
|
token = ipCamera.Profiles.Last().Token;
|
|
|
|
|
token = ipCamera.Profiles.First().Token;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (needAuth)
|
|
|
|
@ -220,9 +222,6 @@ namespace IoTNode.DeviceServices.Onvif
|
|
|
|
|
}
|
|
|
|
|
this.UpdateData(deviceRepo, device, device.CreateData("NeedAuth", needAuth ? "是" : "否", IoTDataType.Info, IoTValueType.String, "需认证"));
|
|
|
|
|
this.UpdateData(deviceRepo, device, device.CreateData("HasAuth", hasAuth ? "是" : "否", IoTDataType.Info, IoTValueType.String, "已认证"));
|
|
|
|
|
this.UpdateData(deviceRepo, device, device.CreateData("DeviceUrl", ipCamera.DeviceUrl, IoTDataType.Info, IoTValueType.String, "设备地址"));
|
|
|
|
|
this.UpdateData(deviceRepo, device, device.CreateData("PtzAddress", ipCamera.PTZAddress, IoTDataType.Info, IoTValueType.String, "云台地址"));
|
|
|
|
|
this.UpdateData(deviceRepo, device, device.CreateData("Ptz3DZoomSupport", ipCamera.Ptz3DZoomSupport ? "是" : "否", IoTDataType.Info, IoTValueType.String, "缩放支持"));
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
@ -245,11 +244,11 @@ namespace IoTNode.DeviceServices.Onvif
|
|
|
|
|
{
|
|
|
|
|
var camera = cameras.FirstOrDefault(o => o.Number == key);
|
|
|
|
|
var remove = false;
|
|
|
|
|
if (camera.Data.FirstOrDefault(o => o.Key == "Push").Value != "是")
|
|
|
|
|
if (camera.Data.Any(o => o.Key == "Push" && o.Value == "否"))
|
|
|
|
|
{
|
|
|
|
|
remove = true;
|
|
|
|
|
}
|
|
|
|
|
if (camera.Data.FirstOrDefault(o => o.Key == "NeedAuth").Value == "是" && camera.Data.FirstOrDefault(o => o.Key == "HasAuth").Value == "否")
|
|
|
|
|
if (camera.Data.Any(o => o.Key == "NeedAuth" && o.Value == "是") && camera.Data.Any(o => o.Key == "HasAuth" && o.Value == "否"))
|
|
|
|
|
{
|
|
|
|
|
remove = true;
|
|
|
|
|
}
|
|
|
|
@ -547,7 +546,8 @@ namespace IoTNode.DeviceServices.Onvif
|
|
|
|
|
if (!string.IsNullOrEmpty(ptzAddress))
|
|
|
|
|
{
|
|
|
|
|
var deviceUrl = camera.GetDataValue("DeviceUrl");
|
|
|
|
|
RequestXml(ptzAddress, MessageTemplate.StopAction, String.Format(MessageTemplate.StopMessage, camera.GetDataValue("ProfileToken"), true, true), camera.UserName, camera.Password, GetOnoce(deviceUrl));
|
|
|
|
|
var onoce = (this._onvifDeviceManagement as OnvifDeviceManagement).GetOnoce(deviceUrl);
|
|
|
|
|
RequestXml(ptzAddress, MessageTemplate.StopAction, String.Format(MessageTemplate.StopMessage, camera.GetDataValue("ProfileToken"), true, true), camera.UserName, camera.Password, onoce);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -561,7 +561,8 @@ namespace IoTNode.DeviceServices.Onvif
|
|
|
|
|
if (!string.IsNullOrEmpty(ptzAddress))
|
|
|
|
|
{
|
|
|
|
|
var deviceUrl = camera.GetDataValue("DeviceUrl");
|
|
|
|
|
RequestXml(ptzAddress, MessageTemplate.ContinuousMoveAction, String.Format(MessageTemplate.ContinuousMoveMessage, camera.GetDataValue("ProfileToken"), zx, px, py), camera.UserName, camera.Password, GetOnoce(deviceUrl));
|
|
|
|
|
var onoce = (this._onvifDeviceManagement as OnvifDeviceManagement).GetOnoce(deviceUrl);
|
|
|
|
|
RequestXml(ptzAddress, MessageTemplate.ContinuousMoveAction, String.Format(MessageTemplate.ContinuousMoveMessage, camera.GetDataValue("ProfileToken"), zx, px, py), camera.UserName, camera.Password,onoce);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|