Exemplo n.º 1
0
        /// <summary>
        /// 暂停播放
        /// </summary>
        /// <param name="index"></param>
        private void Pause(int index)
        {
            Border          border = GridHelpers.GetBorderByTag(this.gridVideo.Children, index);
            CameraPanelItem item   = border.DataContext as CameraPanelItem;

            item.GetPlayView().Pause();
        }
Exemplo n.º 2
0
        /// <summary>
        /// 给对应 Border 放置监控,查看是否已有,有就停止
        /// </summary>
        /// <param name="border"></param>
        /// <param name="panelItem"></param>
        public static void SetCameraOnBorder(Border border, CameraPanelItem panelItem)
        {
            if (border.DataContext is CameraPanelItem oldItem)
            {
                oldItem.GetPlayView().Stop();
                border.DataContext = null;
                border.Child       = null;
            }

            var channel = panelItem.GetPlayView();

            border.DataContext = panelItem;

            var winFormHost = new WindowsFormsHost();
            var playPanle   = new System.Windows.Forms.Panel();

            winFormHost.Child = playPanle;
            border.Background = Brushes.Gray;
            border.Child      = winFormHost;
            playPanle.Controls.Clear();
            channel.OnPlayError += (s, e) =>
            {
                var log = NLog.LogManager.GetCurrentClassLogger();
                log.Error(e.ErrorMessage + e.Code);
            };
            if (channel.Playing)
            {
                channel.Stop();
            }
            channel.Play(winFormHost.Child);
        }
