捕捉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应用程序:
关键的录制动作是在这里完成的:
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(); }