捕获Android屏幕的视频


195

忘记截图了,是否可以在android中捕获正在运行的应用程序的视频?有根或无根,我不在乎,我希望至少达到15fps。

更新:我不需要任何外部硬件。目的是使其具有完美的可移植性,并在Android OS中捕获每个帧。如果它跨越了应用程序SDK的边界,我愿意进行OS级别的修改,但是我需要一个起点。


我完全明白这里所说的话。模拟器似乎也应该具有将当前屏幕重定向到视频文件的功能。我喜欢这样的功能,这样我就可以制作有关我的游戏和应用程序的信息丰富的视频。
罗伯特·马赛利

1
您有解决方案吗?如果是这样,请与我们分享。我也不得不对Android屏幕上的视频进行caputre视频播放。
Deepa 2011年

@deepa nope没有做到这一点的好方法。
Taranfx


是否可以从硬件屏幕缓冲区读取?
mP。

Answers:


243

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


给我像screenrecord这样的响应:找不到adb过时了吗?
中毒

1
听起来您的Android SDK已过时。打开Android SDK Manager并下载最新的SDK工具。
乔·费尔南德斯

1
遗憾的是没有声音。但是仍然很棒。
Martin Capodici 2014年

1
只需添加一下,该页面就有一个带有独立adb +脚本“ ScreenRecord.bat”的软件包,可以双击该软件包开始录制android屏幕视频。.skipser.com/p/2/p/record-
arunskrish 2014年

1
我收到错误警告:链接器:libsac3d.so具有文本重定位。这浪费了内存,并且存在安全风险。请解决。错误:无法配置编解码器(err = -2147483648)警告:在1080x1920上失败,在720x1280下重试
Pete_ch 2014年

17

我知道这是一个古老的问题,但是由于它似乎并没有满足OP的要求。在Android电子市场截屏链接中有一个应用可以实现此目的


29
值得一提的是,它需要root,btw。
themightyjon 2012年

在我的HTC One上不起作用。不过,在我的Galaxy S II上工作正常。
MiloDC

1
这个不需要root。到目前为止看起来似乎很有希望... droid-at-screen.ribomation.com/installation
Fraggle

屏幕上的droid-at不播放视频,@ Fraggle。只是截图。它可以连续拍摄,但速度约为1fps。
Michael Petrotta 2013年

目前,我正在使用此sourceforge.net/projects/ashot在Mac上仅显示屏幕,然后使用我的标准工具(SnapPro X)从屏幕的该部分捕获电影。不知道会出现什么帧速率,但我认为高于1 fps。
2013年

8

是的,使用带视频输出的电话,并使用录像机捕获流

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


那是我本可以做的,但是我的要求是在android中做所有事情。目的是使之随时随地工作。
Taranfx

1
我认为您不走运-在移动设备上即时处理这么多视频编码的要求超出了大多数物理功能的范围,Android(AFAIK)没有接口可以访问流,即使这样做确实是一个潜在的巨大安全漏洞,因为应用程序可能会监视用户。
Ollie C

4

@taranfx,我假设没有更多信息,因为您在StackOverFlow上已经安装了Android开发人员工具。如果是这样,您可以运行模拟器,然后使用许多桌面屏幕捕获程序之一来捕获正在运行的应用程序。Mac上的Screenflow可以很好地做到这一点。如果您使用的是Windows或Nix平台,我肯定会有很多好的屏幕捕获程序,并且我知道也有一些在线服务,但是我没有任何链接,也没有使用过它们。这是有关设置和运行仿真器的参考文档的链接。Android SDK包含一个移动设备模拟器...


2
抱歉?我要求在Android上而不是Mac或Emulator上进行视频捕获。
Taranfx

2
MWR经由模拟器暗示了Android屏幕捕获
奥利Ç

3
并非所有aps都可以在模拟器中运行。
RajV

4

我的建议是也使用屏幕记录器,例如SMRecorder。我建议您使用安装了Android的VirtualBox VM,而不是使用速度较慢的模拟器-尤其是对于游戏和您想要观看视频的事物而言。您可以将Dalvik调试器连接到该调试器并在那里调试应用程序。如果调试器使您的应用程序减速太多,请断开其连接以录制视频。那里有许多链接,说明如何设置Android VM进行调试。我发现它比模拟器好得多。现在,如果您的应用使用加速度计或PC上不可用的摄像头,则无需直接在设备上捕获屏幕。为此,我将使用上面提到的android market应用。


