忘记截图了,是否可以在android中捕获正在运行的应用程序的视频?有根或无根,我不在乎,我希望至少达到15fps。
更新:我不需要任何外部硬件。目的是使其具有完美的可移植性,并在Android OS中捕获每个帧。如果它跨越了应用程序SDK的边界,我愿意进行OS级别的修改,但是我需要一个起点。
忘记截图了,是否可以在android中捕获正在运行的应用程序的视频?有根或无根,我不在乎,我希望至少达到15fps。
更新:我不需要任何外部硬件。目的是使其具有完美的可移植性,并在Android OS中捕获每个帧。如果它跨越了应用程序SDK的边界,我愿意进行OS级别的修改,但是我需要一个起点。
Answers:
Android 4.4(KitKat)和更高版本的设备具有用于记录Android设备屏幕的shell实用程序。通过USB将运行KitKat的开发人员/调试模式的设备与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电子市场截屏链接中有一个应用可以实现此目的
是的,使用带视频输出的电话,并使用录像机捕获流
看到这篇文章http://graphics-geek.blogspot.com/2011/02/recording-animations-via-hdmi.html
@taranfx,我假设没有更多信息,因为您在StackOverFlow上已经安装了Android开发人员工具。如果是这样,您可以运行模拟器,然后使用许多桌面屏幕捕获程序之一来捕获正在运行的应用程序。Mac上的Screenflow可以很好地做到这一点。如果您使用的是Windows或Nix平台,我肯定会有很多好的屏幕捕获程序,并且我知道也有一些在线服务,但是我没有任何链接,也没有使用过它们。这是有关设置和运行仿真器的参考文档的链接。Android SDK包含一个移动设备模拟器...
我的建议是也使用屏幕记录器,例如SMRecorder。我建议您使用安装了Android的VirtualBox VM,而不是使用速度较慢的模拟器-尤其是对于游戏和您想要观看视频的事物而言。您可以将Dalvik调试器连接到该调试器并在那里调试应用程序。如果调试器使您的应用程序减速太多,请断开其连接以录制视频。那里有许多链接,说明如何设置Android VM进行调试。我发现它比模拟器好得多。现在,如果您的应用使用加速度计或PC上不可用的摄像头,则无需直接在设备上捕获屏幕。为此,我将使用上面提到的android market应用。
Android 4.3具有新的MediaCodec API,可用于从表面进行记录。请参阅:http : //developer.android.com/about/versions/android-4.3.html (向下滚动到“来自Surface的视频编码”部分)
如果您的设备已植根,则可以直接从手机或平板电脑上录制屏幕视频。我正在使用SCR Screen Recorder应用程序。据我所知,这是唯一支持Tegra设备(包括Nexus 7)和Android 4.2的应用程序。目前,该应用程序根据设备记录的速度为9-18fps,但我正在努力改善这一点。SCR Screen Recorder仍处于beta测试阶段,请随时对其进行测试并提供反馈。
AirPlay镜像和屏幕录制现在已在带有Mirror APK(测试版)的CyanogenMod中。
如果您开发摄像机应用程序,那么最好知道用于视频捕获的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应用程序,请执行以下操作:
并在此处完成关键记录操作:
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”黑客):
CamcorderProfile.QUALITY_HIGH分辨率产生绿色闪烁的视频
更有用的链接:
我没有实现它,但是我仍然给你一个想法。
首先获取要截取Android设备屏幕截图的代码。并隔一段时间调用相同的函数来创建图像。添加,然后找到从帧/图像创建视频的代码。
编辑
还要查看此链接并根据屏幕尺寸对其进行修改。主要是将您的工作分为几个小任务,然后根据需要进行组合。
FFMPEG是执行此操作的最佳方法。但是一旦我尝试了,但这是一个非常漫长的过程。首先,您必须下载cygwin和Native C ++库以及大量内容并进行连接,然后才能使用FFMPEG(它是C ++内置的)。
看一看Remote Manager。但是在我看来,它不适用于具有大屏幕的设备。虽然,您可以尝试DEMO。
Android
了该程序的名称。不久,我将再次发布它们,而无需任何Android
文字。
在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();
}
这很老了,但是ASC呢?
如果您在PC上,则可以在PC上运行My Phone Explorer,在电话上运行MyPhoneExplorer Client,将屏幕捕获设置为连续刷新,并使用Wink在My Phone Explorer窗口上捕获屏幕的自定义矩形区域以您自己的捕获率。然后在Wink中转换为FLV,然后使用WinFF从Flash视频转换为MPG 。
我没有使用过该应用程序,但是我已经看过Rec。被称为执行此操作的一种方法,但是您需要将手机扎根。