【问题标题】:Capture Video of Android's Screen捕获 Android 屏幕的视频
【发布时间】:2011-07-19 22:14:49
【问题描述】:

忘记屏幕截图,是否可以在 android 中捕获正在运行的应用程序的视频? 有根或无根,我不在乎,我想要至少 15fps。

更新:我不需要任何外部硬件。其目的是使其完美便携,并在 Android 操作系统中捕获每一帧。如果它跨越了应用 sdk 的边界,我愿意进行操作系统级别的修改,但我需要一个起点。

【问题讨论】:

  • 我完全明白这里所说的内容。模拟器似乎也应该具有将当前屏幕重定向到视频文件的功能。我喜欢这样的功能,这样我就可以制作关于我的游戏和应用的信息丰富的视频。
  • 你有解决方案吗?如果是这样,请与我们分享。我也必须捕获安卓屏幕的视频。
  • @deepa 不,没有好办法。
  • 查看这个项目:sourceforge.net/projects/ashot
  • 是否可以从硬件屏幕缓冲区读取?

标签: android video-capture


【解决方案1】:

Android 4.4 (KitKat) 及更高版本的设备具有用于记录 Android 设备屏幕的 shell 实用程序。使用 adb 实用程序通过 USB 连接处于开发/调试模式运行 KitKat 的设备,然后键入以下内容:

adb shell screenrecord /sdcard/movie.mp4
(Press Ctrl-C to stop)
adb pull /sdcard/movie.mp4

屏幕录制限制为最多 3 分钟。

参考:https://developer.android.com/studio/command-line/adb.html#screenrecord

【讨论】:

  • 正在给我类似屏幕记录的响应:未找到 adb 已过时,为什么?
  • 听起来你的 Android SDK 已经过时了。打开 Android SDK Manager 并下载最新的 SDK 工具。
  • 可惜没有音频。但仍然很棒。
  • 补充一下,这个页面有一个独立的 adb + 脚本 "ScreenRecord.bat" 可以双击开始录制android屏幕视频.. skipser.com/p/2/p/record-screen-video-in-android.html
  • 我收到错误警告:链接器:libsac3d.so 有文本重定位。这是浪费内存并且存在安全风险。请修复。错误:无法配置编解码器 (err=-2147483648) 警告:在 1080x1920 失败,在 720x1280 重试
【解决方案2】:

我知道这是一个老问题,但因为它似乎没有得到 OP 喜欢的答案。在 Android Market Screencast link 中有一个应用程序可以实现这一点

【讨论】:

  • 值得一提的是它需要root,顺便说一句。
  • 在我的 HTC One 上不起作用。不过,在我的 Galaxy S II 上运行良好。
  • 这个不需要root。到目前为止似乎很有希望...droid-at-screen.ribomation.com/installation
  • droid-at-screen 不做视频,@Fraggle。只是截图。它可以进行连续捕捉,但速度约为 1fps。
  • 目前我正在使用这个sourceforge.net/projects/ashot 在我的 Mac 上显示屏幕,然后使用我的标准工具 (SnapPro X) 从屏幕的该部分捕捉电影。不确定帧速率是多少,但我认为高于 1 fps。
【解决方案3】:

是的,使用带视频输出的手机,并使用录像机捕获流

看这篇文章http://graphics-geek.blogspot.com/2011/02/recording-animations-via-hdmi.html

【讨论】:

  • 这是我可以做的,但我的要求是在 android 中做所有事情。让它在旅途中工作是目的。
  • 我认为你不走运 - 在移动设备上处理这么多视频编码的要求超出了大多数物理能力的范围,Android (AFAIK ) 没有访问流的接口,即使有,这也是一个潜在的巨大安全漏洞,因为应用程序可能会监视用户。
【解决方案4】:

