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:目前支持的只有麦克风里面的录制;如果带上耳机就不能录制;

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值