uni-app android录屏原生插件 - wenju 录屏能否不存本机

发布于 1周前 作者 sinazl 来自 Uni-App

uni-app android录屏原生插件 - wenju 录屏能否不存本机

能不能不存到本地 直接上传服务器。或者能删本地视频吗。。存不了那么多

1 回复

在开发uni-app时,如果你需要实现Android录屏功能且不希望将录制的视频保存到本机,可以通过原生插件来实现这一需求。以下是一个简要的思路和代码示例,展示如何在Android原生代码中实现录屏并实时处理数据而不保存到本地存储。

思路

  1. 创建原生插件:首先,你需要创建一个uni-app的原生插件,这个插件将包含Android平台的代码。

  2. 使用MediaProjection API:Android的MediaProjection API允许你捕获屏幕内容,你可以使用它来录制屏幕。

  3. 处理录制数据:在录制过程中,你可以直接处理录制的帧数据,而不是将其写入文件。

代码示例

1. 创建原生插件

uni_modules目录下创建一个新的原生插件,比如screen-recorder

2. Android原生代码

android/src/main/java/com/yourpackage/screenrecorder目录下创建一个ScreenRecorder.java文件,内容如下:

package com.yourpackage.screenrecorder;

import android.app.Activity;
import android.media.projection.MediaProjection;
import android.media.projection.MediaProjectionManager;
import android.media.MediaRecorder;
import android.os.Handler;
import android.os.Looper;

public class ScreenRecorder {
    private MediaProjection mediaProjection;
    private MediaRecorder mediaRecorder;

    public void startRecording(Activity activity, int resultCode, Intent data) {
        MediaProjectionManager projectionManager = (MediaProjectionManager) activity.getSystemService(Context.MEDIA_PROJECTION_SERVICE);
        mediaProjection = projectionManager.getMediaProjection(resultCode, data);

        mediaRecorder = new MediaRecorder();
        // 设置MediaRecorder参数,但不设置输出文件
        // ...

        mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);

        mediaRecorder.createVirtualDisplay("ScreenCapture",
                720, 1280, getScreenDensity(activity),
                DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
                mediaProjection.createVirtualDisplay("ScreenCapture",
                        720, 1280, getScreenDensity(activity),
                        DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC,
                        new Surface(new SurfaceTexture(0)), null, null));

        mediaRecorder.start();
    }

    private int getScreenDensity(Context context) {
        DisplayMetrics metrics = new DisplayMetrics();
        ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics(metrics);
        return metrics.densityDpi;
    }

    public void stopRecording() {
        if (mediaRecorder != null) {
            mediaRecorder.stop();
            mediaRecorder.reset();
        }
    }
}

注意:在MediaRecorder的配置中,我们没有设置输出文件路径。这意呀着你需要自己处理mediaRecorder.getOutputStream()返回的数据流,进行实时处理或者发送到服务器。

注意事项

  • 权限处理:确保你的应用有录制屏幕的权限。
  • 性能考虑:实时处理屏幕录制数据可能会对性能有较大影响,特别是在高分辨率和高帧率的情况下。
  • 资源管理:确保在不需要时正确释放资源,避免内存泄漏。

通过上述方法,你可以在uni-app中实现Android录屏功能而不保存到本机。

回到顶部