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

时间:2021-03-15 07:02:15

Is it possible to record screen video of current running activity from same activity ?
I know how to take screenshot of current activity but don't have any idea about taking screen video record. How would I start with it ? I don't know how to start it.

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

6 个解决方案

#1


14  

Programmatically recording video from within your app will require root access. You'll notice that the apps available to do this in the Play Store prominently list "REQUIRES ROOT" in their app descriptions. You'll also notice that there may also be some specific hardware requirements for this approach to work ("Does not work on Galaxy Nexus or Tegra 2/3..." -- from the description of the Screencast Video Recorder app.

从您的应用程序中以编程方式录制视频将需要root访问权限。您会注意到Play商店中可用的应用程序突出显示其应用程序说明中的“需要根”。您还会注意到,这种方法可能还有一些特定的硬件要求(“不适用于Galaxy Nexus或Tegra 2/3 ......” - 来自Screencast Video Recorder应用程序的描述。

I have never written this code myself, but I've put together a very high level idea of the approach required. It appears from this post that you have to access the frame buffer data via "/dev/graphics/fb0". The access mode for the frame buffer is 660, which means that you need root access to get to it. Once you have root access, you can use the frame buffer data to create screen shots (this project might work for this task) and then create video from these screenshots (see this other SO question on how to create video from an image sequence).

我自己从未编写过这段代码,但我已经对所需的方法提出了非常高级的想法。从这篇文章中可以看出,您必须通过“/ dev / graphics / fb0”访问帧缓冲区数据。帧缓冲区的访问模式是660,这意味着您需要root访问权限才能访问它。一旦您具有root访问权限,就可以使用帧缓冲区数据来创建屏幕截图(此项目可能适用于此任务),然后从这些屏幕截图创建视频(请参阅另一个关于如何从图像序列创建视频的问题)。

I've used the Screencast app and it works well on a Samsung Note. I suspect that this is the basic approach they've taken.

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

#2


21  

Since Lollipop we can use the Media Projection API ! (API 21+)

自从棒棒糖以来我们可以使用Media Projection API! (API 21+)

Here is the following code that I use for recording, Note that we first need to get the user permissions for that ;)

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

private static final int CAST_PERMISSION_CODE = 22;
private DisplayMetrics mDisplayMetrics;
private MediaProjection mMediaProjection;
private VirtualDisplay mVirtualDisplay;
private MediaRecorder mMediaRecorder;

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

    mMediaRecorder = new MediaRecorder();

    mProjectionManager = (MediaProjectionManager) getSystemService
            (Context.MEDIA_PROJECTION_SERVICE);

    getWindowManager().getDefaultDisplay().getMetrics(mDisplayMetrics);

    prepareRecording();
}

private void startRecording() {
    // If mMediaProjection is null that means we didn't get a context, lets ask the user
    if (mMediaProjection == null) {
        // This asks for user permissions to capture the screen
        startActivityForResult(mProjectionManager.createScreenCaptureIntent(), CAST_PERMISSION_CODE);
        return;
    }
    mVirtualDisplay = createVirtualDisplay();
    mMediaRecorder.start();
}

private void stopRecording() {
    if (mMediaRecorder != null) {
        mMediaRecorder.stop();
        mMediaRecorder.reset();
    }
    if (mVirtualDisplay != null) {
        mVirtualDisplay.release();
    }
    if (mMediaProjection != null) {
        mMediaProjection.stop();
    }
    prepareRecording();
}

public String getCurSysDate() {
    return new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss").format(new Date());
}