@taranfx,我假设没有更多信息,因为您在 StackOverFlow 上安装了 Android 开发人员工具。如果是这样,您可以运行模拟器,然后使用众多桌面屏幕捕获程序之一来捕获正在运行的应用程序。 Mac 上的Screenflow 非常适合执行此操作。如果您在 Windows 或 Nix 平台上,我相信有很多不错的屏幕捕获程序,而且我知道也有一些在线服务,但我没有任何链接,也没有使用它们。这是设置和运行模拟器的参考文档的链接。The Android SDK includes a mobile device emulator...

【讨论】:

  • 对不起?我要求在 Android 中而不是在 Mac 或模拟器上进行视频捕获。
  • MWR 建议通过模拟器截取 Android 屏幕
  • 并非所有的应用程序都可以在模拟器中运行。
【解决方案5】:

我的建议也是使用屏幕录像机,例如 SMRecorder。我建议使用安装了 Android 的 VirtualBox VM,而不是使用速度慢的模拟器 - 特别是对于游戏和您想要视频的东西。您可以将 Dalvik 调试器连接到它并在那里调试您的应用程序。如果调试器太慢了你的应用程序,断开它来录制视频。有许多链接解释了如何设置 Android VM 以进行调试。我发现它比模拟器好得多。 现在,这不负责直接在设备上捕获屏幕,以防您的应用程序使用加速度计或 PC 上不可用的相机。为此,我会使用上面提到的 android 市场应用程序。

【讨论】:

【解决方案6】:

我猜截屏不是 tegra 2 不兼容的原因,我已经尝试过了,但是没有乳清! 所以我尝试使用市场上的 Z-ScreeNRecorder,将它安装在我的 LG Optimus 2x 上,但它只记录了空白屏幕,我尝试了 5 分钟。我得到5分钟。 6mb 大小的空白屏幕文件...所以在他们发布一些与 tegra2 芯片组兼容的软件之前没有任何意义!

