android - Android 中的屏幕录像机以编程方式,而不是屏幕截图

标签 android android-layout android-intent android-activity android-fragments

我想制作类似“EASY screen recorder”的应用。从我必须开始的地方开始,因为我搜索了很多但没有找到任何入门链接。有任何 api 用于创建屏幕录像机而不是屏幕截图。我不想使用 javacv 从屏幕截图创建视频。我只想让用户启动应用程序并单击开始录制按钮,然后记录用户在移动设备上所做的一切。

1) android 中有没有这方面的api。

2) 如何在 android 中创建屏幕录像机应用程序。

3) android 中是否没有任何api,请向我推荐其他api,以便我可以在android 中使用。

我搜索了很多但仍然无法创建录音应用程序。 我有 android 应用程序,我在其中添加代码,在特定时间后使用处理程序拍摄屏幕截图,最后它使用 javacv 创建视频,但我不喜欢,因为为此我必须在每个应用程序中编写代码并且需要当前 Activity 的屏幕截图,最后创建视频。

EASY 屏幕录像机开发人员如何创建此应用程序?他们使用了哪个api。我想创建此应用的克隆。

最佳答案

很抱歉回答晚了,但这是一个有效的代码。它适用于 Lollipop 及更高版本

    private VirtualDisplay mVirtualDisplay;
    private MediaRecorder mMediaRecorder;
    private MediaProjection mMediaProjection;
    private MediaProjectionCallback callback;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MediaProjectionManager projectionManager = (MediaProjectionManager) 
        context.getSystemService(Context.MEDIA_PROJECTION_SERVICE);
        mMediaProjection.registerCallback(callback, null);
        initRecorder();
        mMediaRecorder.prepare();
        mVirtualDisplay = createVirtualDisplay();
        mMediaRecorder.start();
}

public void initRecorder() {
        path = "/sdcard/Record/video" + ".mp4";
        recId = "capture-" + System.currentTimeMillis() + ".mp4";
        File myDirectory = new File(Environment.getExternalStorageDirectory(), "Record");

            mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
            mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
            mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
            mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
            mMediaRecorder.setVideoEncodingBitRate(MainFragment.bitRate);          
            mMediaRecorder.setVideoFrameRate(30);
            mMediaRecorder.setVideoSize(MainFragment.DISPLAY_WIDTH,
            MainFragment.DISPLAY_HEIGHT);
            mMediaRecorder.setOutputFile(path);
    }


    private VirtualDisplay createVirtualDisplay() {
        return mMediaProjection.createVirtualDisplay("MainActivity",
                MainFragment.DISPLAY_WIDTH, MainFragment.DISPLAY_HEIGHT, MainFragment.screenDensity,
                DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
                mMediaRecorder.getSurface(), null /*Callbacks*/, null /*Handler*/);
    }

public class MediaProjectionCallback extends MediaProjection.Callback {
        @Override
        public void onStop() {
            mMediaRecorder.stop();
            // mMediaRecorder.reset();
            mMediaRecorder.release();
            mMediaProjection.unregisterCallback(callback);
            mMediaProjection = null;
            mMediaRecorder = null;
        }

关于android - Android 中的屏幕录像机以编程方式,而不是屏幕截图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25616026/

相关文章:

android - 为什么调试 Android 应用程序使用的原生共享库很慢?

android - Google map 在我的 Android 应用程序中使用 GoogleMap.MAP_TYPE_TERRAIN 冲掉等高线和高程

android - 在 android 的 ListView 中需要帮助

java - +id 在RelativeLayout 中如何有效?

android - 设置安卓系统音量

java - SearchView 不启动 SearchableActivity

java - 我的 ImageView 的 Android 动画有什么问题?

java - java与google-app-engine通信时报错302

android - 显示 snackbar 时,来自设计支持库的 FAB 不会向上移动

Android 在后台堆栈中的另一个 Activity 之前启动一个新 Activity,并清除旧 Activity 之上的 Activity