public bool Stop()
        {
            StopScript();

            if (!ServiceStarted)
            {
                return(false);
            }

            _virtualDisplay?.Release();
            _virtualDisplay = null;

            _imgListener?.Dispose();
            _imgListener = null;

            _imageReader?.Close();
            _imageReader = null;

            _mediaProjection?.Stop();
            _mediaProjection = null;

            ScreenshotManager.ReleaseMemory();
            ImageLocator.ClearCache();

            _windowManager.RemoveView(_layout);
            ServiceStarted = false;

            HideForegroundNotification();

            return(true);
        }
示例#2
0
        public void StartRecording()
        {
            var mManager = MainActivity.CurrentActivity.GetSystemService(Context.MediaProjectionService) as MediaProjectionManager;

            mediaProjection = mManager.GetMediaProjection((int)MainActivity.ReturnResultFromPermission, MainActivity.ReturnDataFromPermission);
            DisplayManager dManager       = GetSystemService(Context.DisplayService) as DisplayManager;
            var            displayMetrics = new DisplayMetrics();

            dManager.GetDisplay(0).GetMetrics(displayMetrics);

            mediaRecorder = new MediaRecorder();
            mediaRecorder.SetAudioSource(AudioSource.Mic);
            mediaRecorder.SetVideoSource(VideoSource.Surface);

            var profile = CamcorderProfile.Get(CamcorderQuality.High);

            profile.FileFormat       = OutputFormat.Mpeg4;
            profile.VideoFrameHeight = displayMetrics.HeightPixels;
            profile.VideoFrameWidth  = displayMetrics.WidthPixels;

            mediaRecorder.SetProfile(profile);
            mediaRecorder.SetOutputFile($"{Android.OS.Environment.ExternalStorageDirectory}/demovideo.mp4");
            mediaRecorder.Prepare();

            recordingDisplay = mediaProjection.CreateVirtualDisplay("Rec display", displayMetrics.WidthPixels, displayMetrics.HeightPixels,
                                                                    (int)displayMetrics.Density, Android.Views.DisplayFlags.Round,
                                                                    mediaRecorder.Surface, null, null);

            mediaRecorder.Start();
        }
        /// <summary>
        /// 初始化截屏
        /// </summary>
        /// <param name="width"></param>
        /// <param name="height"></param>
        /// <param name="dpi"></param>
        private static void InitVirtualDisplay(int width, int height, int dpi)
        {
            var rgbx = (ImageFormatType)Format.Rgbx8888;

            _imageReader = ImageReader.NewInstance(width, height, rgbx, ImageCacheNum);

            _virtualDisplay = _mediaProjection.CreateVirtualDisplay(Tag, width, height, dpi, DisplayFlags.Round, _imageReader.Surface, null, null);
        }
 private void SetUpVirtualDisplay()
 {
     Log.Info(TAG, "Setting up a VirtualDisplay: " + surfaceView.Width + "x" + surfaceView.Height + " (" + screenDensity + ")");
     virtualDisplay = mediaProjection.CreateVirtualDisplay("ScreenCapture",
                                                           surfaceView.Width, surfaceView.Height, screenDensity,
                                                           (DisplayFlags)VirtualDisplayFlags.AutoMirror, surface, null, null);
     buttonToggle.SetText(Resource.String.stop);
 }
示例#5
0
 /// <summary>
 /// 释放截图。
 /// </summary>
 public void TearDownMediaProjection()
 {
     _mediaProjection?.Stop();
     _mediaProjection = null;
     _virtualDisplay?.Release();
     _virtualDisplay = null;
     _imageReader?.Close();
     _imageReader = null;
 }
示例#6
0
        /// <summary>
        /// 初始化截屏
        /// </summary>
        /// <param name="width"></param>
        /// <param name="height"></param>
        /// <param name="dpi"></param>
        private void InitVirtualDisplay(int width, int height, int dpi)
        {
            var rgbx = (ImageFormatType)Format.Rgba8888;

            _imageReader = NewInstance(width, height, rgbx, ImageCacheNum);

            _virtualDisplay = _mediaProjection.CreateVirtualDisplay(Tag, width, height, dpi, DisplayFlags.Round, _imageReader.Surface, null, null);

            _imageReader.SetOnImageAvailableListener(this, _handler);
        }
