捕获Android屏幕的视频

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

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

159859 次浏览

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

请参阅本文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();
}