diff --git a/projects/IoT.Shared/Services/IoTCenter/IoTCenterHub.cs b/projects/IoT.Shared/Services/IoTCenter/IoTCenterHub.cs index 2daa9257..58c2efad 100644 --- a/projects/IoT.Shared/Services/IoTCenter/IoTCenterHub.cs +++ b/projects/IoT.Shared/Services/IoTCenter/IoTCenterHub.cs @@ -301,29 +301,15 @@ namespace IoTCenter.Services var method = Methods.UpdateCamera; if (model.Value == "是") { - var url2 = url + $"/api/v1/raw?rpc=update&scope=dvr&value=__defaultVhost__¶m=enable&data=live/main{device.Number}"; - if (CallSrs(url2)) - { - this.ServerToClient(method, model.ToJson(), number); - } - url2 = url + $"/api/v1/raw?rpc=update&scope=dvr&value=__defaultVhost__¶m=enable&data=live/sub{device.Number}"; - if (CallSrs(url2)) - { - this.ServerToClient(method, model.ToJson(), number); - } + url += $"/api/v1/raw?rpc=update&scope=dvr&value=__defaultVhost__¶m=enable&data=live/{device.Number}"; } else { - var url2 = url + $"/api/v1/raw?rpc=update&scope=dvr&value=__defaultVhost__¶m=disable&data=live/main{device.Number}"; - if (CallSrs(url2)) - { - this.ServerToClient(method, model.ToJson(), number); - } - url2 = url + $"/api/v1/raw?rpc=update&scope=dvr&value=__defaultVhost__¶m=disable&data=live/sub{device.Number}"; - if (CallSrs(url2)) - { - this.ServerToClient(method, model.ToJson(), number); - } + url += $"/api/v1/raw?rpc=update&scope=dvr&value=__defaultVhost__¶m=disable&data=live/{device.Number}"; + } + if (CallSrs(url)) + { + this.ServerToClient(method, model.ToJson(), number); } } catch (Exception ex) diff --git a/projects/IoTCenter/Api/SrsController.cs b/projects/IoTCenter/Api/SrsController.cs new file mode 100644 index 00000000..b0d2b82f --- /dev/null +++ b/projects/IoTCenter/Api/SrsController.cs @@ -0,0 +1,66 @@ +using Application.Domain.Entities; +using Infrastructure.Data; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Configuration; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; + +namespace UserCenter.Controllers +{ + [ApiVersion("1.0")] + [Route("api/v{version:apiVersion}/[controller]/[action]")] + [ApiController] + public class SrsController : ControllerBase + { + private readonly IConfiguration _cfg; + private readonly IRepository _deviceRepo; + private readonly IRepository _liveRecordRepo; + + public SrsController(IConfiguration cfg, + IRepository deviceRepo, + IRepository liveRecordRepo) + { + this._cfg = cfg; + this._deviceRepo = deviceRepo; + this._liveRecordRepo = liveRecordRepo; + } + + /// + /// 录制完毕事件响应 + ///{"action":"on_dvr","client_id":107,"ip":"192.168.3.124","vhost":"__defaultVhost__","app":"live","stream":"main0a5d5deee43011b483884cbd8fd2b3dd","param":"","cwd":"/root/publish/apps/srs","file":"./objs/nginx/html/live.main0a5d5deee43011b483884cbd8fd2b3dd.1574832559180.mp4"} + /// + /// + [AllowAnonymous] + public string OnDvr() + { + using (var reader = new StreamReader(Request.Body)) + { + var json = reader.ReadToEndAsync().Result; + Console.WriteLine("ondvr:"); + Console.WriteLine(json); + var result = JsonConvert.DeserializeObject>(json); + if (result["action"] == "on_dvr") + { + var streamId = result["stream"]; + var device = this._deviceRepo.ReadOnlyTable().FirstOrDefault(o => o.Number == streamId); + if (device != null) + { + this._liveRecordRepo.Add(new LiveRecord + { + DeviceNumber = device.Number, + DeviceName = device?.DisplayName, + Name = $"回放{DateTime.Now.ToString("yyyy-MM-dd HH:mm")}", + Value = $"/video{result["file"].Substring(result["file"].LastIndexOf('/'))}" + }); + this._liveRecordRepo.SaveChanges(); + } + } + } + return string.Empty; + } + } +} \ No newline at end of file diff --git a/projects/IoTCenter/Areas/Admin/Views/LiveRecord/Details.cshtml b/projects/IoTCenter/Areas/Admin/Views/LiveRecord/Details.cshtml index 01edabdf..6f28b104 100644 --- a/projects/IoTCenter/Areas/Admin/Views/LiveRecord/Details.cshtml +++ b/projects/IoTCenter/Areas/Admin/Views/LiveRecord/Details.cshtml @@ -1,5 +1,6 @@ @model EditLiveRecordModel @{ HtmlTitle = Model.Name; + var url = Context.Request.Scheme + "://" + Context.Request.Host.Host + Model.Value; } - \ No newline at end of file + \ No newline at end of file diff --git a/projects/IoTCenter/Controllers/AppController.cs b/projects/IoTCenter/Controllers/AppController.cs index e493fbb1..bd98f615 100644 --- a/projects/IoTCenter/Controllers/AppController.cs +++ b/projects/IoTCenter/Controllers/AppController.cs @@ -409,12 +409,13 @@ namespace IoTCenter.Controllers using (var reader = new StreamReader(Request.Body)) { var json = reader.ReadToEndAsync().Result; + Console.WriteLine("onpublish:"); + Console.WriteLine(json); var result = JsonConvert.DeserializeObject>(json); if (result["action"] == "on_publish") { var streamId = result["stream"]; - var deviceNumber = streamId.StartsWith("main") ? streamId.Substring(4) : streamId.Substring(3); - var device = this._deviceRepo.ReadOnlyTable().Include(o => o.Node).Include(o => o.Data).FirstOrDefault(o => o.Number == deviceNumber); + var device = this._deviceRepo.ReadOnlyTable().Include(o => o.Node).Include(o => o.Data).FirstOrDefault(o => o.Number == streamId); if (device != null) { var data = device.Data.FirstOrDefault(o => o.Name == "录制"); @@ -445,17 +446,18 @@ namespace IoTCenter.Controllers using (var reader = new StreamReader(Request.Body)) { var json = reader.ReadToEndAsync().Result; + Console.WriteLine("ondvr:"); + Console.WriteLine(json); var result = JsonConvert.DeserializeObject>(json); if (result["action"] == "on_dvr") { var streamId = result["stream"]; - var deviceNumber = streamId.StartsWith("main") ? streamId.Substring(4) : streamId.Substring(3); - var device = this._deviceRepo.ReadOnlyTable().FirstOrDefault(o => o.Number == deviceNumber); + var device = this._deviceRepo.ReadOnlyTable().FirstOrDefault(o => o.Number == streamId); if (device != null) { this._liveRecordRepo.Add(new LiveRecord { - DeviceNumber = deviceNumber, + DeviceNumber = device.Number, DeviceName = device?.DisplayName, Name = $"回放{DateTime.Now.ToString("yyyy-MM-dd HH:mm")}", Value = $"/video{result["file"].Substring(result["file"].LastIndexOf('/'))}" diff --git a/projects/WebApp/wwwroot/pages/iot/device/camera.html b/projects/WebApp/wwwroot/pages/iot/device/camera.html index 73293b6c..d1043cd0 100644 --- a/projects/WebApp/wwwroot/pages/iot/device/camera.html +++ b/projects/WebApp/wwwroot/pages/iot/device/camera.html @@ -29,14 +29,14 @@
- + - + - + - +