diff --git a/.gitignore b/.gitignore index 4ce6fdd..1b80207 100644 --- a/.gitignore +++ b/.gitignore @@ -337,4 +337,12 @@ ASALocalRun/ .localhistory/ # BeatPulse healthcheck temp database -healthchecksdb \ No newline at end of file +healthchecksdb + +# Application Specific + +*.avi +*.mkv +*.mpg +*.divx +*.xvid diff --git a/Squirrowse.Client/Service/CameraService.cs b/Squirrowse.Client/Service/CameraService.cs index ef3f3a9..d7b0a93 100644 --- a/Squirrowse.Client/Service/CameraService.cs +++ b/Squirrowse.Client/Service/CameraService.cs @@ -28,8 +28,7 @@ namespace Squirrowse.Client.Service using var fr = await GetFrame(); yield return fr.ConvertToJpgByte(); await Task.Delay(1000 / 30); - } - + } //fr.Dispose(); } } diff --git a/Squirrowse.Core/Models/VideoFrame.cs b/Squirrowse.Core/Models/VStream.cs similarity index 67% rename from Squirrowse.Core/Models/VideoFrame.cs rename to Squirrowse.Core/Models/VStream.cs index f2aab3c..c8c1378 100644 --- a/Squirrowse.Core/Models/VideoFrame.cs +++ b/Squirrowse.Core/Models/VStream.cs @@ -1,9 +1,11 @@ -using System; +using Squirrowse.Core.Models; +using System; namespace Squirrowse.Client.Models { - public class VideoFrame + public class VStream { + public User user { get; set; } public byte[] FrameBytes { get; set; } public DateTime TimeStamp => DateTime.Now; public Guid id => Guid.NewGuid(); diff --git a/Squirrowse.Service/Hubs/StreamHub.cs b/Squirrowse.Service/Hubs/StreamHub.cs index a140a64..e0a4bda 100644 --- a/Squirrowse.Service/Hubs/StreamHub.cs +++ b/Squirrowse.Service/Hubs/StreamHub.cs @@ -15,7 +15,7 @@ namespace Squirrowse.Service.Hubs { private readonly ILogger logger; private readonly IStreamManager manager; - + public StreamHub(ILogger logger, IStreamManager manager) { @@ -85,23 +85,42 @@ namespace Squirrowse.Service.Hubs public async Task UploadByteStream(IAsyncEnumerable stream) { - manager.SaveData(stream); + await foreach (var frame in stream) { - var frameStamp = frame.ConvertByteToMat(); - string timestamp = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fff", - CultureInfo.InvariantCulture); - Cv2.PutText(frameStamp, timestamp, new Point(1,480/2), HersheyFonts.HersheySimplex,0.5f,Scalar.Red); + // var frameStamp = frame.ConvertByteToMat(); + // string timestamp = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fff", + // CultureInfo.InvariantCulture); + // Cv2.PutText(frameStamp, timestamp, new Point(1, 480 / 2), HersheyFonts.HersheySimplex, 0.5f, Scalar.Red); logger.LogInformation($"{this.GetHashCode()}: send frame"); + //logger.LogInformation($"Got frame size: {frame.Length} "); //if (!streamOn) continue; - // logger.LogInformation($"Send frame of size: {frame.Length} to {Core.Models.Groups.superUser.ToString()}"); - await Clients.Groups(Core.Models.Groups.superUser.ToString()).SendAsync("RecData", frameStamp.ConvertToJpgByte()); + // logger.LogInformation($"Send frame of size: {frame.Length} to {Core.Models.Groups.superUser.ToString()}"); + var framewithTs = await AddTimestamp(frame); + await Clients.Groups(Core.Models.Groups.superUser.ToString()).SendAsync("RecData",framewithTs ); logger.LogInformation($"{this.GetHashCode()}: send data"); //await Task.Delay(100); //leave some delay for debug purpose - await Task.Delay(1000/30); + await Task.Delay(1000 / 30); } } + public async Task StartRecord(string connectionId) + { + + } + public async Task StopRecord(string connectionId) + { + + } + public async Task AddTimestamp(byte[] framebytes) + { + + var frameStamp = framebytes.ConvertByteToMat(); + string timestamp = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fff", + CultureInfo.InvariantCulture); + Cv2.PutText(frameStamp, timestamp, new Point(1, 480 / 2), HersheyFonts.HersheySimplex, 0.5f, Scalar.Red); + return frameStamp.ConvertToJpgByte(); + } public async Task> GetListOfTypeUser(ConnectionType t) { diff --git a/Squirrowse.Service/Hubs/StreamManager.cs b/Squirrowse.Service/Hubs/StreamManager.cs index 2940f98..43f5747 100644 --- a/Squirrowse.Service/Hubs/StreamManager.cs +++ b/Squirrowse.Service/Hubs/StreamManager.cs @@ -48,7 +48,7 @@ namespace Squirrowse.Service.Hubs public IEnumerable getAllUsers() { - var t = _users; + // var t = _users; return _users; } diff --git a/Squirrowse.Service/Squirrowse.Service.csproj b/Squirrowse.Service/Squirrowse.Service.csproj index 7263b02..f71139e 100644 --- a/Squirrowse.Service/Squirrowse.Service.csproj +++ b/Squirrowse.Service/Squirrowse.Service.csproj @@ -2,6 +2,7 @@ netcoreapp3.0 + Squirrowse.Service.Program diff --git a/Squirrowse.Web/Pages/Hub.razor b/Squirrowse.Web/Pages/Hub.razor index d9a4816..8e7013d 100644 --- a/Squirrowse.Web/Pages/Hub.razor +++ b/Squirrowse.Web/Pages/Hub.razor @@ -28,6 +28,13 @@ + + + @@ -71,7 +78,16 @@ { return agentName == CurrentViewCastAgent; } - + async Task StartRecording(string agent) + { + await connection.SendAsync("StartRecord"); + StateHasChanged(); + } + async Task StopRecording(string agent) + { + await connection.SendAsync("StopRecord"); + StateHasChanged(); + } async Task OnStreamDataReceived(byte[] streamData) { @@ -81,12 +97,12 @@ // imageSource = String.Format("data:image/jpg;base64,{0}", base64); // StateHasChanged(); //} - - var base64 = Convert.ToBase64String(streamData); - imageSource = String.Format("data:image/jpg;base64,{0}", base64); + + var base64 = Convert.ToBase64String(streamData); + imageSource = String.Format("data:image/jpg;base64,{0}", base64); StateHasChanged(); - } + } async Task OnStreamDataReceivedEn(byte[] streamData) { //await foreach (var t in streamData) @@ -95,9 +111,9 @@ // imageSource = String.Format("data:image/jpg;base64,{0}", base64); // StateHasChanged(); //} - - var base64 = Convert.ToBase64String(streamData); - imageSource = String.Format("data:image/jpg;base64,{0}", base64); + + var base64 = Convert.ToBase64String(streamData); + imageSource = String.Format("data:image/jpg;base64,{0}", base64); StateHasChanged(); } diff --git a/Squirrowse.Web/Squirrowse.Web.csproj b/Squirrowse.Web/Squirrowse.Web.csproj index 836c7de..826d236 100644 --- a/Squirrowse.Web/Squirrowse.Web.csproj +++ b/Squirrowse.Web/Squirrowse.Web.csproj @@ -2,6 +2,7 @@ netcoreapp3.0 + Squirrowse.Web.Program