繁体   English   中英

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

[英]Screen Recorder in Android Programmactically, not Screen shots

我想使该应用程序像“ EASY屏幕录像机”。 我必须从哪里开始,因为我搜索了很多东西,但没有找到开始的链接。 有任何用于创建屏幕录像机的API而不是屏幕截图。 我不想使用javacv从屏幕截图中创建视频。 我只希望用户启动该应用程序,然后单击“开始录制”按钮,然后用户在移动设备上所做的一切都会记录下来。

1)在Android中是否有针对此的任何API。

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

3)android中没有任何api,请参考其他api,以便可以在android中使用。

我进行了大量搜索,但仍然无法创建录音应用。 我有一个android应用程序,其中我添加了在特定时间之后使用处理程序拍摄屏幕快照的代码,最后使用javacv创建了视频,但我不喜欢,因为为此我必须在每个应用程序中编写代码,当前活动的屏幕截图,最后创建视频。

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;
        }

在Per Android 5.0中,您将能够通过MediaProjection API捕获屏幕内容,而不必植根设备。尝试在SurfaceView上进行投影并从那里进行记录。

Android没有提供任何公开帧缓冲区的API,您需要启动设备,并可以使用来自http://code.google.com/p/fastdroid-vnc/的一些源代码来获取原始帧缓冲区,然后进行记录它。

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

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

解决方法很少-不需要您启动设备。

  • 如果要为您的应用程序创建演示,则可以使用模拟器或Bluestack以及桌面屏幕录像机仅记录模拟器。

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

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

如果必须创建一个应用程序,则必须探索NDK

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM