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(); }
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 bool Start(Intent MediaProjectionToken = null) { if (ServiceStarted) { return(false); } if (MediaProjectionToken != null) { _mediaProjection = MediaProjectionManager.GetMediaProjection((int)Result.Ok, MediaProjectionToken); } _imageReader = ImageReader.NewInstance(_screenWidth, _screenHeight, (ImageFormatType)1, 2); _imgListener = new ImgListener(_imageReader); _imageReader.SetOnImageAvailableListener(_imgListener, null); SetupVirtualDisplay(); _windowManager.AddView(_layout, _layoutParams); ServiceStarted = true; ShowForegroundNotification(); return(true); }
public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId) { if (intent == null) { return(StartCommandResult.NotSticky); } if (intent.Action == ACTION_STOP) { Stop(); return(StartCommandResult.NotSticky); } else if (intent.Action == ACTION_START) { string host = intent.GetStringExtra(EXTRA_HOST); int port = intent.GetIntExtra(EXTRA_PORT, 1704); EBroadcastMode broadcastMode = (EBroadcastMode)intent.GetIntExtra(EXTRA_BROADCAST_MODE, (int)EBroadcastMode.Media); Intent stopIntent = new Intent(this, typeof(SnapclientService)); stopIntent.SetAction(ACTION_STOP); PendingIntent PiStop = PendingIntent.GetService(this, 0, stopIntent, 0); NotificationCompat.Builder builder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID) .SetSmallIcon(Resource.Drawable.ic_media_play) .SetTicker("Snap.Net.Broadcast started") .SetContentTitle("Snap.Net Broadcast") .SetContentText("Snap.Net.Broadcast is running...") .SetContentInfo(string.Format("{0}:{1}", host, port)) .SetStyle(new NotificationCompat.BigTextStyle().BigText("Snap.Net.Broadcast is running...")) .AddAction(Resource.Drawable.ic_media_stop, "Stop", PiStop); Intent resultIntent = new Intent(this, typeof(MainActivity)); TaskStackBuilder stackBuilder = TaskStackBuilder.Create(this); stackBuilder.AddParentStack(Class.FromType(typeof(MainActivity))); stackBuilder.AddNextIntent(resultIntent); PendingIntent resultPendingIntent = stackBuilder.GetPendingIntent( 0, PendingIntentFlags.UpdateCurrent ); builder.SetContentIntent(resultPendingIntent); Notification notification = builder.Build(); StartForeground(NOTIFICATION_CHANNEL, notification); m_MediaProjection = m_MediaProjectionManager.GetMediaProjection((int)Result.Ok, intent.GetParcelableExtra(EXTRA_RESULT_DATA) as Intent); _Start(host, port, broadcastMode); return(StartCommandResult.Sticky); } return(StartCommandResult.NotSticky); }
public void Dispose() { _mediaProjection?.Stop(); _mediaProjection = null; _virtualDisplay?.Release(); _imageReader?.Close(); _orientationEventListener?.Dispose(); }
private void TearDownMediaProjection() { if (mediaProjection != null) { mediaProjection.Stop(); mediaProjection = null; } }
/// <summary> /// 释放截图。 /// </summary> public void TearDownMediaProjection() { _mediaProjection?.Stop(); _mediaProjection = null; _virtualDisplay?.Release(); _virtualDisplay = null; _imageReader?.Close(); _imageReader = null; }
protected override void OnDestroy() { base.OnDestroy(); mMediaRecorder.Release(); mMediaRecorder.Dispose(); mMediaRecorder = null; mediaProjection.Stop(); mediaProjection = null; virtualDisplay.Release(); virtualDisplay = null; }
/// <summary> /// 刷新虚拟显示 /// </summary> private void StartVirtualDisplay() { _imageReader?.Close(); _virtualDisplay?.Release(); _mediaProjection?.Stop(); _mediaProjection = _mediaProjectionManager.GetMediaProjection((int)Result.Ok, _intent); //屏幕宽高 var screenHeight = ScreenMetrics.Instance.GetOrientationAwareScreenHeight(); var screenWidth = ScreenMetrics.Instance.GetOrientationAwareScreenWidth(); InitVirtualDisplay(screenWidth, screenHeight, (int)ScreenMetrics.Instance.DeviceScreenDensity); }
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); }
/// <summary> /// 刷新虚拟显示 /// </summary> /// <param name="orientation"></param> private static void RefreshVirtualDisplay() { _imageReader?.Close(); _virtualDisplay?.Release(); _mediaProjection?.Stop(); _mediaProjection = _mediaProjectionManager.GetMediaProjection((int)Result.Ok, _intent.Clone().JavaCast <Intent>()); //屏幕方向 var orientation = Context.Resources.Configuration.Orientation; //屏幕宽高 var screenHeight = ScreenMetrics.Instance.GetOrientationAwareScreenHeight(orientation); var screenWidth = ScreenMetrics.Instance.GetOrientationAwareScreenWidth(orientation); InitVirtualDisplay(screenWidth, screenHeight, (int)ScreenMetrics.Instance.DeviceScreenDensity); SetImageListener(new Handler()); }
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; }
public void StartRecording(Bundle savedInstanceState) { string path = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath + "/test.mp4"; mMediaRecorder.SetVideoSource(VideoSource.Surface); mMediaRecorder.SetOutputFormat(OutputFormat.Webm); //mMediaRecorder.SetVideoEncodingBitRate(512 * 1000); mMediaRecorder.SetVideoEncoder(VideoEncoder.Vp8); mMediaRecorder.SetVideoSize(480, 640); //mMediaRecorder.SetVideoFrameRate(10); mMediaRecorder.SetOutputFile(path); mMediaRecorder.Prepare(); var metrics = new DisplayMetrics(); Activity.WindowManager.DefaultDisplay.GetMetrics(metrics); screenDensity = (int)metrics.DensityDpi; mediaProjectionManager = (MediaProjectionManager)Activity.GetSystemService(Context.MediaProjectionService); resultCode = savedInstanceState.GetInt(STATE_RESULT_CODE); resultData = (Intent)savedInstanceState.GetParcelable(STATE_RESULT_DATA); mediaProjection = mediaProjectionManager.GetMediaProjection(resultCode, resultData); mMediaRecorder.Start(); }
/// <summary> /// Initializes a new instance of the <see cref="LocalScreenMedia"/> class. /// </summary> /// <param name="context">The Android context.</param> /// <param name="disableAudio">Whether to disable audio.</param> /// <param name="disableVideo">Whether to disable video.</param> /// <param name="aecContext">The AEC context, if using software echo cancellation.</param> public LocalScreenMedia(MediaProjection projection, Android.Content.Context context, bool disableAudio, bool disableVideo, AecContext aecContext) : base(context, disableAudio, disableVideo, aecContext) { projectionSource = new MediaProjectionSource(projection, context, 3); Initialize(); }
private void TearDownMediaProjection() { if (mediaProjection != null) { mediaProjection.Stop (); mediaProjection = null; } }
private void SetUpMediaProjection() { mediaProjection = mediaProjectionManager.GetMediaProjection (resultCode, resultData); }
private void SetUpMediaProjection() { mediaProjection = mediaProjectionManager.GetMediaProjection(resultCode, resultData); }