我想问一下,是否可以提高 MediaProjection
.
在流行答案后编辑。
应用程序的伪结构:
1)AppCompatActivity中的全屏FrameLayout:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
android:id="@+id/cameraPreview"
android:layout_width="match_parent"
android:layout_height="match_parent"
...
2) 使用 SurfaceView 进行相机预览
class CameraPreview extends SurfaceView implements SurfaceHolder.Callback
3) 将相机预览添加到 FrameLayout
frameLayout.addView(CameraPreview)
4)创建输入表面:
Surface mSurface = MediaCodec.createInputSurface();
5)创建虚拟显示器并将虚拟显示器渲染到Surface。
MediaProjection.createVirtualDisplay(
"virtualDisplay",
720, //width
1280, //height
320, //dpi
DisplayManager.VIRTUAL_DISPLAY_FLAG_PRESENTATION | DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC,
mSurface,
null,
null);
6)MediaMuxer
用于音频/视频多路复用流。
例如,10 秒。录音:
MPEG4Writer: Received total/0-length (201/0) buffers and encoded 201 frames. - Video
MPEG4Writer: Received total/0-length (423/0) buffers and encoded 423 frames. - Audio
这是〜20 FPS。
我想要30 FPS。(设备可以以 30 FPS 录制全高清,所以我认为这是可能的。)
我尝试从 Android Studio 2.0 录制屏幕,并且对于:
宽度:720 像素
高度:1280像素
比特率:8Mbps
的视频仍然是 20 FPS。
在华为荣耀 4C、Android 5.1.1 ~20 FPS 上测试。
在 Vodafone Smart Ultra 6、Android 5.1.1 上进行了测试,视频具有 ~40 FPS。
我尝试使用 TinyDancer来测量 FPS,它在录制过程中显示 60 FPS。
哪里可能是弱点?录制期间的 CPU 使用率 < 10%。
另外问题:Android 6 中的 MediaProjection 性能更好吗?
(注意:我用叠加视图记录相机预览。)