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); }
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); }
/// <summary> /// 释放截图。 /// </summary> public void TearDownMediaProjection() { _mediaProjection?.Stop(); _mediaProjection = null; _virtualDisplay?.Release(); _virtualDisplay = null; _imageReader?.Close(); _imageReader = null; }
/// <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); }
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); }
protected override void OnDestroy() { base.OnDestroy(); mMediaRecorder.Release(); mMediaRecorder.Dispose(); mMediaRecorder = null; mediaProjection.Stop(); mediaProjection = null; virtualDisplay.Release(); virtualDisplay = null; }
private void SetUpVirtualDisplay() { try { StartRecordingObject(); virtualDisplay = mediaProjection.CreateVirtualDisplay("ScreenCapture", WidthPixels, HeightPixels, DensityDpi, (DisplayFlags)VirtualDisplayFlags.AutoMirror, mMediaRecorder.Surface, null, null); mMediaRecorder.Start(); } catch (Exception ex) { } }
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); }
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; } }
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 + "!!"); } } }
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; }