private void prepareRecording() {
    try {
        mMediaRecorder.prepare();
    } catch (Exception e) {
        e.printStackTrace();
        return;
    }

    final String directory = Environment.getExternalStorageDirectory() + File.separator + "Recordings";
    if (!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
        Toast.makeText(this, "Failed to get External Storage", Toast.LENGTH_SHORT).show();
        return;
    }
    final File folder = new File(directory);
    boolean success = true;
    if (!folder.exists()) {
        success = folder.mkdir();
    }
    String filePath;
    if (success) {
        String videoName = ("capture_" + getCurSysDate() + ".mp4");
        filePath = directory + File.separator + videoName;
    } else {
        Toast.makeText(this, "Failed to create Recordings directory", Toast.LENGTH_SHORT).show();
        return;
    }

    int width = mDisplayMetrics.widthPixels;
    int height = mDisplayMetrics.heightPixels;

    mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
    mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
    mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    mMediaRecorder.setVideoEncodingBitRate(512 * 1000);
    mMediaRecorder.setVideoFrameRate(30);
    mMediaRecorder.setVideoSize(width, height);
    mMediaRecorder.setOutputFile(filePath);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode != CAST_PERMISSION_CODE) {
        // Where did we get this request from ? -_-
        Log.w(TAG, "Unknown request code: " + requestCode);
        return;
    }
    if (resultCode != RESULT_OK) {
        Toast.makeText(this, "Screen Cast Permission Denied :(", Toast.LENGTH_SHORT).show();
        return;
    }
    mMediaProjection = mProjectionManager.getMediaProjection(resultCode, data);
    // TODO Register a callback that will listen onStop and release & prepare the recorder for next recording
    // mMediaProjection.registerCallback(callback, null);
    mVirtualDisplay = getVirtualDisplay();
    mMediaRecorder.start();
}

private VirtualDisplay getVirtualDisplay() {
    screenDensity = mDisplayMetrics.densityDpi;
    int width = mDisplayMetrics.widthPixels;
    int height = mDisplayMetrics.heightPixels;

    return mMediaProjection.createVirtualDisplay(this.getClass().getSimpleName(),
            width, height, screenDensity,
            DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
            mMediaRecorder.getSurface(), null /*Callbacks*/, null /*Handler*/);
}

This is no the final code but a GOOD base for start :)

这不是最终的代码,但是开始的GOOD基础:)

#3


11  

