390 lines
15 KiB
C#
390 lines
15 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Diagnostics;
|
||
using System.IO;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Threading;
|
||
using System.Threading.Tasks;
|
||
using System.Windows;
|
||
using System.Windows.Controls;
|
||
using System.Windows.Input;
|
||
using System.Windows.Interop;
|
||
using System.Xml.Linq;
|
||
using VideoSurveillanceAdapter;
|
||
using VideoSurveillanceAdapter.Model;
|
||
|
||
namespace VideoTest
|
||
{
|
||
/// <summary>
|
||
/// Interaction logic for MainWindow.xaml
|
||
/// </summary>
|
||
public partial class MainWindow : Window
|
||
{
|
||
bool isInit = false;
|
||
public MainWindow()
|
||
{
|
||
InitializeComponent();
|
||
Closed += MainWindow_Closed;
|
||
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
|
||
IntPtr hwnd = new WindowInteropHelper(this).Handle; //----this就是要获取句柄的窗体的类名;
|
||
//IntPtr hwnd1 = ((HwndSource)PresentationSource.FromVisual(uielement)).Handle; //----uielement就是要获取句柄的控件,该控件必须继承自UIElement。
|
||
}
|
||
|
||
private void MainWindow_Closed(object sender, EventArgs e)
|
||
{
|
||
if (VideoPlayer == null) return;
|
||
VideoPlayer.StopRealPlay();
|
||
VideoPlayer.LogoutCamera();
|
||
VideoPlayer.DisposeSDK();
|
||
isInit = false;
|
||
}
|
||
|
||
private VideoPlayer VideoPlayer { get; set; }
|
||
|
||
private void Login_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
try
|
||
{
|
||
if (!isInit)
|
||
isInit = VideoPlayer.InitSDK();
|
||
if (VideoPlayer == null)
|
||
{
|
||
string DVRIPAddress = textBoxIP.Text; //设备IP地址或者域名
|
||
int DVRPortNumber = int.Parse(textBoxPort.Text);//设备服务端口号
|
||
string DVRUserName = textBoxUserName.Text;//设备登录用户名
|
||
string DVRPassword = textBoxPassword.Text;//设备登录密码
|
||
VideoPlayer = new VideoPlayer();
|
||
string brandStr = cbBrand.SelectedValue.ToString();
|
||
CameraBrand brand = CameraBrand.None;
|
||
Enum.TryParse(brandStr, false, out brand);
|
||
if (brand == CameraBrand.None) return;
|
||
VideoPlayer.CameraConfigure = new CameraConfigure
|
||
{
|
||
ID = Guid.NewGuid().ToString(),
|
||
Name = "相机1",
|
||
Ip = DVRIPAddress,
|
||
Port = DVRPortNumber,
|
||
UserName = DVRUserName,
|
||
Password = DVRPassword,
|
||
IsRecordVideo = false,
|
||
VideoPath = AppDomain.CurrentDomain.BaseDirectory + @"Video\",
|
||
CapturePath = AppDomain.CurrentDomain.BaseDirectory + @"\Capture\",
|
||
CameraBrand = brand,
|
||
PlayFrame = PlayFrame.MainFrame
|
||
};
|
||
if (!string.IsNullOrWhiteSpace(cbPlayChannel.Text))
|
||
{
|
||
VideoPlayer.CameraConfigure.PlayChannel = Convert.ToInt32(cbPlayChannel.Text);
|
||
|
||
}
|
||
VideoPlayer.PlayWndHandle = ((HwndSource)PresentationSource.FromVisual(this.WinBox)).Handle;
|
||
}
|
||
Button btn = sender as Button;
|
||
if (btn.Content.ToString() == "登录")
|
||
{
|
||
bool isSuccess = VideoPlayer.LoginCamera();
|
||
LogText.Text = isSuccess ? "登录成功!" : "登录失败!";
|
||
btn.Content = isSuccess ? "登出" : "登录";
|
||
}
|
||
else
|
||
{
|
||
bool isSuccess = VideoPlayer.StopRealPlay();
|
||
LogText.Text = isSuccess ? "停止成功!" : "停止失败!";
|
||
isSuccess = VideoPlayer.LogoutCamera();
|
||
LogText.Text = isSuccess ? "登出成功!" : "登出失败!";
|
||
btn.Content = isSuccess ? "登录" : "登出";
|
||
if (isSuccess)
|
||
VideoPlayer = null;
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
|
||
MessageBox.Show(ex.ToString());
|
||
}
|
||
|
||
}
|
||
|
||
private void VideoPlay_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
try
|
||
{
|
||
if (VideoPlayer == null) return;
|
||
Button btn = sender as Button;
|
||
if (btn.Content.ToString() == "播放")
|
||
{
|
||
VideoPlayer.CameraConfigure.PlayChannel =
|
||
Convert.ToInt32(String.IsNullOrWhiteSpace(cbPlayChannel.Text) ? "0" : cbPlayChannel.Text);
|
||
var channelArr = this.channels.Text.Split(new char[] { ',', ',' }).Select(t => int.Parse(t));
|
||
if (channelArr.Count() > 0)
|
||
{
|
||
int index = 0;
|
||
IntPtr intPtrBox = VideoPlayer.PlayWndHandle = ((HwndSource)PresentationSource.FromVisual(this.WinBox)).Handle;
|
||
|
||
foreach (var item in channelArr)
|
||
{
|
||
if (index == 1)
|
||
{
|
||
intPtrBox = this.WinBox1.Handle;
|
||
}
|
||
bool isSuccess = VideoPlayer.StartRealNVRPlay(item, intPtrBox);
|
||
//VideoPlayer.StartRealPlayM4(VideoPlayer.CameraConfigure.PlayChannel, WinBox1.Handle);
|
||
if (!Directory.Exists(VideoPlayer.CameraConfigure.VideoPath))
|
||
Directory.CreateDirectory(VideoPlayer.CameraConfigure.VideoPath);
|
||
string fullName = VideoPlayer.CameraConfigure.VideoPath + DateTime.Now.ToString("yyyyMMddHHmmss") + ".mp4";
|
||
VideoPlayer.RecordVideo(fullName);
|
||
LogText.Text = isSuccess ? "播放成功!" : "播放失败!";
|
||
btn.Content = isSuccess ? "停止" : "播放";
|
||
index++;
|
||
}
|
||
}
|
||
|
||
|
||
}
|
||
else
|
||
{
|
||
VideoPlayer.StopRecordVideo();
|
||
bool isSuccess = VideoPlayer.StopRealPlay();
|
||
LogText.Text = isSuccess ? "停止成功!" : "停止失败!";
|
||
btn.Content = isSuccess ? "播放" : "停止";
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
|
||
MessageBox.Show(ex.ToString());
|
||
|
||
}
|
||
|
||
}
|
||
|
||
private void Capture_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
string filePath = VideoPlayer.CameraConfigure.CapturePath;
|
||
if (!Directory.Exists(filePath))
|
||
Directory.CreateDirectory(filePath);
|
||
var channels = this.channels.Text.Split(',');
|
||
LogText.Text = "";
|
||
foreach (var item in channels)
|
||
{
|
||
|
||
//Task.Run(() =>
|
||
//{
|
||
string fileName = VideoPlayer.CameraConfigure.Name + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + "channel" + item + ".jpg";
|
||
bool isSuccess = VideoPlayer.CaptureJPEGPicture(filePath + fileName, int.Parse(item));
|
||
Dispatcher.Invoke(() => LogText.Text += isSuccess ? "截图成功!" : "截图失败!");
|
||
//});
|
||
}
|
||
|
||
}
|
||
|
||
private void MeasureTemperature_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
if (VideoPlayer == null) return;
|
||
RstText.Text = "正在获取温度,请等待... ...";
|
||
int tNo = 0;
|
||
if (int.TryParse(cbMeasureTemperature.Text, out _))
|
||
{
|
||
tNo = Convert.ToInt32(cbMeasureTemperature.Text);
|
||
}
|
||
int pNo = Convert.ToInt32(cbPreset.Text);
|
||
Task<bool> goTask = Task.Run(() =>
|
||
{
|
||
bool isSccess = VideoPlayer.GotoPreset(pNo);
|
||
Thread.Sleep(1000);
|
||
return isSccess;
|
||
});
|
||
int channel = int.Parse(cbPlayChannel.Text);
|
||
goTask.GetAwaiter().OnCompleted(() =>
|
||
{
|
||
if (goTask.Result)
|
||
{
|
||
for (int i = 0; i < 1000; i++)
|
||
{
|
||
//Task<List<RealTimeTemperature>> task = Task.Run(() =>
|
||
//{
|
||
// return VideoPlayer.GetRealTimeTemperature(pNo, tNo, channel);
|
||
//});
|
||
|
||
List<RealTimeTemperature> tRst = VideoPlayer.GetRealTimeTemperature(pNo, tNo, channel);
|
||
StringBuilder rstSB = new StringBuilder();
|
||
foreach (var rst in tRst)
|
||
{
|
||
rstSB.Append("--------------------" + "\n");
|
||
rstSB.Append("时间:" + rst.MeasureTime.ToString("yyyy-MM-dd HH:mm:ss") + "\n");
|
||
rstSB.Append("预置点号:" + rst.PresetNo + "\n");
|
||
rstSB.Append("规则ID:" + rst.RuleID + "\n");
|
||
rstSB.Append("规则名称:" + rst.RuleName + "\n");
|
||
rstSB.Append("规则标定类型:" + rst.RuleType + "\n");
|
||
rstSB.Append("测温信息:" + rst.TemperatureValue + "(" + rst.TemperatureUnit + ")" + "\n");
|
||
rstSB.Append("--------------------");
|
||
}
|
||
|
||
Dispatcher.Invoke(() =>
|
||
{
|
||
RstText.Text = rstSB.ToString();
|
||
Debug.WriteLine(rstSB.ToString());
|
||
|
||
});
|
||
//task.GetAwaiter().OnCompleted(() =>
|
||
//{
|
||
|
||
//});
|
||
Task.Delay(1000).Wait();
|
||
}
|
||
|
||
}
|
||
});
|
||
}
|
||
|
||
//private void cbPreset_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||
//{
|
||
// if (VideoPlayer == null) return;
|
||
|
||
// int pNo = Convert.ToInt32(cbPreset.Text);
|
||
// VideoPlayer.GotoPreset(pNo);
|
||
//}
|
||
#region
|
||
private void Up_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
|
||
{
|
||
PTZControl(PTZCategory.Up, 0);
|
||
}
|
||
|
||
private void Up_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
|
||
{
|
||
PTZControl(PTZCategory.Up, 1);
|
||
}
|
||
|
||
private void Down_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
|
||
{
|
||
PTZControl(PTZCategory.Down, 0);
|
||
}
|
||
|
||
private void Down_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
|
||
{
|
||
PTZControl(PTZCategory.Down, 1);
|
||
}
|
||
|
||
private void Left_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
|
||
{
|
||
PTZControl(PTZCategory.Left, 0);
|
||
}
|
||
|
||
private void Left_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
|
||
{
|
||
PTZControl(PTZCategory.Left, 1);
|
||
}
|
||
|
||
private void Right_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
|
||
{
|
||
PTZControl(PTZCategory.Right, 0);
|
||
}
|
||
|
||
private void Right_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
|
||
{
|
||
PTZControl(PTZCategory.Right, 1);
|
||
}
|
||
private void PTZControl(PTZCategory category, uint dwStop)
|
||
{
|
||
if (VideoPlayer == null) return;
|
||
VideoPlayer.PTZControl(category, dwStop);
|
||
}
|
||
#endregion
|
||
|
||
|
||
private void TurnTopreset_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
if (VideoPlayer == null) return;
|
||
|
||
int pNo = Convert.ToInt32(cbPreset.Text);
|
||
var success = VideoPlayer.GotoPreset(pNo);
|
||
Console.WriteLine(success);
|
||
}
|
||
|
||
private void Setpreset_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
if (VideoPlayer == null) return;
|
||
|
||
int pNo = Convert.ToInt32(cbPreset.Text);
|
||
int channel = int.Parse(cbPlayChannel.Text);
|
||
var success = VideoPlayer.SetPreset(pNo, channel, "测试预置位名");
|
||
Console.WriteLine(success);
|
||
}
|
||
/// <summary>
|
||
///
|
||
/// </summary>
|
||
/// <param name="sender"></param>
|
||
/// <param name="e"></param>
|
||
private void DownloadPlayback_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
if (VideoPlayer == null) return;
|
||
|
||
bool isSccess = VideoPlayer.DownloadFileByTime(Path.GetFullPath("./video/video.mp4"),
|
||
DateTime.Now - TimeSpan.FromMinutes(120),
|
||
DateTime.Now - TimeSpan.FromMinutes(18),
|
||
new DownloadFileCallBack(arg =>
|
||
{
|
||
Debug.WriteLine("Sccess");
|
||
}), int.Parse(cbPlayChannel.Text));
|
||
Dispatcher.Invoke(() =>
|
||
{
|
||
RstText.Text = isSccess.ToString();
|
||
});
|
||
}
|
||
|
||
private void Playbackt_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
//VideoPlayer.st
|
||
try
|
||
{
|
||
var channelArr = this.channels.Text.Split(new char[] { ',', ',' }).Select(t => int.Parse(t));
|
||
if (channelArr.Count() > 0)
|
||
{
|
||
int index = 0;
|
||
IntPtr intPtrBox = ((HwndSource)PresentationSource.FromVisual(this.WinBox)).Handle;//.Handle;
|
||
|
||
foreach (var item in channelArr)
|
||
{
|
||
if (index == 1)
|
||
{
|
||
intPtrBox = this.WinBox1.Handle;
|
||
}
|
||
var startDate = DateTime.Parse(startTime.Text);
|
||
var endDate = DateTime.Parse(endTime.Text);
|
||
|
||
bool isSuccess = VideoPlayer.StartPlayBackByTime(startDate, endDate, item, intPtrBox);
|
||
|
||
LogText.Text = isSuccess ? "播放成功!" : "播放失败!";
|
||
|
||
index++;
|
||
}
|
||
}
|
||
|
||
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
|
||
MessageBox.Show(ex.Message);
|
||
}
|
||
}
|
||
|
||
private void StartRealPlayM4_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
VideoPlayer.CameraConfigure.PlayChannel = Convert.ToInt32(cbPlayChannel.Text);
|
||
bool isSuccess = VideoPlayer.StartRealPlayM4(VideoPlayer.CameraConfigure.PlayChannel, WinBox1.Handle);
|
||
}
|
||
|
||
private void ShowOSD_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
VideoPlayer.ShowOSDInfo(true);
|
||
}
|
||
|
||
private void CloseOSD_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
VideoPlayer.ShowOSDInfo(false);
|
||
|
||
}
|
||
}
|
||
} |