忘记屏幕截图,是否可以在Android中捕获正在运行的应用程序的视频? 有根或无根,我不在乎,我想至少15fps.
更新:我不想要任何外部硬件。其目的是使其完全便携,并在Android操作系统中捕捉每一帧。如果它跨越了应用程序SDK的边界,我愿意进行操作系统级别的修改,但我需要一个起点。
是的,使用带有视频输出的手机,并使用录像机来捕获视频流
请参阅本文http://graphics-geek.blogspot.com/2011/02/recording-animations-via-hdmi.html
@TaranFX,没有更多的信息,我假设因为你在StackOverflow上,你已经安装了Android开发工具。如果是这样,您可以运行模拟器,然后使用许多桌面屏幕捕获程序之一来捕获正在运行的应用程序。_Mac上的ABC_0非常适合这样做。我相信有很多好的屏幕捕捉程序,如果你在Windows或尼克斯平台上,我知道也有一些在线服务,但我没有任何链接,也没有使用它们。以下是有关设置和运行仿真器的参考文档的链接。另Android SDK包括一个移动设备模拟器。
我知道这是一个古老的问题,但因为它似乎是OPS喜欢的答案。有一个应用程序可以在Android Market截屏视频链接中实现这一点。
我猜截屏视频不是Tegra 2不兼容的原因,我已经试过了,但没有乳清! 因此,我尝试使用市场上的Z-屏幕记录器,将其安装在我的LG Optimus 2X上,但它只记录了空白屏幕,我尝试了5分钟。在那里我得到了5分钟。6MB大小的空白屏幕文件..因此,在他们发布一些与Tegra2芯片组兼容的软件之前,尝试是没有意义的。
这是旧的,但ASC呢?
我的建议也是使用屏幕录制器,例如SMRecorder.我建议使用安装了Android的VirtualBox虚拟机,而不是使用速度很慢的模拟器——尤其是对于游戏和你想要视频的东西。您可以将Dalvik调试器连接到它,并在那里调试您的应用程序。如果调试器使您的应用程序变慢太多,请断开连接以录制视频。有很多链接解释了如何设置Android虚拟机进行调试。我发现它比模拟器好多了。 现在,如果你的应用程序使用加速计或PC上不可用的摄像头,这并不能直接在设备上捕捉屏幕。为此,我会使用上面提到的Android市场应用程序。
如果您的设备是root用户,则可以直接从手机或平板电脑录制屏幕视频。我正在开发SCR屏幕记录器应用程序。据我所知,这是唯一支持Tegra设备(包括Nexus 7)和Android 4.2的应用程序。目前,根据设备的不同,应用程序的记录速度在9-18fps之间,但我正在努力改进。SCR屏幕记录器仍处于beta测试阶段,所以请随时测试它并给出反馈。
看一下远程管理器。但在我看来,它不能在大屏幕设备上正常工作。不过,您可以尝试演示之前。
如果您使用的是PC,则可以在PC上运行我的手机浏览器,在电话上运行MyPhoneExplorer客户端,将屏幕捕获设置为不断刷新,并使用眨眼在“我的电话资源管理器”窗口中以您自己的捕获速率捕获屏幕的自定义矩形区域。然后在Wink中转换为FLV,然后使用温夫将Flash视频转换为MPG.
Android 4.3有一个新的MediaCodec API,可用于从表面录制。 请参阅:http://developer.android.com/about/versions/android-4.3.html (向下滚动到“来自表面的视频编码”部分)
Android 4.4(KitKat)和更高版本的设备具有用于记录Android设备屏幕的shell实用程序。在开发/调试模式下,通过USB使用ADB实用程序连接运行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
AirPlay镜像和屏幕录制现在是氰化的与镜像APK(测试版)。
如果您正在开发摄像机应用程序,那么最好了解用于视频捕获的API:
http://developer.android.com/training/camera/videobasics.html.
(上面的链接只显示了如何通过意图提交完成视频录制,而不是如何完成实际录制)
https://www.linux.com/learn/tutorials/729988-android-app-development-how-to-capture-video.
如果您想自己编写“屏幕记录” 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; }
对于三星手机有额外的设置('凸轮_模式'哈克):
CamcorderProfile.高质量_高分辨率可产生绿色闪烁视频
更多有用的链接:
如何在Android上捕获视频录制?
我没有实现它,但我仍然给你一个这样做的想法。
首先,获取代码以获取Android设备屏幕截图。并在一段时间间隔后调用相同的函数来创建图像。添加,然后查找代码以创建来自帧/图像的视频。
编辑
另请参阅这个链接,并根据您的屏幕尺寸对其进行修改。主要是将您的工作分成几个小任务,然后根据需要进行组合。
FFmpeg是执行此操作的最佳方法。但一旦我尝试过,但这是一个非常漫长的过程。首先,你必须下载Cygwin和原生C++库和很多东西,然后连接,然后你就可以在FFmpeg上工作了(它是用C++构建的)。
如果你想记录用户导航,以便你可以测试UI和其他东西,我建议你使用测试精灵
它允许你通过电子邮件将APK发送给一些测试用户,并观看应用程序中所有会话的视频,甚至应用程序崩溃和设备统计。
我没有使用该应用程序,但我看到雷克引用作为一种方法来做到这一点,但你需要根电话。
在Android Lollipop(5)中,添加了新功能允许屏幕捕获这里解释一下。
这里有一个例子。
像这样调用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(); }