良好的措施:spkaa.com/...
鲁本L.

3

我想截屏不是tegra 2不兼容的原因,我已经尝试过了,但是没有乳清!因此,我尝试使用市场上的Z-ScreeNRecorder,将其安装在我的LG Optimus 2x上,但它只记录了黑屏,我尝试了5分钟。然后我有5分钟。大小为6mb的空白屏幕文件...因此,直到他们发布与tegra2芯片组兼容的软件时,再也没有尝试了!



1

如果您的设备已植根,则可以直接从手机或平板电脑上录制屏幕视频。我正在使用SCR Screen Recorder应用程序。据我所知,这是唯一支持Tegra设备(包括Nexus 7)和Android 4.2的应用程序。目前,该应用程序根据设备记录的速度为9-18fps,但我正在努力改善这一点。SCR Screen Recorder仍处于beta测试阶段,请随时对其进行测试并提供反馈。


1
分享您的研究如何在android中以编程方式完成以静默捕获屏幕上的总览?
2013年

@Iwo您可以分享有关如何以语法方式录制屏幕视频的研究吗?谢谢。
斯里尼·坎杜拉


1

如果您开发摄像机应用程序,那么最好知道用于视频捕获的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应用程序,请执行以下操作:

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”黑客):

CamcorderProfile.QUALITY_HIGH分辨率产生绿色闪烁的视频

更有用的链接:

如何在Android上捕获视频记录?


1

我没有实现它,但是我仍然给你一个想法。

首先获取要截取Android设备屏幕截图的代码。并隔一段时间调用相同的函数来创建图像。添加,然后找到从帧/图像创建视频的代码。

编辑

还要查看此链接并根据屏幕尺寸对其进行修改。主要是将您的工作分为几个小任务,然后根据需要进行组合。

FFMPEG是执行此操作的最佳方法。但是一旦我尝试了,但这是一个非常漫长的过程。首先,您必须下载cygwin和Native C ++库以及大量内容并进行连接,然后才能使用FFMPEG(它是C ++内置的)。


我做了与您建议的相同的操作,即间隔一段时间或没有间隔后拍摄图像,我具有滚动视图,在该视图中我正在滚动,而在另一个线程中我正在捕获屏幕区域,但是对于6-7张图像,返回相同的捕获然后捕获另一个不同的区域。我需要完整的图像序列。
Farrakh Javed 2014年

1

看一看Remote Manager。但是在我看来,它不适用于具有大屏幕的设备。虽然,您可以尝试DEMO


两个链接都死了:/
rahulserver

@ rahulserver,Google阻止了它们,因为我使用Android了该程序的名称。不久,我将再次发布它们,而无需任何Android文字。
Nolesh 2014年

感谢您的回应。我非常需要。因此,一旦您发布,请在这里通知。
rahulserver

@rahulserver,我再次发布了它们并更正了链接。
Nolesh 2014年

1

如果要记录用户导航以便可以测试UI和其他内容,建议您使用TestFairy

它允许您通过电子邮件将apk发送给某些测试用户,并查看包含应用程序中所有会话的视频,甚至包括应用程序崩溃和设备状态。


1

在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();
}

0

这很老了,但是ASC呢?


由于与Tegra供电的设备不兼容?..是的..我有一个Asus Transformer:C
Richard Cotrina

它需要在PC / Mac上运行一个“激活器”,但未签名,并且没有说明其功能,也没有说明如何手动进行“激活”。听起来像是安全风险和威胁向量。
Chloe 2013年

0

如果您在PC上,则可以在PC上运行My Phone Explorer,在电话上运行MyPhoneExplorer Client,将屏幕捕获设置为连续刷新,并使用Wink在My Phone Explorer窗口上捕获屏幕的自定义矩形区域以您自己的捕获率。然后在Wink中转换为FLV,然后使用WinFF从Flash视频转换为MPG 。


应该补充的是,这里的“ PC”是指某种Microsoft Windows。
rwst

0

我没有使用过该应用程序,但是我已经看过Rec。被称为执行此操作的一种方法,但是您需要将手机扎根。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.