0

我想问一下,是否可以提高 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 性能更好吗?

(注意:我用叠加视图记录相机预览。)

4

0 回答 0