Exemplo n.º 3
0
        CameraPanelItem singleOldItem = null;  //全屏播放的视频信息
        /// <summary>
        /// 双击全屏播放视频
        /// </summary>
        /// <param name="index">视频索引</param>
        private void SetSingle(int index)
        {
            if (!isSinglePlay)
            {
                var rows = this.gridVideo.RowDefinitions.Count;
                var cols = this.gridVideo.ColumnDefinitions.Count;
                foreach (UIElement item in this.gridVideo.Children)
                {
                    item.Visibility = Visibility.Hidden;
                }

                singleBorder            = GridHelpers.GetBorderByTag(this.gridVideo.Children, index);
                singleBorder.Visibility = Visibility.Visible;
                singleRowSpan           = (int)singleBorder.GetValue(Grid.RowSpanProperty);
                singleRow      = (int)singleBorder.GetValue(Grid.RowProperty);
                singleColsSpan = (int)singleBorder.GetValue(Grid.ColumnSpanProperty);
                singleCol      = (int)singleBorder.GetValue(Grid.ColumnProperty);

                // 视频源全部换为主码流
                singleOldItem = singleBorder.DataContext as CameraPanelItem;
                CameraPanelItem newItem = singleOldItem.Clone() as CameraPanelItem;
                if (newItem.PlayType == PlayContentType.One && newItem.Camera.StreamType == 1)
                {
                    singleOldItem.GetPlayView().Stop();
                    newItem.Camera.StreamType = 0;
                    changeStream = true;
                }
                if (newItem.PlayType == PlayContentType.Group)
                {
                    for (int i = 0; i < newItem.CameraGroup.Items.Count; i++)
                    {
                        if (newItem.CameraGroup.Items[i].StreamType == 1)
                        {
                            singleOldItem.GetPlayView().Stop();
                            newItem.CameraGroup.Items[i].StreamType = 0;
                            changeStream = true;
                        }
                    }
                }
                if (changeStream)
                {
                    GridHelpers.SetCameraOnBorder(singleBorder, newItem);
                }

                singleBorder.SetValue(Grid.RowProperty, 0);
                singleBorder.SetValue(Grid.ColumnProperty, 0);
                singleBorder.SetValue(Grid.ColumnSpanProperty, cols);
                singleBorder.SetValue(Grid.RowSpanProperty, rows);

                isSinglePlay = true;
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// 播放视频流等
        /// </summary>
        /// <param name="border"></param>
        /// <param name="panelItem"></param>
        public static void SetBorderChildByVLC(Border border, CameraPanelItem panelItem)
        {
            if (border.DataContext is CameraPanelItem oldItem)
            {
                border.DataContext = null;
                border.Child       = null;
            }
            border.DataContext = panelItem;

            if (UseWPFControl)
            {
                Vlc.DotNet.Wpf.VlcControl vlcControl = new Vlc.DotNet.Wpf.VlcControl();
                vlcControl.SourceProvider.CreatePlayer(libDirectory);

                if (panelItem.RtspStrs.Count > 1)
                {
                    VLCGroup vlcGroup = new VLCGroup(1, 15);
                    vlcGroup.PlayOnWPF(vlcControl, panelItem.RtspStrs);
                }
                else
                {
                    vlcControl.SourceProvider.MediaPlayer.Play(new Uri(panelItem.RtspStrs[0]));
                }
                border.Child = vlcControl;
            }
            else
            {
                VlcControl vlcControl = new VlcControl();
                string     ratio      = border.ActualWidth + ":" + border.ActualHeight;
                vlcControl.BeginInit();
                vlcControl.VlcLibDirectory = libDirectory;
                vlcControl.EndInit();
                WindowsFormsHost windowsFormsHost = new WindowsFormsHost
                {
                    Child = vlcControl
                };
                border.Child = windowsFormsHost;
                vlcControl.Video.FullScreen  = true;
                vlcControl.Video.AspectRatio = ratio;

                if (panelItem.RtspStrs.Count > 1)
                {
                    VLCGroup vlcGroup = new VLCGroup(1, 15);
                    vlcGroup.Play(vlcControl, panelItem.RtspStrs);
                }
                else
                {
                    vlcControl.Play(new Uri(panelItem.RtspStrs[0]));
                }
            }
        }
Exemplo n.º 5
0
        bool changeStream = false;  // 是否需要更改码流
        /// <summary>
        /// 双击全屏播放视频
        /// </summary>
        /// <param name="index">视频索引</param>
        private void SetSingle(int index)
        {
            if (!isSinglePlay)
            {
                var rows = this.gridVideo.RowDefinitions.Count;
                var cols = this.gridVideo.ColumnDefinitions.Count;
                foreach (UIElement item in this.gridVideo.Children)
                {
                    item.Visibility = Visibility.Hidden;
                }

                newBorder            = GridHelpers.CreateBorder();
                newBorder.Visibility = Visibility.Visible;
                Border singleBorder = GridHelpers.GetBorderByTag(this.gridVideo.Children, index);

                // 视频源全部换为主码流
                CameraPanelItem singleOldItem = singleBorder.DataContext as CameraPanelItem;
                CameraPanelItem newItem       = singleOldItem.Clone() as CameraPanelItem;
                if (newItem.PlayType == PlayContentType.One && newItem.Camera.StreamType == 1)
                {
                    newItem.RtspStrs[0]       = newItem.RtspStrs[0].Replace("/sub/", "/main/");
                    newItem.Camera.StreamType = 0;
                    changeStream = true;
                }
                if (newItem.PlayType == PlayContentType.Group)
                {
                    for (int i = 0; i < newItem.CameraGroup.Items.Count; i++)
                    {
                        if (newItem.CameraGroup.Items[i].StreamType == 1)
                        {
                            newItem.RtspStrs[i] = newItem.RtspStrs[i].Replace("/sub/", "/main/");
                            newItem.CameraGroup.Items[i].StreamType = 0;
                            changeStream = true;
                        }
                    }
                }
                newBorder.SetValue(Grid.RowProperty, 0);
                newBorder.SetValue(Grid.ColumnProperty, 0);
                newBorder.SetValue(Grid.ColumnSpanProperty, cols);
                newBorder.SetValue(Grid.RowSpanProperty, rows);
                this.gridVideo.Children.Add(newBorder);
                if (changeStream)
                {
                    GridHelpers.SetBorderChildByVLC(newBorder, newItem);
                }

                isSinglePlay = true;
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// 播放命令操作
        /// </summary>
        /// <param name="tvConfig"></param>
        public void PlayOnTV(TvConfig tvConfig)
        {
            // 处理数据对象,转换为封装的 Camera 等对象
            CameraPanel cameraPanel = new CameraPanel {
                LayoutInfo = tvConfig.LayoutInfo
            };

            if (tvConfig.MonitorInfo != null)
            {
                List <int> indexs = tvConfig.MonitorInfo.Select(t => t.Index).Distinct().ToList();
                foreach (int index in indexs)
                {
                    List <MonitorInfo> monitors  = tvConfig.MonitorInfo.Where(t => t.Index == index).ToList();
                    CameraPanelItem    panelItem = new CameraPanelItem {
                        Index = index, RtspStrs = new List <string>(), RtmpStrs = new List <string>()
                    };
                    if (monitors.Count > 1)
                    {
                        CameraGroup cameraGroup = new CameraGroup
                        {
                            Interval = monitors[0].TimeInterval
                        };
                        foreach (var monitor in monitors)
                        {
                            DVR dvr = new DVR()
                            {
                                IP       = monitor.Ip,
                                Port     = monitor.AdminPort,
                                UserName = monitor.User,
                                Password = monitor.PassWord,
                                Id       = monitor.Id
                            };
                            Camera camera = new Camera
                            {
                                StreamType = monitor.StreamType,
                                DVR        = dvr,
                                Number     = monitor.Channel
                            };
                            cameraGroup.Items.Add(camera);
                            panelItem.RtspStrs.Add(monitor.Rtsp);
                            panelItem.RtmpStrs.Add(monitor.Rtmp);
                        }

                        panelItem.CameraGroup = cameraGroup;
                        panelItem.Flag        = monitors[0].Flag;
                        panelItem.PlayType    = PlayContentType.Group;
                    }
                    else
                    {
                        MonitorInfo monitor = monitors[0];
                        DVR         dvr     = new DVR()
                        {
                            IP       = monitor.Ip,
                            Port     = monitor.AdminPort,
                            UserName = monitor.User,
                            Password = monitor.PassWord,
                            Id       = monitor.Id
                        };

                        Camera camera = new Camera()
                        {
                            DVR        = dvr,
                            StreamType = monitor.StreamType,
                            Number     = monitor.Channel
                        };
                        panelItem.RtspStrs.Add(monitor.Rtsp);
                        panelItem.RtmpStrs.Add(monitor.Rtmp);
                        panelItem.Camera   = camera;
                        panelItem.Flag     = monitor.Flag;
                        panelItem.PlayType = PlayContentType.One;
                    }
                    cameraPanel.Cameras.Add(panelItem);
                }
            }

            gridVideo.SetValue(GridHelpers.CamearPanelProperty, cameraPanel);
        }
Exemplo n.º 7
0
        /// <summary>
        /// 播放命令操作
        /// </summary>
        /// <param name="tvConfig"></param>
        public void PlayOnTV(TvConfig tvConfig)
        {
            // 当布局变化时视频信息会变,清楚全部的 CameraPanelItem 信息
            if (tvConfig.LayoutInfo != null)
            {
                this.cameras = new Dictionary <int, CameraPanelItem>();
            }

            // 处理数据对象,转换为封装的 Camera 等对象
            CameraPanel cameraPanel = new CameraPanel {
                LayoutInfo = tvConfig.LayoutInfo
            };

            if (tvConfig.MonitorInfo != null)
            {
                List <int> indexs = tvConfig.MonitorInfo.Select(t => t.Index).Distinct().ToList();
                foreach (int index in indexs)
                {
                    List <MonitorInfo> monitors  = tvConfig.MonitorInfo.Where(t => t.Index == index).ToList();
                    CameraPanelItem    panelItem = new CameraPanelItem {
                        Index = index
                    };
                    if (monitors.Count > 1)
                    {
                        CameraGroup cameraGroup = new CameraGroup
                        {
                            Interval = monitors[0].TimeInterval
                        };
                        foreach (var monitor in monitors)
                        {
                            DVR dvr = new DVR()
                            {
                                IP       = monitor.Ip,
                                Port     = monitor.AdminPort,
                                UserName = monitor.User,
                                Password = monitor.PassWord,
                                Id       = monitor.Id
                            };
                            Camera camera = new Camera
                            {
                                StreamType = monitor.StreamType,
                                DVR        = dvr,
                                Number     = monitor.Channel
                            };
                            cameraGroup.Items.Add(camera);
                        }

                        panelItem.CameraGroup = cameraGroup;
                        panelItem.Flag        = monitors[0].Flag;
                        panelItem.PlayType    = PlayContentType.Group;
                    }
                    else
                    {
                        MonitorInfo monitor = monitors[0];
                        DVR         dvr     = new DVR()
                        {
                            IP       = monitor.Ip,
                            Port     = monitor.AdminPort,
                            UserName = monitor.User,
                            Password = monitor.PassWord,
                            Id       = monitor.Id
                        };

                        Camera camera = new Camera()
                        {
                            DVR        = dvr,
                            StreamType = monitor.StreamType,
                            Number     = monitor.Channel
                        };
                        panelItem.Camera   = camera;
                        panelItem.Flag     = monitor.Flag;
                        panelItem.PlayType = PlayContentType.One;

                        if (monitor.Ip == null && monitor.User == null)
                        {
                            panelItem.Flag = 0;
                        }
                    }
                    cameraPanel.Cameras.Add(panelItem);

                    if (this.cameras.ContainsKey(index))
                    {
                        this.cameras.Remove(index);
                    }
                    this.cameras.Add(index, panelItem);
                }

                // 登录各个设备,为后面播放,
                // 这里再返回赋值,因为每次都需要登录信息,否则失败
                foreach (var item2 in cameraPanel.Cameras)
                {
                    if (item2.Camera != null)
                    {
                        item2.Camera.DVR.Connection(false);
                    }
                    else if (item2.CameraGroup != null)
                    {
                        foreach (var item in item2.CameraGroup.Items)
                        {
                            item.DVR.Connection(false);
                        }
                    }
                }
            }

            this.gridVideo.SetValue(GridHelpers.CamearPanelProperty, cameraPanel);
        }