相关疑难解决方法(0)

Android无法使用前置摄像头录制视频,MediaRecorder启动失败:-19

我有两个不同的代码库有同样的问题.

第一个是直接从developer.android.com复制的代码: http ://developer.android.com/guide/topics/media/camera.html#custom-camera

第二个是这段代码:

http://android-er.blogspot.com.au/2011/10/simple-exercise-of-video-capture-using.html

两者都可以正常使用后置摄像头,但是一旦我尝试使用前置摄像头,我就会收到错误信息.

这发生在以下设备上:

  • Nexus S 4.1.2

  • Galaxy Nexus 4.1.2

  • Nexus 7 4.2.1(它只有前置摄像头)

我已经尝试了看起来像2.2时代的Camera Params,有些人声称需要一些三星和HTC设备,尽管有多篇不同的文章引用了不同的字符串键:

c = Camera.open(frontFacingCameraID); // attempt to get a Camera instance
Camera.Parameters params = c.getParameters();
params.set("cam-mode", 1);
params.set("cam_mode", 1);
params.set("camera-id", 1);
c.setParameters(params);
Run Code Online (Sandbox Code Playgroud)

这些都不起作用,请注意我正在检测Nexus 7上正确的前置摄像头ID:0.但是所有设备的结果都是一样的.

我尝试使用低质量的配置文件,我尝试过多种方式手动设置视频分辨率,编码器,输出格式,比特率,帧速率和视频大小,但没有一个有效.

让我觉得大多数代码没有错的事情是普通相机工作正常.所以我的猜测是它与设置媒体记录器的prepareVideoRecorder()/ prepareMediaRecorder()方法有关.

也许Media Recorder手动编码已知可在前置摄像头上工作的设置?

我不得不说,Android Camera和MediaRecorder API很糟糕.与iOS相比,它有点混乱,更不用说一些可怕的外观参数不兼容性问题和分散的设备环境中的不同分辨率.

假设我可以在我的JB设备上运行,有没有人从经验中知道这些问题是否已通过API 15 ICS解决了?

如果它太难以支持,我会考虑不支持API 10 Gingerbread.

video camera android android-camera mediarecorder

23
推荐指数
2
解决办法
2万
查看次数

Android MediaRecorder - "开始失败:-19"

我正在尝试在Android上创建一个录像机,并且我已经准备好了应该正常工作的代码 - 但我不断收到错误消息start failed: -19.

这是我的代码:

public boolean startRecording() {
    try {
        camera.unlock();
        mediaRecorder = new MediaRecorder();
        mediaRecorder.setOnErrorListener(new MediaRecorder.OnErrorListener() {

                @Override
                public void onError(MediaRecorder mr, int what, int extra) {
                Log.i(TAG, "Error");
            }
        });

        mediaRecorder.setCamera(camera);
        mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
        Log.i(TAG, "a");

        mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
        mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
        Log.i(TAG, "b");

        mediaRecorder.setMaxDuration(maxDurationInMs); // set to 20000

        String uniqueOutFile = OUTPUT_FILE + System.currentTimeMillis() + ".3gp";
        File outFile = new File(uniqueOutFile);
        if (outFile.exists()) {
            outFile.delete();
        }
        mediaRecorder.setOutputFile(uniqueOutFile);
        mediaRecorder.setVideoFrameRate(videoFramesPerSecond); // set to 20
        mediaRecorder.setVideoSize(sView.getWidth(), sView.getHeight());
        Log.i(TAG, "c");

        mediaRecorder.setPreviewDisplay(holder.getSurface()); …
Run Code Online (Sandbox Code Playgroud)

android android-camera android-mediarecorder

6
推荐指数
1
解决办法
3万
查看次数