【讨论】:

    【解决方案7】:

    Android 4.3 有一个新的 MediaCodec API,可用于从表面记录。 见:http://developer.android.com/about/versions/android-4.3.html (向下滚动到“来自 Surface 的视频编码”部分)

    【讨论】:

      【解决方案8】:

      如果您的设备已植根,则可以直接从手机或平板电脑录制屏幕视频。我正在开发SCR Screen Recorder 应用程序。据我所知,这是唯一支持 Tegra 设备(包括 Nexus 7)和 Android 4.2 的应用程序。目前,该应用程序根据设备记录在 9-18fps 之间,但我正在努力改进这一点。 SCR 屏幕录像机仍处于 beta 测试阶段,因此请随时对其进行测试并提供反馈。

      【讨论】:

      • 分享你的研究如何在 android 中以编程方式完成以静默捕获屏幕的副总裁?
      • @Iwo 你能分享你对如何用语法记录屏幕视频的研究吗?谢谢。
      【解决方案9】:

      AirPlay 镜像和屏幕录制现在在 CyanogenMod 中,带有 Mirror APK(测试版)。

      【讨论】:

        【解决方案10】:

        如果您开发摄像机应用程序,那么了解用于视频捕获的 API 会很好:

        http://developer.android.com/training/camera/videobasics.html

        (上面的链接只展示了如何通过 Intent 提交来完成视频录制,而不是实际录制是如何完成的)

        https://www.linux.com/learn/tutorials/729988-android-app-development-how-to-capture-video

        如果您想自己编写“screenrecord” adb 应用程序:

        https://android.googlesource.com/platform/frameworks/av/+/android-cts-4.4_r1/cmds/screenrecord/screenrecord.cpp

        而关键的录制动作在这里完成:

        static status_t recordScreen(const char* fileName) {
            status_t err;
        
        <...>
        
            // Configure, but do not start, muxer.
            sp<MediaMuxer> muxer = new MediaMuxer(fileName,
                    MediaMuxer::OUTPUT_FORMAT_MPEG_4);
            if (gRotate) {
                muxer->setOrientationHint(90);
            }
        
            // Main encoder loop.
            err = runEncoder(encoder, muxer);
            if (err != NO_ERROR) {
                encoder->release();
                encoder.clear();
        
                return err;
            }
        

        对于三星手机,还有其他设置('cam_mode' hack):

        CamcorderProfile.QUALITY_HIGH resolution produces green flickering video

        更多有用的链接:

        How can I capture a video recording on Android?

        【讨论】:

          【解决方案11】:

          我没有实现它,但我仍然给你一个想法来做到这一点。

          首先获取获取screenshot of Android device的代码。并在一段时间后调用相同的函数来创建图像。添加然后找到创建video from frames/images的代码。

          编辑

          也可以查看this link,根据你的屏幕尺寸进行修改。主要是将你的工作分成几个小任务,然后根据需要组合起来。

          FFMPEG 是最好的方法。但是一旦我尝试过,这是一个很长的过程。首先,您必须下载 cygwin 和 Native C++ 库以及很多东西并连接,然后您就可以使用 FFMPEG(它是用 C++ 构建的)。

          【讨论】:

          • 我按照您的建议在一段时间后或没有时间间隔拍摄图像,我有滚动视图,我正在滚动视图,在另一个线程中我正在捕获屏幕区域,但相同捕获是返回 6-7 个图像,然后捕获另一个不同的区域。我需要完整的图像序列。
          【解决方案12】:

          看看Remote Manager。但在我看来,它不适用于具有大屏幕的设备。不过,你可以先试试DEMO

          【讨论】:

          • 两个链接都失效了:/
          • @rahulserver,谷歌阻止了他们,因为我在程序名称中使用了Android。很快我会在没有Android 字的情况下再次发布它们。
          • 感谢您的回复。我非常需要。所以一旦你发布,请在这里通知。
          • @rahulserver,我再次发布它们并更正了链接。
          【解决方案13】:

          如果你想记录用户导航以便测试UI和其他东西,我建议你使用TestFairy

          它允许您通过电子邮件将 apk 发送给一些测试用户,并查看包含应用程序中所有会话的视频,甚至应用程序崩溃和设备统计信息。

          【讨论】:

            【解决方案14】:

            在 Android Lollipop (5) 中,new feature has been added 允许截屏 which is explained here

            Here is an example

            像这样调用 startActivityForResult

            startActivityForResult(mProjectionManager.getScreenCaptureIntent(), PERMISSION_CODE);
            

            然后捕获结果

            @Override
            public void onActivityResult(int requestCode, int resultCode, Intent data) {
                if (requestCode != PERMISSION_CODE) {
                    Log.e(TAG, "Unknown request code: " + requestCode);
                    return;
                }
                if (resultCode != RESULT_OK) {
                    Toast.makeText(this,
                            "User denied screen sharing permission", Toast.LENGTH_SHORT).show();
                    return;
                }
                mMediaProjection = mProjectionManager.getMediaProjection(resultCode, data);
                mVirtualDisplay = createVirtualDisplay();
            }
            

            【讨论】:

              【解决方案15】:

              这是旧的,但ASC 呢?

              【讨论】:

              • 由于与 Tegra 驱动的设备不兼容? ..是的..我有一个华硕变压器:C
              • 它需要在 PC/Mac 上运行“激活器”,但没有签名,也没有解释它的作用以及如何手动进行“激活”。这听起来像是一个安全风险和威胁向量。
              【解决方案16】:

              如果您在 PC 上,那么您可以在 PC 上运行 My Phone Explorer,在手机上运行 MyPhoneExplorer Client,将屏幕截图设置为连续刷新,然后使用 Wink 捕获屏幕的自定义矩形区域在 My Phone Explorer 窗口上使用您自己的捕获率。然后在 Wink 中转换为 FLV,然后用WinFF 将 Flash 视频转换为 MPG。

              【讨论】:

              • 应该补充一点,这里的“PC”是指某种Microsoft Windows。
              【解决方案17】:

              我没有使用过该应用程序,但我看到 Rec. 被引用为执行此操作的一种方式,但您需要 root 手机。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2018-03-15
                • 2016-02-14
                • 1970-01-01
                • 1970-01-01
                • 2011-07-12
                • 2012-11-05
                • 1970-01-01
                相关资源
                最近更新 更多