示例#7
0
        private void SetUpVirtualDisplay()
        {
            StartRecording();

            virtualDisplay = mediaProjection.CreateVirtualDisplay("ScreenCapture",
                                                                  surfaceView.Width, surfaceView.Height, screenDensity,
                                                                  (DisplayFlags)VirtualDisplayFlags.AutoMirror, mMediaRecorder.Surface, null, null);

            //buttonToggle.SetText(Resource.String.stop);
            mMediaRecorder.Start();
        }
        private void StopScreenCapture()
        {
            if (virtualDisplay == null)
            {
                return;
            }

            virtualDisplay.Release();
            virtualDisplay = null;
            buttonToggle.SetText(Resource.String.start);
        }
示例#9
0
 protected override void OnDestroy()
 {
     base.OnDestroy();
     mMediaRecorder.Release();
     mMediaRecorder.Dispose();
     mMediaRecorder = null;
     mediaProjection.Stop();
     mediaProjection = null;
     virtualDisplay.Release();
     virtualDisplay = null;
 }
示例#10
0
        private void SetUpVirtualDisplay()
        {
            try
            {
                StartRecordingObject();

                virtualDisplay = mediaProjection.CreateVirtualDisplay("ScreenCapture",
                                                                      WidthPixels, HeightPixels, DensityDpi,
                                                                      (DisplayFlags)VirtualDisplayFlags.AutoMirror, mMediaRecorder.Surface, null, null);
                mMediaRecorder.Start();
            }
            catch (Exception ex)
            {
            }
        }
示例#11
0
        public MediaProjectionScreenshotService(MediaProjection MediaProjection, DisplayMetrics Metrics)
        {
            _mediaProjection = MediaProjection;

            var screenDensity = (int)Metrics.DensityDpi;
            var screenWidth   = Metrics.WidthPixels;
            var screenHeight  = Metrics.HeightPixels;

            _convertedMat      = new Mat();
            _colorCorrectedMat = new Mat();

            _imageReader = ImageReader.NewInstance(screenWidth, screenHeight, (ImageFormatType)1, 2);

            _virtualDisplay = _mediaProjection.CreateVirtualDisplay("ScreenCapture",
                                                                    screenWidth, screenHeight, screenDensity,
                                                                    DisplayFlags.None, _imageReader.Surface, null, null);
        }
示例#12
0
 private void StopScreenCapture()
 {
     try
     {
         if (virtualDisplay == null)
         {
             return;
         }
         //buttonToggle.SetText(Resource.String.start);
         mMediaRecorder.Stop();
         mMediaRecorder.Release();
         virtualDisplay.Release();
         virtualDisplay = null;
     }
     catch (Exception e)
     {
         mMediaRecorder.Release();
         virtualDisplay.Release();
         virtualDisplay = null;
     }
 }
示例#13
0
        public static void ActivityResult(int requestCode, Result resultCode, Intent data)
        {
            if (requestCode == REQUEST_RECORD)
            {
                if (resultCode == Result.Ok)
                {
                    mediaProjection = mediaProjectionManager.GetMediaProjection((int)resultCode, data);
                    mediaProjection.RegisterCallback(new MediaProjectionCallback(), null);

                    // DisplayManager.VirtualDisplayFlagAutoMirror,
                    virtualDisplay = mediaProjection.CreateVirtualDisplay("MainActivity", DISPLAY_WIDTH, DISPLAY_HEIGHT, (int)screenDensity,
                                                                          DisplayFlags.Presentation, mediaRecorder.Surface, null, null);

                    mediaRecorder.Start();
                }
                else
                {
                    System.Diagnostics.Debug.WriteLine("!!Result Code Is" + resultCode + "!!");
                }
            }
        }
示例#14
0
        public void Dispose()
        {
            _convertedMat.Release();
            _colorCorrectedMat.Release();

            _convertedMat = _colorCorrectedMat = null;

            _lastestPattern?.Dispose();
            _lastestPattern = null;

            _readBitmap?.Recycle();
            _readBitmap = null;

            _virtualDisplay?.Release();
            _virtualDisplay = null;

            _imageReader?.Close();
            _imageReader = null;

            _mediaProjection?.Stop();
            _mediaProjection = null;
        }