Normal Android apps lack permission to capture the frame buffer (specifically, they aren't members of the AID_GRAPHICS group). This is for security reasons - otherwise they could snoop passwords etc from the soft keyboard. So in general you CANNOT capture the screen from an Android app without some way of getting around the privilege issue.

普通的Android应用程序缺少捕获帧缓冲区的权限(具体来说,它们不是AID_GRAPHICS组的成员)。这是出于安全原因 - 否则他们可能会从软键盘中窃取密码等。因此,一般情况下,如果没有某种方式解决权限问题,您无法从Android应用程序捕获屏幕。

You CAN more-or-less capture a snapshot of the screen area currently taken up by your application by traversing to the top View in your view hierarchy and drawing it into a Bitmap using View.draw(Canvas), however this will not record the status bar, soft keyboard, OpenGL surfaces etc.

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

If you want to do better than this you will need to use an external tool. Tools either need root or to use the ADB interface, since processes started via the ADB interface have the AID_GRAPHICS privilege. Using the latter method a non-privileged app can connect to a privileged server to do the recording.

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

Roughly tools can be divided into the following categories:

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

  • Root-only framebuffer recorder apps (e.g. Screencast). These record directly from the /dev/graphics/fb0 device but only works on devices where the framebuffer is readable (e.g, not on the Tegra 2 Nexus 7).

    仅限root的帧缓冲录像机应用程序(例如Screencast)。这些记录直接来自/ dev / graphics / fb0设备,但仅适用于帧缓冲可读的设备(例如,不在Tegra 2 Nexus 7上)。

  • Root-only screen capture recorder apps (e.g. SCR, Rec etc). These capture the screen via SurfaceFlinger and work on a much wider range of devices.

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

  • Non root screen capture recorder apps (e.g., Recordable, Ascrecorder). These require the user to enable USB debugging and start a daemon while connected via a host PC. Thereafter the host PC is not required until the device is rebooted. Can record audio as well.

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

  • ADB tools (e.g., the built-in screenrecorder on Android 4.4). Require you to be connected via a USB and can't capture audio.

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

A few months ago I did a comparison of the available apps which is available here:

几个月前,我对这里提供的可用应用进行了比较:

http://recordable.mobi/compare

For completeness there are also USB tools (e.g., Mobizen) that stream the screen across USB (limited by low USB bandwdith and can't record audio) and some devices can also transmit the screen over wifi, which can then captured on a separate device.

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

#4


4  

This is a quite old post but i hope this will help someone who is still searching for a way to record the screen of an android device:

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

Since Android 5.0 there is a new API that can be used for screen recording: MediaProjection The MediaProjection grants the ability to capture screen content, but not system audio. Also it won't capture secure screen content.

从Android 5.0开始,有一个可用于屏幕录制的新API:MediaProjection MediaProjection授予捕获屏幕内容但不捕获系统音频的功能。此外,它不会捕获安全的屏幕内容。

On the page of Matt Snider there is a good example on how to use the API to actually record the screen to a file on the sdcard: LINK

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

#5


2  

you can capture the screen via using DDMS as adb runs and has permission to the framebuffer:

您可以通过使用DDMS捕获屏幕作为adb运行并具有帧缓冲区的权限:

follow this link for more details :

点击此链接了解更多详情:

http://thetechjournal.com/electronics/android/how-to-capture-screenshots-and-record-video-on-android-device.xhtml

ALSO check this links may be get some ideas about what you need :

另外,检查此链接可能会获得有关您需要的一些想法:

http://answers.oreilly.com/topic/951-how-to-capture-video-of-the-screen-on-android/

http://www.mightypocket.com/2010/09/installing-android-screenshots-screen-capture-screen-cast-for-windows/

and check this project :

并检查这个项目:

http://sourceforge.net/projects/ashot/

hope this help .

希望这个帮助。

#6


-1  

You can record you screen in this way too: http://www.youtube.com/watch?v=4K2UDfP4lN8&list=UU4fDGas-Vz1xruuUY4QbF0w&feature=c4-overview.

您也可以这样记录屏幕:http://www.youtube.com/watch?v = 4K2UDfP4lN8&list = UU4fDGas-Vz1xruuUY4QbF0w&feature = c4-overview。

The video is titled "How to Capture/Record Android Screen Without Root( Mobizen)".

该视频标题为“如何捕获/录制没有根的Android屏幕(Mobizen)”。

The video reference the use of Mobizen: https://play.google.com/store/apps/details?id=com.rsupport.mvagent

该视频参考了Mobizen的使用:https://play.google.com/store/apps/details?id = com.rsupport.mvagent

#1


14  

Programmatically recording video from within your app will require root access. You'll notice that the apps available to do this in the Play Store prominently list "REQUIRES ROOT" in their app descriptions. You'll also notice that there may also be some specific hardware requirements for this approach to work ("Does not work on Galaxy Nexus or Tegra 2/3..." -- from the description of the Screencast Video Recorder app.

从您的应用程序中以编程方式录制视频将需要root访问权限。您会注意到Play商店中可用的应用程序突出显示其应用程序说明中的“需要根”。您还会注意到,这种方法可能还有一些特定的硬件要求(“不适用于Galaxy Nexus或Tegra 2/3 ......” - 来自Screencast Video Recorder应用程序的描述。

I have never written this code myself, but I've put together a very high level idea of the approach required. It appears from this post that you have to access the frame buffer data via "/dev/graphics/fb0". The access mode for the frame buffer is 660, which means that you need root access to get to it. Once you have root access, you can use the frame buffer data to create screen shots (this project might work for this task) and then create video from these screenshots (see this other SO question on how to create video from an image sequence).

我自己从未编写过这段代码,但我已经对所需的方法提出了非常高级的想法。从这篇文章中可以看出,您必须通过“/ dev / graphics / fb0”访问帧缓冲区数据。帧缓冲区的访问模式是660,这意味着您需要root访问权限才能访问它。一旦您具有root访问权限,就可以使用帧缓冲区数据来创建屏幕截图(此项目可能适用于此任务),然后从这些屏幕截图创建视频(请参阅另一个关于如何从图像序列创建视频的问题)。

I've used the Screencast app and it works well on a Samsung Note. I suspect that this is the basic approach they've taken.

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

#2


21  

Since Lollipop we can use the Media Projection API ! (API 21+)

自从棒棒糖以来我们可以使用Media Projection API! (API 21+)

Here is the following code that I use for recording, Note that we first need to get the user permissions for that ;)

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

private static final int CAST_PERMISSION_CODE = 22;
private DisplayMetrics mDisplayMetrics;
private MediaProjection mMediaProjection;
private VirtualDisplay mVirtualDisplay;
private MediaRecorder mMediaRecorder;

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

    mMediaRecorder = new MediaRecorder();

    mProjectionManager = (MediaProjectionManager) getSystemService
            (Context.MEDIA_PROJECTION_SERVICE);

    getWindowManager().getDefaultDisplay().getMetrics(mDisplayMetrics);

    prepareRecording();
}

private void startRecording() {
    // If mMediaProjection is null that means we didn't get a context, lets ask the user
    if (mMediaProjection == null) {
        // This asks for user permissions to capture the screen
        startActivityForResult(mProjectionManager.createScreenCaptureIntent(), CAST_PERMISSION_CODE);
        return;
    }
    mVirtualDisplay = createVirtualDisplay();
    mMediaRecorder.start();
}

private void stopRecording() {
    if (mMediaRecorder != null) {
        mMediaRecorder.stop();
        mMediaRecorder.reset();
    }
    if (mVirtualDisplay != null) {
        mVirtualDisplay.release();
    }
    if (mMediaProjection != null) {
        mMediaProjection.stop();
    }
    prepareRecording();
}

public String getCurSysDate() {
    return new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss").format(new Date());
}

private void prepareRecording() {
    try {
        mMediaRecorder.prepare();
    } catch (Exception e) {
        e.printStackTrace();
        return;
    }

    final String directory = Environment.getExternalStorageDirectory() + File.separator + "Recordings";
    if (!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
        Toast.makeText(this, "Failed to get External Storage", Toast.LENGTH_SHORT).show();
        return;
    }
    final File folder = new File(directory);
    boolean success = true;
    if (!folder.exists()) {
        success = folder.mkdir();
    }
    String filePath;
    if (success) {
        String videoName = ("capture_" + getCurSysDate() + ".mp4");
        filePath = directory + File.separator + videoName;
    } else {
        Toast.makeText(this, "Failed to create Recordings directory", Toast.LENGTH_SHORT).show();
        return;
    }

    int width = mDisplayMetrics.widthPixels;
    int height = mDisplayMetrics.heightPixels;

    mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
    mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
    mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    mMediaRecorder.setVideoEncodingBitRate(512 * 1000);
    mMediaRecorder.setVideoFrameRate(30);
    mMediaRecorder.setVideoSize(width, height);
    mMediaRecorder.setOutputFile(filePath);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode != CAST_PERMISSION_CODE) {
        // Where did we get this request from ? -_-
        Log.w(TAG, "Unknown request code: " + requestCode);
        return;
    }
    if (resultCode != RESULT_OK) {
        Toast.makeText(this, "Screen Cast Permission Denied :(", Toast.LENGTH_SHORT).show();
        return;
    }
    mMediaProjection = mProjectionManager.getMediaProjection(resultCode, data);
    // TODO Register a callback that will listen onStop and release & prepare the recorder for next recording
    // mMediaProjection.registerCallback(callback, null);
    mVirtualDisplay = getVirtualDisplay();
    mMediaRecorder.start();
}

private VirtualDisplay getVirtualDisplay() {
    screenDensity = mDisplayMetrics.densityDpi;
    int width = mDisplayMetrics.widthPixels;
    int height = mDisplayMetrics.heightPixels;

    return mMediaProjection.createVirtualDisplay(this.getClass().getSimpleName(),
            width, height, screenDensity,
            DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
            mMediaRecorder.getSurface(), null /*Callbacks*/, null /*Handler*/);
}

This is no the final code but a GOOD base for start :)

