Ejemplo n.º 1
0
        public async Task SendScreenCapture(byte[] encodedImageBytes, int left, int top, int width, int height)
        {
            PendingSentFrames.Enqueue(DateTimeOffset.Now);

            for (var i = 0; i < encodedImageBytes.Length; i += 50_000)
            {
                var dto = new CaptureFrameDto()
                {
                    Left         = left,
                    Top          = top,
                    Width        = width,
                    Height       = height,
                    EndOfFrame   = false,
                    ImageBytes   = encodedImageBytes.Skip(i).Take(50_000).ToArray(),
                    ImageQuality = imageQuality
                };

                await SendToViewer(() => RtcSession.SendDto(dto),
                                   () => CasterSocket.SendDtoToViewer(dto, ViewerConnectionID));
            }

            var endOfFrameDto = new CaptureFrameDto()
            {
                Left         = left,
                Top          = top,
                Width        = width,
                Height       = height,
                EndOfFrame   = true,
                ImageQuality = imageQuality
            };

            await SendToViewer(() => RtcSession.SendDto(endOfFrameDto),
                               () => CasterSocket.SendDtoToViewer(endOfFrameDto, ViewerConnectionID));
        }
Ejemplo n.º 2
0
        public async Task SendScreenCapture(IEnumerable <CaptureFrame> screenFrame)
        {
            PendingSentFrames.Enqueue(DateTimeOffset.Now);

            foreach (var frame in screenFrame)
            {
                var left   = frame.Left;
                var top    = frame.Top;
                var width  = frame.Width;
                var height = frame.Height;

                for (var i = 0; i < frame.EncodedImageBytes.Length; i += 50_000)
                {
                    var dto = new CaptureFrameDto()
                    {
                        Left         = left,
                        Top          = top,
                        Width        = width,
                        Height       = height,
                        EndOfFrame   = false,
                        ImageBytes   = frame.EncodedImageBytes.Skip(i).Take(50_000).ToArray(),
                        ImageQuality = _imageQuality,
                        EndOfCapture = false
                    };

                    await SendToViewer(() => RtcSession.SendDto(dto),
                                       () => CasterSocket.SendDtoToViewer(dto, ViewerConnectionID));
                }

                var endOfFrameDto = new CaptureFrameDto()
                {
                    Left         = left,
                    Top          = top,
                    Width        = width,
                    Height       = height,
                    EndOfFrame   = true,
                    ImageQuality = _imageQuality,
                    EndOfCapture = false
                };

                await SendToViewer(() => RtcSession.SendDto(endOfFrameDto),
                                   () => CasterSocket.SendDtoToViewer(endOfFrameDto, ViewerConnectionID));
            }

            var endofCaptureDto = new CaptureFrameDto()
            {
                Left         = 0,
                Top          = 0,
                Width        = 0,
                Height       = 0,
                EndOfFrame   = true,
                ImageQuality = _imageQuality,
                EndOfCapture = true
            };

            await SendToViewer(() => RtcSession.SendDto(endofCaptureDto),
                               () => CasterSocket.SendDtoToViewer(endofCaptureDto, ViewerConnectionID));
        }