Java 当前活动的屏幕视频记录

Java 当前活动的屏幕视频记录,java,android,screen,record,Java,Android,Screen,Record,是否可以从同一活动中录制当前运行活动的屏幕视频? 我知道如何拍摄当前活动的屏幕截图,但不知道如何拍摄屏幕视频。 我怎么开始呢?我不知道怎么开始 您可以在adb运行时使用DDMS捕获屏幕,并具有帧缓冲区的权限: 有关详细信息,请访问此链接: 也 检查此链接可能会了解您需要什么: 并检查此项目: 希望对您有所帮助。编辑::此答案被Danpe的答案取代 从应用程序中以编程方式录制视频需要root访问权限。您会注意到,Play Store中可用于执行此操作的应用程序在其应用程序描述中突出显示“需

是否可以从同一活动中录制当前运行活动的屏幕视频?
我知道如何拍摄当前活动的屏幕截图,但不知道如何拍摄屏幕视频。
我怎么开始呢?我不知道怎么开始

您可以在adb运行时使用DDMS捕获屏幕,并具有帧缓冲区的权限:

有关详细信息,请访问此链接:

也 检查此链接可能会了解您需要什么:

并检查此项目:


希望对您有所帮助。

编辑::此答案被Danpe的答案取代

从应用程序中以编程方式录制视频需要root访问权限。您会注意到,Play Store中可用于执行此操作的应用程序在其应用程序描述中突出显示“需要根目录”。您还将注意到,这种方法可能还需要一些特定的硬件要求才能正常工作(“在Galaxy Nexus或Tegra 2/3上不起作用…”——从应用程序的描述中可以看出

我自己从来没有写过这段代码,但我已经对所需的方法有了一个非常高的概念。由此看来,您必须通过“/dev/graphics/fb0”访问帧缓冲区数据。帧缓冲区的访问模式为660,这意味着您需要根访问权限才能访问它。拥有根访问权限后,您可以使用帧缓冲区数据创建屏幕截图(这可能适用于此任务),然后从这些屏幕截图创建视频(请参阅关于如何操作的其他问题)


我使用过Screencast应用程序,它在三星笔记本上运行良好。我怀疑这是他们采取的基本方法。

普通Android应用程序没有捕获帧缓冲区的权限(特别是,他们不是AID_GRAPHICS group的成员).这是出于安全原因-否则他们可能会从软键盘窥探密码等。因此,一般来说,如果没有绕过权限问题的方法,您无法从Android应用程序捕获屏幕

通过遍历视图层次结构中的俯视图并使用View.draw(画布)将其绘制为位图,您可以或多或少地捕获应用程序当前占用的屏幕区域的快照,但这不会记录状态栏、软键盘、OpenGL曲面等

如果您想做得更好,则需要使用外部工具。工具需要root或使用ADB接口,因为通过ADB接口启动的进程具有AID_图形权限。使用后一种方法,非特权应用程序可以连接到特权服务器进行录制

工具大致可分为以下几类:

  • 仅限根用户的帧缓冲区录制器应用程序(例如Screencast)。这些程序直接从/dev/graphics/fb0设备录制,但仅适用于帧缓冲区可读的设备(例如,不适用于Tegra 2 Nexus 7)

  • 仅限根用户的屏幕捕获录制器应用程序(例如SCR、Rec等)。这些应用程序通过SurfaceFlinger捕获屏幕,并在更广泛的设备上工作

  • 非根屏幕捕获录制器应用程序(例如,可录制、Ascrecorder)。这些应用程序要求用户在通过主机PC连接时启用USB调试并启动守护程序。此后,在设备重新启动之前,不需要主机PC。也可以录制音频

  • ADB工具(例如Android 4.4上的内置屏幕录制器)。要求您通过USB连接,无法捕获音频


为了完整起见,还有一些USB工具(如Mobizen)可以通过USB传输屏幕(受USB带宽限制,无法录制音频)一些设备还可以通过wifi传输屏幕,然后可以在单独的设备上捕获屏幕。

这是一篇相当古老的帖子,但我希望这将有助于仍在寻找记录android设备屏幕的方法的人:

自Android 5.0以来,有一个新的API可用于屏幕录制: MediaProjection允许捕获屏幕内容,但不能捕获系统音频。此外,它也不能捕获安全的屏幕内容


在Matt Snider的页面上,有一个关于如何使用API将屏幕实际记录到SD卡上文件的好例子:

因为棒棒糖,我们可以使用媒体投影API!(API 21+

以下是我用于录制的代码,请注意,我们首先需要获得该代码的用户权限;)

这不是最终的代码,而是一个很好的开始基础:)

我为您创建了一个处理此问题的。包括可自定义的通知显示,如果不想显示通知,可以禁用该通知显示

它需要API 21>


下面是一个关于如何使用它的简单演示:(更多信息可以在图书馆的自述中找到):

首先,在
活动中声明并初始化它:

public class MainActivity extends AppCompatActivity implements HBRecorderListener {
    //Declare HBRecorder
    HBRecorder hbRecorder;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);     

        //Init HBRecorder
        hbRecorder = new HBRecorder(this, this);        

}
然后,当您想开始录制时,可以调用:

private void startRecordingScreen() {
    MediaProjectionManager mediaProjectionManager = (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);
    Intent permissionIntent = mediaProjectionManager != null ? mediaProjectionManager.createScreenCaptureIntent() : null;
    startActivityForResult(permissionIntent, SCREEN_RECORD_REQUEST_CODE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == SCREEN_RECORD_REQUEST_CODE) {
        if (resultCode == RESULT_OK) {
            //It is important to call this before starting the recording
            hbRecorder.onActivityResult(resultCode, data, this);
            //Start screen recording
            hbRecorder.startScreenRecording(data);
        }
    }
}
您可以通过调用以下命令停止录制:

hbRecorder.stopScreenRecording();

onCompleteListener
让您知道文件是何时创建的:

@Override
public void HBRecorderOnComplete() {
    //This is called once the file was created
}

我还添加了一系列可以设置的参数,比如更改
音频比特率
AudioSamplingRate
等。

我认为我们必须使用工具进行录音。我的要求与这些不同,但他们如何在不使用任何外部工具的情况下进行录音?是的,可以捕获屏幕,然后添加到视频中。如果不使用任何外部工具,我将如何进行录音?你能给我一些指导吗?你知道如何捕捉屏幕,然后你添加图像以获得视频虽然我没有得到具体的答案,但你提供了一些关于屏幕快照帧缓冲区和根访问的想法。我将进一步研究它,并将其标记为正确答案。Thanx的指导原则。此选择的解决方案必须过时,因为Play Store中肯定有不需要root的应用程序
@Override
public void HBRecorderOnComplete() {
    //This is called once the file was created
}