【问题标题】:Record Screen Specific View using MediaRecorder使用 MediaRecorder 录制屏幕特定视图
【发布时间】:2018-07-02 06:41:15
【问题描述】:

我想在特定的View 链接中录制我的屏幕视频,只想录制在LinearLayout 中执行的动作。现在MediaRecorder正在全屏录屏,如何录屏?

【问题讨论】:

标签: android service ffmpeg mediarecorder screen-recording


【解决方案1】:

MediaRecorder 使用媒体投影 API 记录整个屏幕。至少从 Android 8.1 开始,没有记录屏幕特定部分的选项。您需要编辑全屏视频以将其裁剪为仅显示对您重要的屏幕部分。

【讨论】:

  • 感谢提交。请让我知道除了 MediaRecorder 是否还有其他或替代选项。因为我搜索了很多,但没有得到最佳结果。
  • 只有在应用内想捕获应用内的活动,MainActivity->LinearLayout
【解决方案2】:

这里是捕获特定视图的应用程序屏幕截图的代码。

public Bitmap takeScreenShot(View view) {
        view.setDrawingCacheEnabled(true);
        view.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_LOW);
        view.buildDrawingCache();
        if(view.getDrawingCache() == null) return null; 
        Bitmap snapshot = Bitmap.createBitmap(view.getDrawingCache());
        view.setDrawingCacheEnabled(false);
        view.destroyDrawingCache();
        return snapshot;
    }

如果你想记录视图,你可以使用 javacv 库,这里是代码示例。

FFmpegFrameRecorder recorder = new FFmpegFrameRecorder("record.mp4",256,256);
try {
    recorder.setVideoCodec(avcodec.AV_CODEC_ID_MPEG4);
    recorder.setFormat("mp4");
    recorder.setFrameRate(30);
    recorder.setPixelFormat(avutil.PIX_FMT_YUV420P10);
    recorder.setVideoBitrate(1200);
    recorder.startUnsafe();
    for (int i=0;i< 5;i++)
    {
        view.setDrawingCacheEnabled(true);
        Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
        view.setDrawingCacheEnabled(false);
        recorder.record(bitmap);
    }
    recorder.stop();
}
catch (Exception e){
    e.printStackTrace();
} 

【讨论】:

  • recorder.record(bitmap);它需要框架。
猜你喜欢
  • 2013-04-08
  • 1970-01-01
  • 2017-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-02
  • 2023-03-30
相关资源
最近更新 更多