You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
358 lines
9.5 KiB
358 lines
9.5 KiB
3 years ago
|
using EC.Entity.Video;
|
||
|
using EC.UsingEventAggregator;
|
||
|
using ECMonitor.Code;
|
||
|
using ECMonitor.Manager;
|
||
|
using ECMonitor.UC.Videos;
|
||
|
using Prism.Events;
|
||
|
using Prism.Regions;
|
||
|
using System.Linq;
|
||
|
using System.Threading;
|
||
|
using System.Windows;
|
||
|
using System.Windows.Controls;
|
||
|
|
||
|
namespace ECMonitor.Page.CameraMonitor
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// MainVideo.xaml 的交互逻辑
|
||
|
/// </summary>
|
||
|
public partial class CameraVideo : UserControl
|
||
|
{
|
||
|
public IRegionManager _regionManager { get; set; }
|
||
|
public IEventAggregator _ea { get; set; }
|
||
|
|
||
|
private VideoPlayManager _videoPlayManager { get; set; } = new VideoPlayManager();
|
||
|
private double _videoWidth = 400;
|
||
|
private double _videoHeight = 300;
|
||
|
|
||
|
//窗体长宽比,防止窗体变化时 窗体变形
|
||
|
private double _videoWH { get; set; } = -1;
|
||
|
|
||
|
/// <summary>
|
||
|
/// 当前选中播放器好
|
||
|
/// </summary>
|
||
|
private int _playerSelectIndex { get; set; } = 0;
|
||
|
|
||
|
/// <summary>
|
||
|
/// 当天窗体内播放器数量
|
||
|
/// </summary>
|
||
|
private int _videoNumber { get; set; } = 1;
|
||
|
|
||
|
/// <summary>
|
||
|
/// 上一次选择 按钮 窗体数 1窗 4窗
|
||
|
/// </summary>
|
||
|
private int _barButtonSelectedIndex = 0;
|
||
|
|
||
|
public CameraVideo(IRegionManager regionManager, IEventAggregator ea)
|
||
|
{
|
||
|
_regionManager = regionManager;
|
||
|
_ea = ea;
|
||
|
InitializeComponent();
|
||
|
_ea.GetEvent<ShowVoideInMainEvent>().Subscribe(PlayVideoReceived);
|
||
|
}
|
||
|
|
||
|
private void BarButtons_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||
|
{
|
||
|
if (barButtons.SelectedIndex == -1)
|
||
|
{
|
||
|
barButtons.SelectedIndex = _barButtonSelectedIndex;
|
||
|
return;
|
||
|
}
|
||
|
if (barButtons.SelectedIndex != _barButtonSelectedIndex)
|
||
|
{
|
||
|
BarButtonsSelectedChange(barButtons.SelectedIndex);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void BarButtonsSelectedChange(int selectedIndex)
|
||
|
{
|
||
|
if (_barButtonSelectedIndex == selectedIndex)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
_barButtonSelectedIndex = selectedIndex;
|
||
|
switch (selectedIndex)
|
||
|
{
|
||
|
case 0:
|
||
|
ChangePlayerGridByRowNum(1);
|
||
|
break;
|
||
|
|
||
|
case 1:
|
||
|
ChangePlayerGridByRowNum(2);
|
||
|
break;
|
||
|
|
||
|
case 2:
|
||
|
ChangePlayerGridByRowNum(3);
|
||
|
break;
|
||
|
}
|
||
|
_playerSelectIndex = 0;
|
||
|
_videoPlayManager.SetALLUnSelected();
|
||
|
_videoPlayManager.GetUCVideoList()[_playerSelectIndex]?.SetSelected(true);
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 设置窗体每行播放器数量
|
||
|
/// </summary>
|
||
|
/// <param name="rowNumber"></param>
|
||
|
private void ChangePlayerGridByRowNum(int rowNumber = 1)
|
||
|
{
|
||
|
if (_videoWH < 0)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
double width = panMain.ActualWidth;
|
||
|
double height = _videoWH * width;
|
||
|
//Padding =2,2,2,2
|
||
|
width = width - 4;
|
||
|
height = height - 4;
|
||
|
_videoWidth = width / rowNumber - 4;
|
||
|
_videoHeight = height / rowNumber - 4;
|
||
|
int showVideoNumber = rowNumber * rowNumber;
|
||
|
_videoNumber = showVideoNumber;
|
||
|
int addedVideoNumber = _videoPlayManager.GetUCVideoList().Count();
|
||
|
|
||
|
int dif = showVideoNumber - addedVideoNumber;
|
||
|
//已经添加的 多余界面
|
||
|
if (dif < 0)
|
||
|
{
|
||
|
//设置界面大小
|
||
|
for (int i = 0; i < showVideoNumber; i++)
|
||
|
{
|
||
|
var videoPlay = _videoPlayManager.GetUCVideoList()[i];
|
||
|
videoPlay.ReSetSize(_videoWidth, _videoHeight);
|
||
|
|
||
|
string ucname = videoPlay.GetName();
|
||
|
var rtspVideo = (UserControl)this.panMain.FindName(ucname);
|
||
|
if (rtspVideo == null)//如果没有添加的添加
|
||
|
{
|
||
|
this.panMain.Children.Add(videoPlay.GetControl());
|
||
|
this.panMain.RegisterName(videoPlay.GetName(), videoPlay.GetControl());
|
||
|
}
|
||
|
}
|
||
|
//从界面删除
|
||
|
for (int i = showVideoNumber; i < addedVideoNumber; i++)
|
||
|
{
|
||
|
var videoPlay = _videoPlayManager.GetUCVideoList()[i];
|
||
|
string ucname = videoPlay.GetName();
|
||
|
var rtspVideo = (UserControl)this.panMain.FindName(ucname);
|
||
|
if (rtspVideo != null)
|
||
|
{
|
||
|
videoPlay.Stop();
|
||
|
// videoPlay.SetIsShow(false);
|
||
|
this.panMain.Children.Remove(rtspVideo);
|
||
|
this.panMain.UnregisterName(ucname);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else if (dif >= 0) ///已经添加的少于界面
|
||
|
{
|
||
|
//设置界面大小
|
||
|
for (int i = 0; i < addedVideoNumber; i++)
|
||
|
{
|
||
|
var videoPlay = _videoPlayManager.GetUCVideoList()[i];
|
||
|
videoPlay.ReSetSize(_videoWidth, _videoHeight);
|
||
|
string ucname = videoPlay.GetName();
|
||
|
var rtspVideo = (UserControl)this.panMain.FindName(ucname);
|
||
|
if (rtspVideo == null)
|
||
|
{
|
||
|
this.panMain.Children.Add(videoPlay.GetControl());
|
||
|
this.panMain.RegisterName(videoPlay.GetName(), videoPlay.GetControl());
|
||
|
}
|
||
|
}
|
||
|
//添加新的视频窗体
|
||
|
for (int i = 0; i < dif; i++)
|
||
|
{
|
||
|
var iUCVideo = _videoPlayManager.CreateVideo(_ea, _videoWidth, _videoHeight);
|
||
|
var ucvideo = iUCVideo.GetControl();
|
||
|
ucvideo.Margin = new Thickness(2, 2, 2, 2);
|
||
|
this.panMain.Children.Add(ucvideo);
|
||
|
this.panMain.RegisterName(ucvideo.Name, ucvideo);
|
||
|
iUCVideo.PlayerMouseDown += PlayerMouseDown;
|
||
|
iUCVideo.PlayerMouseDoubleClick += PlayerMouseDoubleClick;
|
||
|
iUCVideo.OnFromClose += OnFromClose;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void OnFromClose(object sender, int index)
|
||
|
{
|
||
|
StaticData.MainPlayerIp = "";
|
||
|
}
|
||
|
|
||
|
//双击 最大化、最小化
|
||
|
private void PlayerMouseDoubleClick(object sender, int index)
|
||
|
{
|
||
|
IUCPlayer player = (sender as IUCPlayer);
|
||
|
|
||
|
double width = panMain.ActualWidth;
|
||
|
double height = _videoWH * width;
|
||
|
//Padding =2,2,2,2
|
||
|
width = width - 4;
|
||
|
height = height - 4;
|
||
|
|
||
|
bool isMax = player.SetMaximized(width, height);
|
||
|
if (isMax)
|
||
|
{
|
||
|
this.panMain.Children.Remove(player.GetControl());
|
||
|
this.panMain.UnregisterName(player.GetName());
|
||
|
this.panMain1.Children.Add(player.GetControl());
|
||
|
this.panMain1.RegisterName(player.GetName(), player.GetControl());
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
this.panMain1.Children.Remove(player.GetControl());
|
||
|
this.panMain1.UnregisterName(player.GetName());
|
||
|
|
||
|
this.panMain.Children.Insert(index, player.GetControl());
|
||
|
this.panMain.RegisterName(player.GetName(), player.GetControl());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 选中设置
|
||
|
/// </summary>
|
||
|
/// <param name="sender"></param>
|
||
|
/// <param name="e"></param>
|
||
|
private void PlayerMouseDown(object sender, int videoIndex)
|
||
|
{
|
||
|
_videoPlayManager.SetALLUnSelected();
|
||
|
IUCPlayer ucPlayer = (sender as IUCPlayer);
|
||
|
ucPlayer.SetSelected(true);
|
||
|
_playerSelectIndex = videoIndex;
|
||
|
|
||
|
//rightRegion.
|
||
|
if (ucPlayer.IsPlaying())
|
||
|
{
|
||
|
//MonitorCamera curCamera = ucPlayer.GetCamera();
|
||
|
var curOnvifClient = ucPlayer.GetOnvifClient();
|
||
|
_ea.GetEvent<SendOnvifClientEvent>().Publish(curOnvifClient);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
_ea.GetEvent<SendOnvifClientEvent>().Publish(null);
|
||
|
}
|
||
|
|
||
|
///
|
||
|
}
|
||
|
|
||
|
//private void CreateVideo(string cameraIp)
|
||
|
//{
|
||
|
// IUCVideo ucVideo = _videoPlayManager.GetUCVideo(cameraIp);
|
||
|
// if (ucVideo != null)
|
||
|
// {
|
||
|
// ucVideo.UPDateTime();
|
||
|
// return;
|
||
|
// }
|
||
|
// MonitorCamera camera = CameraManager.GetCamera(cameraIp);
|
||
|
// if (camera == null)
|
||
|
// {
|
||
|
// ShowLog("相机Ip:" + cameraIp + "不存在", true);
|
||
|
// return;
|
||
|
// }
|
||
|
// UCRtspVlcVideo rtspVideo = new UCRtspVlcVideo(_videoWidth,_videoHeight);
|
||
|
|
||
|
// this.panMain.Children.Add(rtspVideo);
|
||
|
// rtspVideo.Play();
|
||
|
|
||
|
// this.panMain.RegisterName(rtspVideo.Name, rtspVideo);
|
||
|
// _videoPlayManager.Add(ucVideo);
|
||
|
//}
|
||
|
|
||
|
//private void btnStop_Click(object sender, RoutedEventArgs e)
|
||
|
//{
|
||
|
// var rtspVideo = _videoPlayManager.GetUCVideo("192.168.1.65");
|
||
|
// if (rtspVideo != null)
|
||
|
// {
|
||
|
// rtspVideo.Stop();
|
||
|
|
||
|
// }
|
||
|
|
||
|
//}
|
||
|
|
||
|
private void UserControl_Loaded(object sender, RoutedEventArgs e)
|
||
|
{
|
||
|
_videoWidth = panMain.ActualWidth;
|
||
|
_videoHeight = panMain.ActualHeight;
|
||
|
_videoWH = _videoHeight / _videoWidth;
|
||
|
barButtons.SelectedIndex = ConfigHelper.MainBarButtonSelectedIndex();
|
||
|
}
|
||
|
|
||
|
private void Button_Click(object sender, RoutedEventArgs e)
|
||
|
{
|
||
|
// await MessageManager.MessageBox("测试");
|
||
|
|
||
|
// Play("192.168.1.651");
|
||
|
_ea.GetEvent<ShowVoideInMainEvent>().Publish("192.168.1.65");
|
||
|
}
|
||
|
|
||
|
public virtual void PlayVideoReceived(string cameraIp)
|
||
|
{
|
||
|
Play(cameraIp);
|
||
|
}
|
||
|
|
||
|
private void Play(string ip)
|
||
|
{
|
||
|
var videoPlay = _videoPlayManager.GetUCVideoList()[_playerSelectIndex];
|
||
|
if (videoPlay == null)
|
||
|
{
|
||
|
MessageManager.ShowMessage("当前选中的播放器 SelectIndex=" + _playerSelectIndex.ToString(), true);
|
||
|
|
||
|
return;
|
||
|
}
|
||
|
if (!videoPlay.IsNullPlay())
|
||
|
{
|
||
|
if (videoPlay.GetCameraIp() == ip)
|
||
|
{
|
||
|
if (videoPlay.IsPlaying())
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
videoPlay.Stop();
|
||
|
Thread.Sleep(1000);
|
||
|
}
|
||
|
MonitorCamera camera = CameraManager.GetCamera(ip);
|
||
|
if (camera == null)
|
||
|
{
|
||
|
MessageManager.ShowMessage(ip + "相机不存在", true);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
bool play = videoPlay.Play(camera);
|
||
|
AddSelectVideoIndex();
|
||
|
}
|
||
|
|
||
|
public void AddSelectVideoIndex()
|
||
|
{
|
||
|
_playerSelectIndex++;
|
||
|
if (_playerSelectIndex >= _videoNumber)
|
||
|
{
|
||
|
_playerSelectIndex = 0;
|
||
|
}
|
||
|
_videoPlayManager.SetALLUnSelected();
|
||
|
var ucPlayer = _videoPlayManager.GetUCVideoList()[_playerSelectIndex];
|
||
|
if (ucPlayer != null)
|
||
|
{
|
||
|
ucPlayer.SetSelected(true);
|
||
|
if (ucPlayer.IsPlaying())
|
||
|
{
|
||
|
//MonitorCamera curCamera = ucPlayer.GetCamera();
|
||
|
var curOnvifClient = ucPlayer.GetOnvifClient();
|
||
|
_ea.GetEvent<SendOnvifClientEvent>().Publish(curOnvifClient);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
_ea.GetEvent<SendOnvifClientEvent>().Publish(null);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//窗体尺寸该表
|
||
|
private void UserControl_SizeChanged(object sender, SizeChangedEventArgs e)
|
||
|
{
|
||
|
if (_videoWH < 0) return;
|
||
|
int toSelectIndex = _barButtonSelectedIndex;
|
||
|
_barButtonSelectedIndex = -1;
|
||
|
BarButtonsSelectedChange(toSelectIndex);
|
||
|
}
|
||
|
}
|
||
|
}
|