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 { /// /// Interaction logic for MainWindow.xaml /// 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 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> task = Task.Run(() => //{ // return VideoPlayer.GetRealTimeTemperature(pNo, tNo, channel); //}); List 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); } /// /// /// /// /// 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); } } }