|
|
|
@ -1,7 +1,6 @@
|
|
|
|
|
using Application.Domain.Entities;
|
|
|
|
|
using Infrastructure.Data;
|
|
|
|
|
using Infrastructure.Extensions;
|
|
|
|
|
using Infrastructure.Models;
|
|
|
|
|
using IoT.Shared.Infrastructure;
|
|
|
|
|
using Microsoft.AspNetCore.Hosting;
|
|
|
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
@ -124,6 +123,8 @@ namespace IoT.Shared.DeviceServices.Onvif
|
|
|
|
|
};
|
|
|
|
|
var fileName = $"ffmpeg-{Helper.Instance.GetRunTime()}{(RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? ".exe" : "")}";
|
|
|
|
|
var file = Path.Combine(this._env.WebRootPath, fileName);
|
|
|
|
|
device.AddorUpdateData("Push", "否", DeviceDataType.String, "推流");
|
|
|
|
|
device.AddorUpdateData("Record", "否", DeviceDataType.String, "录像");
|
|
|
|
|
device.AddorUpdateData("ffmpeg.file", file, DeviceDataType.String, "ffmpeg路径", hidden: true);
|
|
|
|
|
device.AddorUpdateData("ffmpeg.args", this._configuration["ffmpeg.args"], DeviceDataType.String, "ffmpeg.args", hidden: true);
|
|
|
|
|
device.AddorUpdateData("mainrtmp", $"rtmp://{this._configuration["stream.rtmp"]}/live/main{ipCamera.Id}", DeviceDataType.String, "主码流rtmp");
|
|
|
|
@ -221,12 +222,12 @@ namespace IoT.Shared.DeviceServices.Onvif
|
|
|
|
|
using (var scope = _applicationServices.CreateScope())
|
|
|
|
|
{
|
|
|
|
|
var repo = scope.ServiceProvider.GetService<IRepository<Device>>();
|
|
|
|
|
var cameras = repo.ReadOnlyTable().Include(o => o.Data).Where(o => o.Enable).ToList();
|
|
|
|
|
var cameras = repo.ReadOnlyTable().Include(o => o.Data).Where(o => o.Name == "摄像头").ToList();
|
|
|
|
|
foreach (var key in this._list.Keys)
|
|
|
|
|
{
|
|
|
|
|
var camera = cameras.FirstOrDefault(o => o.Number == key);
|
|
|
|
|
var remove = false;
|
|
|
|
|
if (!camera.Enable)
|
|
|
|
|
if (camera.Data.FirstOrDefault(o => o.Key == "Push").Value != "是")
|
|
|
|
|
{
|
|
|
|
|
remove = true;
|
|
|
|
|
}
|
|
|
|
@ -243,7 +244,7 @@ namespace IoT.Shared.DeviceServices.Onvif
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if (camera.Enable)
|
|
|
|
|
if (camera.Data.FirstOrDefault(o => o.Key == "Push").Value == "是")
|
|
|
|
|
{
|
|
|
|
|
if (camera.Data.FirstOrDefault(o => o.Key == "NeedAuth").Value == "否" || camera.Data.FirstOrDefault(o => o.Key == "HasAuth").Value == "是")
|
|
|
|
|
{
|
|
|
|
@ -280,7 +281,7 @@ namespace IoT.Shared.DeviceServices.Onvif
|
|
|
|
|
{
|
|
|
|
|
var repo = scope.ServiceProvider.GetService<IRepository<Device>>();
|
|
|
|
|
var camera = repo.ReadOnlyTable().Include(o => o.Data).FirstOrDefault(o => o.Number == key);
|
|
|
|
|
if (camera != null && camera.Enable)// && camera.Publish && (!camera.NeedAuth || (camera.NeedAuth && camera.HasAuth)))
|
|
|
|
|
if (camera != null && camera.Data.FirstOrDefault(o => o.Key == "Push").Value == "是")// && camera.Publish && (!camera.NeedAuth || (camera.NeedAuth && camera.HasAuth)))
|
|
|
|
|
{
|
|
|
|
|
if (camera.Data.FirstOrDefault(o => o.Key == "NeedAuth").Value == "否" || camera.Data.FirstOrDefault(o => o.Key == "HasAuth").Value == "是")
|
|
|
|
|
{
|
|
|
|
@ -377,7 +378,7 @@ namespace IoT.Shared.DeviceServices.Onvif
|
|
|
|
|
{
|
|
|
|
|
if (!string.IsNullOrEmpty(e.Data))
|
|
|
|
|
{
|
|
|
|
|
//Console.WriteLine(e.Data);
|
|
|
|
|
Console.WriteLine(e.Data);
|
|
|
|
|
if (e.Data.IndexOf("forcing output") > -1)
|
|
|
|
|
{
|
|
|
|
|
process.Kill();
|
|
|
|
@ -538,6 +539,28 @@ namespace IoT.Shared.DeviceServices.Onvif
|
|
|
|
|
return hc.GetByteDigest(url, camera.UserName, camera.Password);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void StartPush(string number)
|
|
|
|
|
{
|
|
|
|
|
using (var scope = _applicationServices.CreateScope())
|
|
|
|
|
{
|
|
|
|
|
var repo = scope.ServiceProvider.GetService<IRepository<Device>>();
|
|
|
|
|
var device = repo.Table().Include(o => o.Data).FirstOrDefault(o => o.Number == number);
|
|
|
|
|
var data = device.Data.FirstOrDefault(o => o.Key == "Push");
|
|
|
|
|
data.Value = "是";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void StopPush(string number)
|
|
|
|
|
{
|
|
|
|
|
using (var scope = _applicationServices.CreateScope())
|
|
|
|
|
{
|
|
|
|
|
var repo = scope.ServiceProvider.GetService<IRepository<Device>>();
|
|
|
|
|
var device = repo.Table().Include(o => o.Data).FirstOrDefault(o => o.Number == number);
|
|
|
|
|
var data = device.Data.FirstOrDefault(o => o.Key == "Push");
|
|
|
|
|
data.Value = "否";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private byte[] ScreenShot(Device camera)
|
|
|
|
|
{
|
|
|
|
|
var url = camera.GetDataValue("SubSnapshotUri");
|
|
|
|
|