gpt4 book ai didi

android - MediaRecorder 准备失败,setVideoSize 1080p

转载 作者:行者123 更新时间:2023-11-29 17:31:11 27 4
gpt4 key购买 nike

我的项目中有一个 MediaRecorder 对象,它被初始化如下:

private void initRecorder() {
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(60);
mMediaRecorder.setVideoSize(DISPLAY_WIDTH, DISPLAY_HEIGHT);
String filepath_external = Environment.getExternalStorageDirectory().getAbsolutePath() + "/test/";
File f = new File(filepath_external);
if(!f.exists()){
f.mkdirs();
}
mMediaRecorder.setOutputFile(filepath_external + System.currentTimeMillis() + ".mp4");
}

如果我设置

private static int DISPLAY_WIDTH = 1024;
private static int DISPLAY_HEIGHT = 768;

然后调用 initRecorder() 然后调用 mMediaRecorder.prepare(),一切正常。

但是,我想用智能手机屏幕的尺寸进行录制。所以我使用下面的代码来设置宽度和高度:

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
DISPLAY_WIDTH = size.x;
DISPLAY_HEIGHT = size.y;

现在宽度 = 1920,高度 = 1080(基本上是 1080p)。结果是我的 Activity 甚至没有开始,产生了以下错误:

E/MediaRecorder: prepare failed: -2147483648

W/System.err: java.io.IOException: prepare failed.

W/System.err: at android.media.MediaRecorder._prepare(Native Method)

W/System.err: at android.media.MediaRecorder.prepare(MediaRecorder.java:873)

W/System.err: at com.lfdversluis.testrecord.RecordActivity.prepareRecorder(RecordActivity.java:161)

为什么它不起作用,我怎样才能让它起作用?


如果我在 getSupportedVideoSizes() 中打印所有支持的视频尺寸,我得到:


可选尺寸:1920 1080
可选尺寸:1440 1080
可选尺寸:1280 720
可选尺寸:800 450
可选尺寸:720 480
可选尺寸:640 480
可选尺寸:320 240
可选尺寸:176 144

所以应该支持 1920 x 1080...


按如下方式使用 CamcorderProfile,结果我也得到了 1920 x 1080。同样,准备功能失败:

CamcorderProfile camcorderProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
int cameraWidth = camcorderProfile != null ? camcorderProfile.videoFrameWidth : -1;
int cameraHeight = camcorderProfile != null ? camcorderProfile.videoFrameHeight : -1;
DISPLAY_WIDTH = cameraWidth;
DISPLAY_HEIGHT = cameraHeight;
Log.e("Campcorder profile", String.format("%s %s", DISPLAY_WIDTH, DISPLAY_HEIGHT));

最佳答案

在 CommonsWare 的帮助下,我找到了这个问题。

确保同时检查相机参数中的 getSupportedPreviewFrameRates。硬编码 60 或 30 fps,例如 Telecine案例可能并不总是适用于所有设备。如果您使用 CamcorderProfile,还要将帧速率设置为 camcorderProfile.videoFrameRate;

关于android - MediaRecorder 准备失败,setVideoSize 1080p,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32939016/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com