Exemple #1
0
        public List <LiveVideoStream> GetStreamLayout(int resolutionWidth, int resolutionHeight)
        {
            var viewFramesVisible =
                ViewFrameList.Where(viewFrame => viewFrame.IsOpened && viewFrame.Visibility == Visibility.Visible);

            var viewFramesByDesending = viewFramesVisible.OrderBy(viewFrame => viewFrame.ViewOrder);

            var orderViewFrames = viewFramesByDesending.ToList();

            List <LiveVideoStream> liveVideoStreamInfos = new List <LiveVideoStream>();


            foreach (var orderViewFrame in orderViewFrames)
            {
                LiveVideoStream newLiveVideoStreamInfo = new LiveVideoStream();
                RefreshLiveLayout(ref newLiveVideoStreamInfo, orderViewFrame, resolutionWidth, resolutionHeight);
                liveVideoStreamInfos.Add(newLiveVideoStreamInfo);
            }

            if (liveVideoStreamInfos.Count >= 5)
            {
                Log.Logger.Debug($"the number of recording video is {liveVideoStreamInfos.Count}");
                int height = liveVideoStreamInfos[0].Height;
                int count  = liveVideoStreamInfos.Count(stream => stream.Height == height);
                if (count >= 5)
                {
                    int suitHeight = (int)(liveVideoStreamInfos[0].Width * 0.5625);

                    Log.Logger.Debug($"average mode of recording {liveVideoStreamInfos.Count} videos");
                    int extraY = resolutionHeight / 2 - suitHeight;


                    for (int i = 0; i < count; i++)
                    {
                        liveVideoStreamInfos[i].Height = suitHeight;

                        if (liveVideoStreamInfos[i].Y == 0)
                        {
                            liveVideoStreamInfos[i].Y += extraY;
                        }
                        else
                        {
                            liveVideoStreamInfos[i].Y = resolutionHeight / 2;
                        }
                    }

                    //foreach (var item in liveVideoStreamInfos.Where(stream => stream.Y != 0).ToList())
                    //{
                    //    item.Y -= extraY;
                    //}

                    //foreach (var item in liveVideoStreamInfos.Where(stream => stream.Y == 0).ToList())
                    //{
                    //    item.Y += extraY;
                    //}
                }
            }

            return(liveVideoStreamInfos);
        }
Exemple #2
0
        private void RefreshLiveLayout(ref LiveVideoStream liveVideoStreamInfo, ViewFrame viewFrame,
                                       int resolutionWidth, int resolutionHeight)
        {
            liveVideoStreamInfo.Handle = (uint)viewFrame.Hwnd.ToInt32();

            liveVideoStreamInfo.X     = (int)((viewFrame.Column / Columns) * resolutionWidth);
            liveVideoStreamInfo.Width = (int)((viewFrame.ColumnSpan / Columns) * resolutionWidth);

            liveVideoStreamInfo.Y      = (int)((viewFrame.Row / Rows) * resolutionHeight);
            liveVideoStreamInfo.Height = (int)((viewFrame.RowSpan / Rows) * resolutionHeight - 0.5);
        }
        public List <LiveVideoStream> GetStreamLayout(int resolutionWidth, int resolutionHeight)
        {
            var viewFramesVisible =
                ViewFrameList.Where(viewFrame => viewFrame.IsOpened && viewFrame.Visibility == Visibility.Visible);

            var viewFramesByDesending = viewFramesVisible.OrderBy(viewFrame => viewFrame.ViewOrder);

            var orderViewFrames = viewFramesByDesending.ToList();

            List <LiveVideoStream> liveVideoStreamInfos = new List <LiveVideoStream>();


            foreach (var orderViewFrame in orderViewFrames)
            {
                LiveVideoStream newLiveVideoStreamInfo = new LiveVideoStream();
                RefreshLiveLayout(ref newLiveVideoStreamInfo, orderViewFrame, resolutionWidth, resolutionHeight);
                liveVideoStreamInfos.Add(newLiveVideoStreamInfo);
            }

            return(liveVideoStreamInfos);
        }