【发布时间】:2015-08-23 06:16:01
【问题描述】:
我想在 Android 中制作 Presentation 对象的“即时”屏幕截图。我的演示文稿通常呈现到虚拟显示器 (PRIVATE),该虚拟显示器由设置为录制视频的 MediaRecorder 的表面支持。将演示文稿录制为视频效果很好。
mMediaRecorder = new MediaRecorder();
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mMediaRecorder.setOutputFile(getScratchFile().getAbsolutePath());
mMediaRecorder.setVideoEncodingBitRate(bitrateInBitsPerSecond);
mMediaRecorder.setVideoFrameRate(30);
mMediaRecorder.setVideoSize(mVideoSize.getWidth(), mVideoSize.getHeight());
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mVirtualDisplay = mDisplayManager.createVirtualDisplay(
DISPLAY_NAME, // string name required
mVideoSize.getWidth(),
mVideoSize.getHeight(),
160, // screen densityDpi, not sure what it means in this context
mMediaRecorder.getSurface(), // the media recorder must already be {@code prepare()}'d
DisplayManager.VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY); // only we can use it
mPresentation = new MyPresentation(getActivity(), mVirtualDisplay().getDisplay());
如何随时获取 mMediaRecorder.getSurface() 的屏幕截图,包括 mMediaRecorder 已设置但未录制时?
我已经尝试了许多与 Presentation 根视图对象上的 view.getDrawingCache() 相关的方法,但我只能得到清晰/黑色的输出。演示文稿本身包含 TextureView 对象,我猜这是搞砸了这个策略。 我还尝试将 ImageReader 与 mMediaRecorder 的 DisplayPreview 一起使用,但它在回调中没有收到任何图像——永远
mMediaRecorder.setDisplayPreview(mImageReader.getSurface());
我真的很想用某种方法将支持演示文稿的 Surface 镜像到 ImageReader 并将其用作消费者,我只是看不出如何将一个表面作为生产者“镜像”到另一个“消费者”类.看来 SurfaceFlinger 应该有一个简单的方法。
【问题讨论】:
标签: android surfaceview android-mediarecorder