Former-commit-id: 7ba33121043ff12377f6445ccf1cd0e1da0f8301
Former-commit-id: 3d0e13a1678d38114437306f38eb22a426881489
1.0
wanggang 4 years ago
parent 409495a2b1
commit 02bffc2c52

@ -10,17 +10,17 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Jint" Version="2.11.58" /> <PackageReference Include="Jint" Version="2.11.58" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="5.0.4" /> <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="5.0.5" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning" Version="5.0.0" /> <PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning" Version="5.0.0" />
<PackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.MessagePack" Version="5.0.4" /> <PackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.MessagePack" Version="5.0.5" />
<PackageReference Include="Microsoft.AspNetCore.SignalR.StackExchangeRedis" Version="5.0.4" /> <PackageReference Include="Microsoft.AspNetCore.SignalR.StackExchangeRedis" Version="5.0.5" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="5.0.4" /> <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="5.0.5" />
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="5.0.1" /> <PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="5.0.1" />
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="5.0.4" /> <PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="5.0.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="5.0.4" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="5.0.5" />
<PackageReference Include="Microsoft.AspNetCore.SignalR" Version="1.1.0" /> <PackageReference Include="Microsoft.AspNetCore.SignalR" Version="1.1.0" />
<PackageReference Include="Microsoft.Extensions.Localization" Version="5.0.4" /> <PackageReference Include="Microsoft.Extensions.Localization" Version="5.0.5" />
<PackageReference Include="NJsonSchema" Version="10.4.0" /> <PackageReference Include="NJsonSchema" Version="10.4.1" />
<PackageReference Include="System.ServiceModel.Http" Version="4.8.1" /> <PackageReference Include="System.ServiceModel.Http" Version="4.8.1" />
<PackageReference Include="System.ServiceModel.Primitives" Version="4.8.1" /> <PackageReference Include="System.ServiceModel.Primitives" Version="4.8.1" />
<PackageReference Include="Minio" Version="3.1.13" /> <PackageReference Include="Minio" Version="3.1.13" />
@ -36,14 +36,14 @@
<PackageReference Include="Serilog.Sinks.File" Version="4.1.0" /> <PackageReference Include="Serilog.Sinks.File" Version="4.1.0" />
<PackageReference Include="Serilog.Sinks.InfluxDB.Standard" Version="1.0.5" /> <PackageReference Include="Serilog.Sinks.InfluxDB.Standard" Version="1.0.5" />
<PackageReference Include="Serilog.Sinks.RollingFile" Version="3.3.0" /> <PackageReference Include="Serilog.Sinks.RollingFile" Version="3.3.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.1.1" /> <PackageReference Include="Swashbuckle.AspNetCore" Version="6.1.2" />
<PackageReference Include="Swashbuckle.AspNetCore.Annotations" Version="6.1.1" /> <PackageReference Include="Swashbuckle.AspNetCore.Annotations" Version="6.1.2" />
<PackageReference Include="System.Drawing.Common" Version="5.0.2" /> <PackageReference Include="System.Drawing.Common" Version="5.0.2" />
<PackageReference Include="System.Management" Version="5.0.0" /> <PackageReference Include="System.Management" Version="5.0.0" />
<PackageReference Include="ValueInjecter" Version="3.2.0" /> <PackageReference Include="ValueInjecter" Version="3.2.0" />
<PackageReference Include="Flurl" Version="3.0.1" /> <PackageReference Include="Flurl" Version="3.0.1" />
<PackageReference Include="Cronos" Version="0.7.0" /> <PackageReference Include="Cronos" Version="0.7.0" />
<PackageReference Include="Polly" Version="7.2.1" /> <PackageReference Include="Polly" Version="7.2.2" />
</ItemGroup> </ItemGroup>
   
</Project> </Project>

@ -116,10 +116,13 @@ namespace IoT.Shared.Application.Models
[IoTDataConfig(IoTDataType.Info ,hide: true)] [IoTDataConfig(IoTDataType.Info ,hide: true)]
[Display(Name = "设备地址")] [Display(Name = "设备地址")]
DeviceUrl, DeviceUrl,
[Display(Name = "Profiles")]
[IoTDataConfig(IoTDataType.Info, hide: true)] [IoTDataConfig(IoTDataType.Info, hide: true)]
[Display(Name = "媒体地址")]
MediaUrl,
[Display(Name = "Profiles")]
[IoTDataConfig(IoTDataType.Info,valueType:IoTValueType.Object)]
Profiles, Profiles,
[IoTDataConfig(IoTDataType.Info, hide: true)] [IoTDataConfig(IoTDataType.Data)]
[Display(Name = "ProfileToken")] [Display(Name = "ProfileToken")]
ProfileToken, ProfileToken,
[IoTDataConfig(IoTDataType.Info, hide: true)] [IoTDataConfig(IoTDataType.Info, hide: true)]

