diff --git a/src/components/BootstrapBlazor.HikVision/BootstrapBlazor.HikVision.csproj b/src/components/BootstrapBlazor.HikVision/BootstrapBlazor.HikVision.csproj index 6f193e44..6f5a30de 100644 --- a/src/components/BootstrapBlazor.HikVision/BootstrapBlazor.HikVision.csproj +++ b/src/components/BootstrapBlazor.HikVision/BootstrapBlazor.HikVision.csproj @@ -1,7 +1,7 @@ - 10.0.7 + 10.0.9 diff --git a/src/components/BootstrapBlazor.HikVision/Components/HikVisionWebPlugin.razor.cs b/src/components/BootstrapBlazor.HikVision/Components/HikVisionWebPlugin.razor.cs index 3e376715..8106b140 100644 --- a/src/components/BootstrapBlazor.HikVision/Components/HikVisionWebPlugin.razor.cs +++ b/src/components/BootstrapBlazor.HikVision/Components/HikVisionWebPlugin.razor.cs @@ -115,6 +115,16 @@ public partial class HikVisionWebPlugin /// public bool IsRealPlaying { get; private set; } + /// + /// 获得 是否已经打开声音 + /// + public bool IsOpenSound { get; private set; } + + /// + /// 获得 是否开始录像 + /// + public bool IsStartRecord { get; private set; } + /// /// /// @@ -164,6 +174,7 @@ public async Task Logout() { await InvokeVoidAsync("logout", Id); } + IsStartRecord = false; IsRealPlaying = false; IsLogin = false; await TriggerLogout(); @@ -221,6 +232,7 @@ public async Task StopRealPlay() { await InvokeVoidAsync("stopRealPlay", Id); IsRealPlaying = false; + IsStartRecord = false; await TriggerStopRealPlay(); } } @@ -281,6 +293,7 @@ public async Task OpenSound() { var code = await InvokeAsync("openSound", Id); ret = code == 100; + IsOpenSound = true; } return ret; } @@ -296,6 +309,7 @@ public async Task CloseSound() { var code = await InvokeAsync("closeSound", Id); ret = code == 100; + IsOpenSound = false; } return ret; } @@ -320,54 +334,30 @@ public async Task SetVolume(int value) /// 抓图方法并且下载方法 /// /// - public async Task CapturePictureAndDownload() + public async Task CapturePictureAndDownload(string? fileName = null, CancellationToken token = default) { + var ret = false; if (IsLogin && IsRealPlaying) { - await InvokeVoidAsync("capturePictureAndDownload", Id); + ret = await InvokeAsync("capturePictureAndDownload", token, Id, fileName); } + return ret; } - private TaskCompletionSource? _captureTaskCompletionSource = null; - /// /// 抓图方法返回 实例 /// /// - public async Task CapturePicture(CancellationToken token = default) + public async Task CapturePicture(string? fileName = null, CancellationToken token = default) { - IJSStreamReference? ret = null; + var ret = false; if (IsLogin && IsRealPlaying) { - _captureTaskCompletionSource = new(); - - try - { - await InvokeVoidAsync("capturePicture", token, Id); - ret = await _captureTaskCompletionSource.Task; - } - catch (Exception ex) - { - _captureTaskCompletionSource.SetException(ex); - } + ret = await InvokeAsync("capturePicture", token, Id, fileName); } return ret; } - /// - /// 抓图返回文件流方法 由 Javascript 调用 - /// - /// - /// - [JSInvokable] - public async Task TriggerReceivePictureStream(IJSStreamReference stream) - { - if (_captureTaskCompletionSource != null) - { - _captureTaskCompletionSource.SetResult(stream); - } - } - /// /// 开始录像方法 /// @@ -378,6 +368,7 @@ public async Task StartRecord() if (IsLogin && IsRealPlaying) { ret = await InvokeAsync("startRecord", Id); + IsStartRecord = ret; } return ret; } @@ -392,6 +383,10 @@ public async Task StopRecord() if (IsLogin && IsRealPlaying) { ret = await InvokeAsync("stopRecord", Id); + if (ret) + { + IsStartRecord = false; + } } return ret; } diff --git a/src/components/BootstrapBlazor.HikVision/wwwroot/hikvision.js b/src/components/BootstrapBlazor.HikVision/wwwroot/hikvision.js index 2f803dad..8d190e54 100644 --- a/src/components/BootstrapBlazor.HikVision/wwwroot/hikvision.js +++ b/src/components/BootstrapBlazor.HikVision/wwwroot/hikvision.js @@ -409,24 +409,24 @@ export async function setVolume(id, value) { return code; } -export async function capturePicture(id) { +export function capturePicture(id, szFileName) { const vision = Data.get(id); const { realPlaying } = vision; if (realPlaying !== true) { - return ""; + return false; } try { - const base64 = await WebVideoCtrl.I_CapturePicData(); - if (base64) { - const bytes = base64ToArray(base64); - return DotNet.createJSStreamReference(bytes.buffer); + if (!szFileName) { + szFileName = `capture_${new Date().getTime()}`; } + WebVideoCtrl.I_CapturePic(szFileName); + return true; } catch (ex) { console.log(ex); - return null; + return false; } } @@ -443,28 +443,34 @@ const base64ToArray = base64String => { return bytes; } -export async function capturePictureAndDownload(id) { +export async function capturePictureAndDownload(id, szFileName) { const vision = Data.get(id); const { realPlaying } = vision; if (realPlaying !== true) { - return; + return false; } + let ret = false; try { const base64 = await WebVideoCtrl.I_CapturePicData(); if (base64) { + if (!szFileName) { + szFileName = `capture_${new Date().getTime()}.jpg` + } const anchorElement = document.createElement('a'); anchorElement.href = `data:image/jpg;base64,${base64}`; - anchorElement.download = `capture_${new Date().getTime()}.jpg`; + anchorElement.download = szFileName; document.body.appendChild(anchorElement); anchorElement.click(); document.body.removeChild(anchorElement); + ret = true; } } catch (ex) { console.log(ex); } + return ret; } export async function startRecord(id) {