【问题标题】:How to record as video what happening inside View? (Android)如何将视图中发生的事情记录为视频? (安卓)
【发布时间】:2016-04-15 22:24:27
【问题描述】:

是否可以将Android中某些视图内的所有动作录制为视频?也许使用 C/C++ 或其他任何东西?

我知道有办法使用 shell 进行录制,但需要 root。没有它会更好。我们也将从 SDK 版本 16 开始。

【问题讨论】:

    标签: android video record


    【解决方案1】:

    您可以使用 javacv 库来组合从视图中获取的一组位图; 代码将如下所示:

    FFmpegFrameRecorder recorder = new FFmpegFrameRecorder("/sdcard/test.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();
    }
    

    这里有一个full example关于如何录制

    【讨论】:

    • 感谢您的回答!我试图使用图书馆。似乎它适合我。但是我有一个问题,是否可以每秒记录 30 张位图?否则,一秒钟调用Bitmap.createBitmap(view.getDrawingCache()); 30 次?它对性能有何影响?
    • 什么是 v1?这个 api 不再起作用了。 recoder.record 不带位图。
    • @JeffreyLiu v1 是你从你想要截取屏幕的视图 =)
    • @JeffreyLiu didi 你有什么解决办法吗?我得到相同的错误记录器。记录(位图);需要 org.bytedeco.javacv.Frame 不是位图
    • 不,我没有@Priyank
    【解决方案2】:

    您可以通过well-known technique 获取应用视图的屏幕截图。如果您连续拍摄多张图像,您可以将它们组合成一个视频。

    如果您想以更高的帧速率实时执行此操作,推荐的方法是通过MediaProjection 类使用虚拟显示器,将输出馈送到视频编码器。这需要 API 21。

    在 API 16 设备上录制屏幕需要本机代码并使用 non-public interfaces。这是可能的,但并不容易。

    【讨论】:

    • 感谢您的快速回答!正如您和@androidLover 所建议的那样,我已经考虑了使用这种技术的选项(来自图像的视频)。但我认为这个选项不适合我的问题,因为我需要以高帧速率进行捕捉。我想编码器没有时间以每秒 30 帧的速度录制。是这样吗?
    • 硬件视频编解码器将能够在大多数设备上以合理的分辨率(720p 或 1080p)保持 30fps。问题在于快速渲染帧并进入编码器。您确实希望将所有数据保留在 GPU 和视频编解码器中。
    • 嗨@fadden,请详细说明“MediaProjection”方法。某种代码 sn-p 会很有帮助。
    • 如何只记录一个视图,而不是整个屏幕?
    猜你喜欢
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多