Android编程中的屏幕录像机,而不是截图

时间:2014-09-02 04:45:55

标签: 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创建视频,但我不喜欢因为为此我必须在每个应用程序中编写代码,并采取当前活动的屏幕截图,最后创建视频。

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

4 个答案:

答案 0 :(得分:5)

很抱歉迟到的答案,但这是一个有效的代码。它适用于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;
        }

答案 1 :(得分:1)

根据Android 5.0,您将能够通过MediaProjection API捕获屏幕内容,而您无需根设备。尝试在SurfaceView上投影并从那里进行录制。

答案 2 :(得分:0)

Android没有提供暴露帧缓冲区的任何API,您需要使用设备根源并使用http://code.google.com/p/fastdroid-vnc/中的一些源代码获取原始帧缓冲区然后进行记录。

请记住,您需要根据设备执行此操作。

使用android kitkat的最简单方法是使用ADB screenrecord命令。

答案 3 :(得分:0)

几乎没有解决方法 - 这不需要您根设备。)

  • 如果您要为应用创建演示,则可以使用模拟器或蓝板和桌面屏幕录制器来录制模拟器。

  • 如果您需要在实际手机上显示正在使用的应用,那么您可以使用其他相机记录正在使用的应用。

  • 如果您必须捕获屏幕并可以将手机连接到计算机,则可以更快的速度从桌面截取手机屏幕的屏幕截图(与Dalvik Debug Monitor Device>屏幕相同)捕获。),然后将图像组合成电影。

如果您 来创建应用,那么您必须探索the NDK