捕捉Android屏幕的video

忘记截图,是否有可能捕获在Android运行的应用程序的video? 根植或不根植,我不在乎,我想至less15fps。

更新:我不想要任何外部硬件。 其目的是使其非常便于携带,每一帧都在Android OS中捕捉。 如果它跨越了应用SDK的边界,我愿意去操作系统级别的修改,但我需要一个起点。

Android 4.4(KitKat)和更高版本的设备有一个shell工具来loggingAndroid设备屏幕。 将运行KitKat的开发者/debugging模式下的设备通过USB连接到adb公用程序,然后键入以下命令:

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

我知道这是一个古老的问题,但由于它似乎没有回答OP的喜好。 在Android Market Screencast链接中有一个适用于此的应用程序

是的,使用带有video输出的手机,然后使用录像机捕捉videostream

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

@taranfx,没有更多的信息我假设,因为你在StackOverFlow,你有Android开发工具安装。 如果是这样,您可以运行模拟器,然后使用众多桌面屏幕捕获程序之一来捕获正在运行的应用程序。 Mac上的Screenflow非常适合这样做。 如果你在Windows或Nix平台上,我确信有很多好的截图程序,我知道还有一些在线服务,但我没有任何链接,也没有使用过它们。 这是关于设置和运行仿真器的参考文档的链接。 Android SDK包含一个移动设备模拟器…

我的build议也是使用屏幕录像机,如SMRecorder。 不要使用速度慢的模拟器 – 特别是对于游戏和需要video的东西,我build议使用安装了Android的VirtualBox虚拟机。 你可以连接Dalvikdebugging器,并在那里debugging你的应用程序。 如果debugging器太慢了你的应用程序,断开它来loggingvideo。 有很多链接解释了如何设置Android VM进行debugging。 我发现它比模拟器好得多。 现在,这并不关心直接在设备上捕捉屏幕,以防您的应用程序使用加速计或PC上不可用的相机。 为此,我将使用上面提到的Android市场应用程序。

我猜screencast是不行的tegra 2不兼容,我已经尝试过,但没有乳清! 所以我试图从市场上使用Z-ScreeNRecorder ,将它安装在我的LG Optimus 2x上,但它logging的唯一的空白屏幕,我试了5分钟。 在那里我得到5分钟。 的6MB大小的空白屏幕文件…所以没有任何意义的尝试,直到他们释放一些与tegra2芯片组兼容的软件的和平!

Android 4.3有一个新的MediaCodec API,可以用来从表面进行logging。 请参阅: http : //developer.android.com/about/versions/android-4.3.html (向下滚动到“从表面video编码”部分)

如果您的设备是固定的,则可以直接从手机或平板电脑录制屏幕video。 我正在SCR屏幕录像机的应用程序。 就我所知,这是唯一支持Tegra设备(包括Nexus 7)和Android 4.2的应用程序。 目前的应用程序logging9-18fps之间取决于设备,但我正在努力改善。 SCR屏幕logging器仍处于betatesting阶段,所以请随时testing并提供反馈。

AirPlay镜像和屏幕录制现在在CyanogenMod与镜像APK(testing版)。

如果您正在开发摄像机应用程序,那么知道用于video捕获的API将是一件好事:

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

(上面的链接只显示了如何通过意图提交来完成video录制,而不是实际的录制是如何完成的)

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分辨率会产生绿色闪烁video

更有用的链接:

如何在Android上捕捉video录制?

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

首先获取代码来拍摄Android设备的屏幕截图 。 并调用一段时间后创build图像的相同function。 添加然后find代码来创build帧/图像的video 。

编辑

看到这个链接 ,并根据你的屏幕尺寸进行修改。主要的是把你的工作分成几个小任务,然后根据你的需要组合。

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

看看远程pipe理器 。 但在我看来,它不适用于大屏幕的设备。 虽然,你可以先试试DEMO 。

如果你想logging用户导航,所以你可以testingUI和其他东西,我build议你使用TestFairy

它允许你通过电子邮件发送APK给一些testing用户,并看到一个video与应用程序中的所有会话,甚至应用程序崩溃和设备状态。

这是旧的,但ASC呢?

如果您在PC上,则可以在PC上运行我的电话浏览器 ,在手机上运行MyPhoneExplorer客户端 ,将屏幕捕获设置为不断刷新,并使用Wink通过“我的电话浏览器”窗口捕获屏幕的自定义矩形区域与您自己的捕获率。 然后转换成一个FLV的眨眼,然后从Flashvideo转换为MPG与WinFF 。

我没有使用该应用程序,但我已经见过Rec。 引用的方式来做到这一点,但你需要root的电话。

在Android Lollipop(5)中增加了一个新function ,允许在这里解释屏幕截图

这是一个例子

像这样调用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(); }