@ -6,9 +6,7 @@
<Version>1.1.0.0</Version> <Version>1.1.0.0</Version>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="5.0.4" /> <PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="5.0.5" />
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="5.0.4" />
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client.Core" Version="5.0.4" />
<PackageReference Include="Microsoft.OpenApi.Readers" Version="1.2.3" /> <PackageReference Include="Microsoft.OpenApi.Readers" Version="1.2.3" />
<PackageReference Include="System.IO.Ports" Version="5.0.1" /> <PackageReference Include="System.IO.Ports" Version="5.0.1" />
<PackageReference Include="Vibrant.InfluxDB.Client" Version="4.0.4" /> <PackageReference Include="Vibrant.InfluxDB.Client" Version="4.0.4" />

@ -113,6 +113,15 @@ namespace IoTNode.Controllers
}); });
} }
[HttpGet, Route("/[controller]/[action]"), SwaggerOperation("")]
public ApiResponse ChangeToken([SwaggerParameter("设备编号"), Required] string number, [SwaggerParameter("ProfileToken"), Required] string token)
{
return this.AsyncAction(() =>
{
this._deviceService.ChangeToken(number, token);
});
}
[HttpGet, Route("/[controller]/[action]"), SwaggerOperation("")] [HttpGet, Route("/[controller]/[action]"), SwaggerOperation("")]
public ApiResponse StartRecord([SwaggerParameter("设备编号"), Required] string number) public ApiResponse StartRecord([SwaggerParameter("设备编号"), Required] string number)
{ {

@ -150,7 +150,7 @@ namespace IoTNode.DeviceServices.Onvif
} }
deviceRepo.SaveChanges(); deviceRepo.SaveChanges();
this.UpdateIoTData(device.Id, DataKeys.DeviceUrl, ipCamera.DeviceUrl); this.UpdateIoTData(device.Id, DataKeys.DeviceUrl, ipCamera.DeviceUrl);
this.UpdateIoTData(device.Id, DataKeys.DeviceUrl, ipCamera.DeviceUrl); this.UpdateIoTData(device.Id, DataKeys.MediaUrl, ipCamera.MediaUrl);
this.UpdateIoTData(device.Id, DataKeys.PtzAddress, ipCamera.PTZAddress); this.UpdateIoTData(device.Id, DataKeys.PtzAddress, ipCamera.PTZAddress);
this.UpdateIoTData(device.Id, DataKeys.Ptz3DZoomSupport, ipCamera.Ptz3DZoomSupport ? "1" : "0"); this.UpdateIoTData(device.Id, DataKeys.Ptz3DZoomSupport, ipCamera.Ptz3DZoomSupport ? "1" : "0");
@ -190,19 +190,12 @@ namespace IoTNode.DeviceServices.Onvif
{ {
if (ipCamera.Profiles.Count > 0) if (ipCamera.Profiles.Count > 0)
{ {
var tokens = ipCamera.Profiles.Select(o => $"{o.Token}:{o.Width}x{o.Height}").ToList(); var tokens = ipCamera.Profiles.ToJson();
this.UpdateIoTData(device.Id, DataKeys.Profiles, string.Join(',', tokens)); this.UpdateIoTData(device.Id, DataKeys.Profiles, tokens);
var token = this.GetIoTDataValue(device.Id, DataKeys.ProfileToken); var token = this.GetIoTDataValue(device.Id, DataKeys.ProfileToken);
if (string.IsNullOrEmpty(token)) if (string.IsNullOrEmpty(token)|| !ipCamera.Profiles.Any(o => o.Token == token))
{
token = ipCamera.Profiles.First().Token;
}
else
{ {
if (!ipCamera.Profiles.Any(o => o.Token == token)) token = (ipCamera.Profiles.FirstOrDefault(o=>o.Width==1280)??ipCamera.Profiles.First()).Token;
{
token = ipCamera.Profiles.First().Token;
}
} }
if (needAuth) if (needAuth)
{ {
@ -524,6 +517,43 @@ namespace IoTNode.DeviceServices.Onvif
return result; return result;
} }
public void ChangeToken(string id,string token)
{
var device = this.GetIoTDevice(id);
if (device != null)
{
using var scope = _applicationServices.CreateScope();
var repo = scope.ServiceProvider.GetRequiredService<IRepository<IoTData>>();
var profiles = this.GetIoTDataValue(device.Id,DataKeys.Profiles);
if (!string.IsNullOrEmpty(profiles))
{
var tokens = profiles.FromJson<List<Profile>>();
if(tokens.Any(o=>o.Token==token))
{
var currentToken = this.GetIoTDataValue(device.Id, DataKeys.ProfileToken);
if (!string.IsNullOrEmpty(currentToken) && currentToken != token)
{
this.UpdateIoTData(device.Id, DataKeys.ProfileToken, token);
var deviceUrl = this.GetIoTDataValue(device.Id, DataKeys.DeviceUrl);
var mediaUrl = this.GetIoTDataValue(device.Id, DataKeys.MediaUrl);
if (!string.IsNullOrEmpty(deviceUrl) && !string.IsNullOrEmpty(mediaUrl))
{
var streamUriXml = this._onvifDeviceManagement.GetStreamUri(deviceUrl, mediaUrl, device.UserName, device.Password, token);
var snapshotUri = this._onvifDeviceManagement.GetSnapshotUri(deviceUrl, mediaUrl, device.UserName, device.Password, token);
var ipCamera = new IPCamera { StreamUriXml = streamUriXml, SnapshotUriXml = snapshotUri };
ipCamera.ParseStreamUri();
ipCamera.ParseSnapshotUri();
this.UpdateIoTData(device.Id, DataKeys.StreamUri, ipCamera.StreamUri);
this.UpdateIoTData(device.Id, DataKeys.SnapshotUri, ipCamera.SnapshotUri);
this.SetPush(device.Number, false);
this.SetPush(device.Number, true);
}
}
}
}
}
}
public void ZoomIn(string id, float speed) public void ZoomIn(string id, float speed)
{ {
this.Move(id, speed, 0, 0); this.Move(id, speed, 0, 0);

@ -7,7 +7,7 @@
<Version>1.1.1.1</Version> <Version>1.1.1.1</Version>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="5.0.4" /> <PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="5.0.5" />
<PackageReference Include="Kveer.XmlRPC" Version="1.1.1" /> <PackageReference Include="Kveer.XmlRPC" Version="1.1.1" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

@ -13,6 +13,6 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.SpaServices.Extensions" Version="5.0.4" /> <PackageReference Include="Microsoft.AspNetCore.SpaServices.Extensions" Version="5.0.5" />
</ItemGroup> </ItemGroup>
</Project> </Project>

@ -6,6 +6,6 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.SpaServices.Extensions" Version="5.0.4" /> <PackageReference Include="Microsoft.AspNetCore.SpaServices.Extensions" Version="5.0.5" />
</ItemGroup> </ItemGroup>
</Project> </Project>

@ -22,9 +22,9 @@ stats {
network 0; network 0;
disk sda sdb xvda xvdb; disk sda sdb xvda xvdb;
} }
rtc_server { rtc_server{
enabled on; enabled on;
listen 8000; listen 8000;
candidate *; candidate *;
} }
vhost __defaultVhost__ { vhost __defaultVhost__ {
@ -32,11 +32,12 @@ vhost __defaultVhost__ {
enabled on; enabled on;
bframe discard; bframe discard;
} }
tcp_nodelay on min_latency on; tcp_nodelay on
min_latency on;
play { play {
gop_cache off; gop_cache off;
queue_length 10; queue_length 10;
mw_latency 100; mw_latency 100;
} }
publish { publish {
mr off; mr off;
@ -59,23 +60,26 @@ vhost __defaultVhost__ {
output ./objs/nginx/html/[app]/[stream].png; output ./objs/nginx/html/[app]/[stream].png;
} }
engine ff { engine ff {
enabled off; enabled off;
vfilter; vfilter {
vcodec libx264; }
vbitrate 500; vcodec libx264;
vfps 25; vbitrate 500;
vwidth 768; vfps 25;
vheight 320; vwidth 768;
vthreads 12; vheight 320;
vprofile main; vthreads 12;
vpreset medium; vprofile main;
vparams; vpreset medium;
acodec libfdk_aac; vparams {
abitrate 70; }
asample_rate 44100; acodec libfdk_aac;
achannels 2; abitrate 70;
aparams; asample_rate 44100;
output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; achannels 2;
aparams {
}
output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
} }
} }
http_remux { http_remux {

Loading…
Cancel
Save