improve:展台
This commit is contained in:
@@ -142,6 +142,36 @@ namespace Ink_Canvas
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void CloseVideoPresenterSidebarAndReleaseResources()
|
||||||
|
{
|
||||||
|
if (VideoPresenterSidebar != null)
|
||||||
|
{
|
||||||
|
VideoPresenterSidebar.Visibility = Visibility.Collapsed;
|
||||||
|
}
|
||||||
|
|
||||||
|
StopVideoPresenterPreviewAndFrameCache(clearPreviewImage: true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void StopVideoPresenterPreviewAndFrameCache(bool clearPreviewImage)
|
||||||
|
{
|
||||||
|
if (BtnCapturePhoto != null)
|
||||||
|
{
|
||||||
|
BtnCapturePhoto.IsEnabled = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clearPreviewImage && VideoPresenterPreviewImage != null)
|
||||||
|
{
|
||||||
|
VideoPresenterPreviewImage.Source = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
try { _cameraService?.StopPreview(); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex); }
|
||||||
|
lock (_videoPresenterFrameLock)
|
||||||
|
{
|
||||||
|
_lastFrame?.Dispose();
|
||||||
|
_lastFrame = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 延迟初始化摄像头服务并订阅其帧和错误事件;如果服务已存在则不做任何操作。
|
/// 延迟初始化摄像头服务并订阅其帧和错误事件;如果服务已存在则不做任何操作。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -442,6 +472,7 @@ namespace Ink_Canvas
|
|||||||
ApplyBoothButtonHighlight(BtnToggleVideoPresenterLiveOnCanvas, true);
|
ApplyBoothButtonHighlight(BtnToggleVideoPresenterLiveOnCanvas, true);
|
||||||
int page = GetCurrentPageIndex();
|
int page = GetCurrentPageIndex();
|
||||||
_liveEnabledPages.Add(page);
|
_liveEnabledPages.Add(page);
|
||||||
|
StartVideoPresenterPreviewForCurrentPageIfNeeded();
|
||||||
|
|
||||||
var img = EnsureLiveFrameElementForPage(page);
|
var img = EnsureLiveFrameElementForPage(page);
|
||||||
ApplyLiveFrameLayoutForPage(page, img);
|
ApplyLiveFrameLayoutForPage(page, img);
|
||||||
@@ -489,6 +520,44 @@ namespace Ink_Canvas
|
|||||||
}
|
}
|
||||||
catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex); }
|
catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_liveEnabledPages.Count == 0)
|
||||||
|
{
|
||||||
|
StopVideoPresenterPreviewAndFrameCache(clearPreviewImage: false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void StartVideoPresenterPreviewForCurrentPageIfNeeded()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
EnsureCameraService();
|
||||||
|
if (_cameraService == null || _cameraService.IsCapturing) return;
|
||||||
|
|
||||||
|
int page = GetCurrentPageIndex();
|
||||||
|
int idx = 0;
|
||||||
|
if (_cameraIndexByPage.TryGetValue(page, out int savedIdx))
|
||||||
|
{
|
||||||
|
idx = savedIdx;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_cameraService.AvailableCameras == null || _cameraService.AvailableCameras.Count == 0)
|
||||||
|
{
|
||||||
|
_cameraService.RefreshCameraList();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_cameraService.AvailableCameras == null || _cameraService.AvailableCameras.Count == 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
idx = Math.Max(0, Math.Min(idx, _cameraService.AvailableCameras.Count - 1));
|
||||||
|
_cameraService.StartPreview(idx);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
LogHelper.WriteLogToFile($"启动视频展台预览失败: {ex.Message}", LogHelper.LogType.Error);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -548,8 +617,9 @@ namespace Ink_Canvas
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 按页摄像头索引:切页后自动切回该页的摄像头
|
// 按页摄像头索引:仅在展台侧栏可见时,切页后自动切回该页的摄像头
|
||||||
if (_cameraIndexByPage.TryGetValue(page, out int idx))
|
if (VideoPresenterSidebar?.Visibility == Visibility.Visible
|
||||||
|
&& _cameraIndexByPage.TryGetValue(page, out int idx))
|
||||||
{
|
{
|
||||||
EnsureCameraService();
|
EnsureCameraService();
|
||||||
_cameraService?.StartPreview(idx);
|
_cameraService?.StartPreview(idx);
|
||||||
@@ -768,11 +838,7 @@ namespace Ink_Canvas
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// 收起侧栏
|
CloseVideoPresenterSidebarAndReleaseResources();
|
||||||
if (VideoPresenterSidebar != null)
|
|
||||||
{
|
|
||||||
VideoPresenterSidebar.Visibility = Visibility.Collapsed;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (BtnToggleVideoPresenterLiveOnCanvas != null)
|
if (BtnToggleVideoPresenterLiveOnCanvas != null)
|
||||||
{
|
{
|
||||||
@@ -797,7 +863,6 @@ namespace Ink_Canvas
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
try { _cameraService?.StopPreview(); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex); }
|
|
||||||
}
|
}
|
||||||
catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex); }
|
catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex); }
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user