这不是最终的代码,但是开始的GOOD基础:)

#3


11  

Normal Android apps lack permission to capture the frame buffer (specifically, they aren't members of the AID_GRAPHICS group). This is for security reasons - otherwise they could snoop passwords etc from the soft keyboard. So in general you CANNOT capture the screen from an Android app without some way of getting around the privilege issue.

普通的Android应用程序缺少捕获帧缓冲区的权限(具体来说,它们不是AID_GRAPHICS组的成员)。这是出于安全原因 - 否则他们可能会从软键盘中窃取密码等。因此,一般情况下,如果没有某种方式解决权限问题,您无法从Android应用程序捕获屏幕。

You CAN more-or-less capture a snapshot of the screen area currently taken up by your application by traversing to the top View in your view hierarchy and drawing it into a Bitmap using View.draw(Canvas), however this will not record the status bar, soft keyboard, OpenGL surfaces etc.

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

If you want to do better than this you will need to use an external tool. Tools either need root or to use the ADB interface, since processes started via the ADB interface have the AID_GRAPHICS privilege. Using the latter method a non-privileged app can connect to a privileged server to do the recording.

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

Roughly tools can be divided into the following categories:

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

  • Root-only framebuffer recorder apps (e.g. Screencast). These record directly from the /dev/graphics/fb0 device but only works on devices where the framebuffer is readable (e.g, not on the Tegra 2 Nexus 7).

    仅限root的帧缓冲录像机应用程序(例如Screencast)。这些记录直接来自/ dev / graphics / fb0设备,但仅适用于帧缓冲可读的设备(例如,不在Tegra 2 Nexus 7上)。

  • Root-only screen capture recorder apps (e.g. SCR, Rec etc). These capture the screen via SurfaceFlinger and work on a much wider range of devices.

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

  • Non root screen capture recorder apps (e.g., Recordable, Ascrecorder). These require the user to enable USB debugging and start a daemon while connected via a host PC. Thereafter the host PC is not required until the device is rebooted. Can record audio as well.

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

  • ADB tools (e.g., the built-in screenrecorder on Android 4.4). Require you to be connected via a USB and can't capture audio.

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

A few months ago I did a comparison of the available apps which is available here:

几个月前,我对这里提供的可用应用进行了比较:

http://recordable.mobi/compare

For completeness there are also USB tools (e.g., Mobizen) that stream the screen across USB (limited by low USB bandwdith and can't record audio) and some devices can also transmit the screen over wifi, which can then captured on a separate device.

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

#4


4  

This is a quite old post but i hope this will help someone who is still searching for a way to record the screen of an android device:

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

Since Android 5.0 there is a new API that can be used for screen recording: MediaProjection The MediaProjection grants the ability to capture screen content, but not system audio. Also it won't capture secure screen content.

从Android 5.0开始,有一个可用于屏幕录制的新API:MediaProjection MediaProjection授予捕获屏幕内容但不捕获系统音频的功能。此外,它不会捕获安全的屏幕内容。

On the page of Matt Snider there is a good example on how to use the API to actually record the screen to a file on the sdcard: LINK

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

#5


2  

you can capture the screen via using DDMS as adb runs and has permission to the framebuffer:

您可以通过使用DDMS捕获屏幕作为adb运行并具有帧缓冲区的权限:

follow this link for more details :

点击此链接了解更多详情:

http://thetechjournal.com/electronics/android/how-to-capture-screenshots-and-record-video-on-android-device.xhtml

ALSO check this links may be get some ideas about what you need :

另外,检查此链接可能会获得有关您需要的一些想法:

http://answers.oreilly.com/topic/951-how-to-capture-video-of-the-screen-on-android/

http://www.mightypocket.com/2010/09/installing-android-screenshots-screen-capture-screen-cast-for-windows/

and check this project :

并检查这个项目:

http://sourceforge.net/projects/ashot/

hope this help .

希望这个帮助。

#6


-1  

You can record you screen in this way too: http://www.youtube.com/watch?v=4K2UDfP4lN8&list=UU4fDGas-Vz1xruuUY4QbF0w&feature=c4-overview.

您也可以这样记录屏幕:http://www.youtube.com/watch?v = 4K2UDfP4lN8&list = UU4fDGas-Vz1xruuUY4QbF0w&feature = c4-overview。

The video is titled "How to Capture/Record Android Screen Without Root( Mobizen)".

该视频标题为“如何捕获/录制没有根的Android屏幕(Mobizen)”。

The video reference the use of Mobizen: https://play.google.com/store/apps/details?id=com.rsupport.mvagent

该视频参考了Mobizen的使用:https://play.google.com/store/apps/details?id = com.rsupport.mvagent