Android 无法为前置摄像头设置高质量配置文件
当我不断得到“11-15 01:00:53.185:E/MediaRecorder(976):setOutputFormat在无效状态下调用时,此摄像机配置文件中一定缺少一些内容:1 “打开”记录器。设置配置文件(配置文件) 有什么想法吗? 谢谢Android 无法为前置摄像头设置高质量配置文件,android,android-camera,android-capture,Android,Android Camera,Android Capture,当我不断得到“11-15 01:00:53.185:E/MediaRecorder(976):setOutputFormat在无效状态下调用时,此摄像机配置文件中一定缺少一些内容:1 “打开”记录器。设置配置文件(配置文件) 有什么想法吗? 谢谢 编辑:我还可以补充一点,如果我输入编解码器之类的东西,代码就可以正常工作。只是因为某些原因,我无法确定最佳质量。我设法解决了这个问题,实际上我开始考虑改变 当您查看MediaRecorder流程图时,首先看到的是定义的音频源和视频源。此外,在使用摄像机
编辑:我还可以补充一点,如果我输入编解码器之类的东西,代码就可以正常工作。只是因为某些原因,我无法确定最佳质量。我设法解决了这个问题,实际上我开始考虑改变
当您查看MediaRecorder流程图时,首先看到的是定义的音频源和视频源。此外,在使用摄像机配置文件时,这两项显然没有定义。然而,在定义了这两行之后,MediaRecorder仍然拒绝启动。这里缺少的是“camera.unlock()”,因为我的相机在以前的测试中是“拍摄”的。所以您在设置录音机之前放置了camera.unlock()?请注意,引用的代码是错误的。用于
Camera.open()
的整数索引不是Camera.CameraInfo
类中的常量之一。
package com.apress.proandroidmedia.ch1.cameraintent;
import java.io.IOException;
import android.app.Activity;
import android.hardware.Camera;
import android.media.CamcorderProfile;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class JustRecord extends Activity implements SurfaceHolder.Callback{
SurfaceView cameraView;
SurfaceHolder surfaceHolder;
Camera camera;
MediaRecorder recorder;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main1);
cameraView = (SurfaceView) findViewById(R.id.CameraView);
surfaceHolder = cameraView.getHolder();
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
surfaceHolder.addCallback(this);
}
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
try{
camera = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT);
camera.setDisplayOrientation(90);
}
catch (Exception exception){
camera.release();
exception.printStackTrace();
}
recorder = new MediaRecorder();
recorder.setCamera(camera);
CamcorderProfile profile = CamcorderProfile.get(Camera.CameraInfo.CAMERA_FACING_FRONT, CamcorderProfile.QUALITY_HIGH);
if(profile != null) {
recorder.setProfile(profile);
}else {
//default to basic H263 and AMR_NB if profile not found
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
}
recorder.setOutputFile("/sdcard/videocapture_example.mp4");
recorder.setMaxDuration(5000); // 50 seconds
prepareRecorder();
recorder.start();
}
@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
// TODO Auto-generated method stub
//camera.stopPreview();
recorder.stop();
recorder.release();
camera.release();
}
private void prepareRecorder() {
recorder.setPreviewDisplay(surfaceHolder.getSurface());
try {
recorder.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
finish();
} catch (IOException e) {
e.printStackTrace();
finish();
}
}
}