Android录屏录音时,当使用 mediaRecorder.setAudioSource时报错failed to get surface

今天在写录屏录音时,单纯的录屏功能是正常使用的,但是添加上录音功能之后就一直报错,failed to get surface,

首先以为是没有权限的问题,但是后来检查完代码,发现权限都是没有问题的;

第二步检查了存储路径发现也是没有问题的;

然后就比较迷茫,不知道该怎么解决,反复测试之后,在调用的时候捕捉异常之后可以解决

代码如下:

private void createMediaRecorder() {
    int width = displayMetrics.widthPixels;
    int height = displayMetrics.heightPixels;
    int densityDpi = displayMetrics.densityDpi;

    // 创建保存路径
    final File dirFile = FileUtils.getCacheMovieDir(this);
    boolean mkdirs = dirFile.mkdirs();
    // 创建保存文件
    mediaFile = new File(dirFile, FileUtils.getDateName("MediaRecorder") + ".mp4");

    // 调用顺序不能乱
    mediaRecorder = new MediaRecorder();

    mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    mediaRecorder.setOutputFile(mediaFile.getAbsolutePath());

    mediaRecorder.setVideoSize(width, height);
    mediaRecorder.setVideoFrameRate(30);
    mediaRecorder.setVideoEncodingBitRate(5 * width * height);
    mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
    mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC)

    try {
        mediaRecorder.prepare();
    } catch (Exception e) {
        e.printStackTrace();
    }

    if (virtualDisplayMediaRecorder == null) {
        virtualDisplayMediaRecorder = mediaProjection.createVirtualDisplay("MediaRecorder",
                width, height, densityDpi, DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
                mediaRecorder.getSurface(), null, null);
    } else {
        virtualDisplayMediaRecorder.setSurface(mediaRecorder.getSurface());
    }
}

调用:

 

public void startRecording() {
    if (!isMediaRecorderEnable) {
        return;
    }
    if (isMediaRecording) {
        return;
    }
    try {
    createMediaRecorder();

    mediaRecorder.start();

    isMediaRecording = true;
    } catch (Exception e) {
        e.printStackTrace();
    }
}

ps:目前支持的只有麦克风里面的录制;如果带上耳机就不能录制;

目前还没有修改,之后修改完再补充;以便后续查看

你可能感兴趣的:(android)