Former-commit-id: dd7a36be5f765c8d3619ec1827b77ff973c84a5d
TangShanKaiPing
wanggang 6 years ago
parent 921ac0defd
commit a58fa3cad0

@ -94,16 +94,16 @@ namespace Application.Domain.Entities
public bool AddorUpdateData(string key, object value, DeviceDataType type, string name, string unit = null, string description = null, bool hidden = false) public bool AddorUpdateData(string key, object value, DeviceDataType type, string name, string unit = null, string description = null, bool hidden = false)
{ {
var result = false; var result = false;
var dataValue = Convert.ToString(value);
var data = this.Data.FirstOrDefault(o => o.Key == key); var data = this.Data.FirstOrDefault(o => o.Key == key);
if (data == null) if (data == null)
{ {
data = new Data { Key = key, Type = type, Name = name, Unit = unit, Description = description, Hidden = hidden }; data = new Data { Key = key, Value = dataValue, Type = type, Name = name, Unit = unit, Description = description, Hidden = hidden };
this.Data.Add(data); this.Data.Add(data);
result = true; result = true;
} }
else else
{ {
var dataValue = Convert.ToString(value);
if (data.Value != dataValue) if (data.Value != dataValue)
{ {
data.Value = dataValue; data.Value = dataValue;

@ -16,12 +16,21 @@ namespace IoT.Shared.Controllers.Onvif
this._deviceService = deviceService; this._deviceService = deviceService;
} }
[HttpGet, Route("/[controller]/[action]"), SwaggerOperation("")] [HttpGet, Route("/[controller]/[action]"), SwaggerOperation("")]
public ApiResponse ScreenShot([SwaggerParameter("网关编号")]string gateway, [SwaggerParameter("设备编号")]string number) public ApiResponse MainScreenShot([SwaggerParameter("网关编号")]string gateway, [SwaggerParameter("设备编号")]string number)
{ {
return this.AsyncAction(() => return this.AsyncAction(() =>
{ {
this._deviceService.ScreenShot(number); this._deviceService.MainScreenShot(number);
});
}
[HttpGet, Route("/[controller]/[action]"), SwaggerOperation("")]
public ApiResponse SubScreenShot([SwaggerParameter("网关编号")]string gateway, [SwaggerParameter("设备编号")]string number)
{
return this.AsyncAction(() =>
{
this._deviceService.SubScreenShot(number);
}); });
} }

@ -188,6 +188,7 @@ namespace IoT.Shared.DeviceServices.Onvif
device.AddorUpdateData("MainSnapshotUri", ipCamera.MainSnapshotUri, DeviceDataType.String, "主码流截图地址"); device.AddorUpdateData("MainSnapshotUri", ipCamera.MainSnapshotUri, DeviceDataType.String, "主码流截图地址");
device.AddorUpdateData("SubStreamUri", ipCamera.SubStreamUri, DeviceDataType.String, "子码流地址"); device.AddorUpdateData("SubStreamUri", ipCamera.SubStreamUri, DeviceDataType.String, "子码流地址");
device.AddorUpdateData("SubSnapshotUri", ipCamera.SubSnapshotUri, DeviceDataType.String, "子码流截图地址"); device.AddorUpdateData("SubSnapshotUri", ipCamera.SubSnapshotUri, DeviceDataType.String, "子码流截图地址");
device.AddorUpdateData("Snapshot", Convert.ToBase64String(SubScreenShot(device.Number)), DeviceDataType.String, "截图");
deviceRepo.SaveChanges(); deviceRepo.SaveChanges();
this.SendDevice(device); this.SendDevice(device);
} }
@ -494,10 +495,26 @@ namespace IoT.Shared.DeviceServices.Onvif
} }
} }
public byte[] ScreenShot(string id) public byte[] MainScreenShot(string id)
{ {
var camera = this.GetCamera(id); var camera = this.GetCamera(id);
var url = camera.GetDataValue("SnapshotUri"); var url = camera.GetDataValue("MainSubSnapshotUri");
if (string.IsNullOrEmpty(url))
{
return new byte[] { };
}
var hc = this._httpClientFactory.CreateClient();
if (camera.GetDataValue("NeedAuth") == "否")
{
return hc.GetByteArrayAsync(url).Result;
}
return hc.GetByteDigest(url, camera.UserName, camera.Password);
}
public byte[] SubScreenShot(string id)
{
var camera = this.GetCamera(id);
var url = camera.GetDataValue("SubSnapshotUri");
if (string.IsNullOrEmpty(url)) if (string.IsNullOrEmpty(url))
{ {
return new byte[] { }; return new byte[] { };

@ -25,7 +25,7 @@ namespace IoTNode
public override void ConfigureServices(IServiceCollection services) public override void ConfigureServices(IServiceCollection services)
{ {
services.AddSingleton<ClientService>(); services.AddSingleton<ClientService>();
services.AddSingleton<SerialPortService>(); //services.AddSingleton<SerialPortService>();
services.AddSingleton<OnvifService>(); services.AddSingleton<OnvifService>();
services.AddSingleton<FBeeService>(); services.AddSingleton<FBeeService>();
base.ConfigureServices(services); base.ConfigureServices(services);
@ -37,9 +37,9 @@ namespace IoTNode
Task.Run(() => Task.Run(() =>
{ {
app.ApplicationServices.GetService<ClientService>().Start(); app.ApplicationServices.GetService<ClientService>().Start();
app.ApplicationServices.GetService<SerialPortService>().Start(); app.ApplicationServices.GetService<SerialPortService>()?.Start();
app.ApplicationServices.GetService<OnvifService>().Start(); app.ApplicationServices.GetService<OnvifService>()?.Start();
app.ApplicationServices.GetService<FBeeService>().Start(); app.ApplicationServices.GetService<FBeeService>()?.Start();
}); });
} }

@ -743,22 +743,7 @@
<div class="block block-strong"> <div class="block block-strong">
<div class="row"> <div class="row">
<div class="col-100 tablet-50 desktop-25" v-for="device in getDevices('摄像头')"> <div class="col-100 tablet-50 desktop-25" v-for="device in getDevices('摄像头')">
<video class="flv video" muted controls autoplay :src="getData(device,'主码流flv')" :data-ext="getData(device,'缩放支持')"></video> <img :src="'data:image/jpeg;base64,'+getValue(device,'截图')" alt="截图" style="width:100%;" />
<template v-if="getData(device,'缩放支持')=='是'">
<div class="row">
<a class="button button-large button-raised button-fill" href="javascript: ;" v-on:click="call('',device.Number,'/Camera/Up')"></a>
</div>
<div class="row">
<a class="button button-large button-raised button-fill" href="javascript: ;" v-on:click="call('',device.Number,'/Camera/Zoomin')"></a>
<a class="button button-large button-raised button-fill" href="javascript: ;" v-on:click="call('',device.Number,'/Camera/Left')"></a>
<a class="button button-large button-raised button-fill" href="javascript: ;" v-on:click="call('',device.Number,'/Camera/Stop')"></a>
<a class="button button-large button-raised button-fill" href="javascript: ;" v-on:click="call('',device.Number,'/Camera/Right')"></a>
<a class="button button-large button-raised button-fill" href="javascript: ;" v-on:click="call('',device.Number,'/Camera/Zoomout')"></a>
</div>
<div class="row">
<a class="button button-large button-raised button-fill" href="javascript: ;" v-on:click="call('',device.Number,'/Camera/Down')"></a>
</div>
</template>
</div> </div>
</div> </div>
</div> </div>

Loading…
Cancel
Save