Android 媒体记录器 - "start failed: -19"

标签 android android-camera android-mediarecorder

我正在尝试在 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());
        mediaRecorder.setMaxFileSize(maxFileSizeInBytes); // set to 50000
        mediaRecorder.prepare();
        Log.i(TAG, "d");

        mediaRecorder.start();
        Log.i(TAG, "e");

        return true;
        } catch (IllegalStateException e) {
            Log.i(TAG, "f");
            Log.e(TAG, e.getMessage());
            e.printStackTrace();
            camera.lock();
            return false;
        } catch (IOException e) {
            Log.i(TAG, "g");
            Log.e(TAG, e.getMessage());
            e.printStackTrace();
            camera.lock();
            return false;
        } catch (RuntimeException e) {
            Log.i(TAG, "h");
            Log.e(TAG, e.getMessage());
            camera.lock();
            return false;
        }
    }

所有调试日志(从“a”到“d”)都打印在日志中,因此看来 mediaRecorder.prepare() 之前的所有步骤都已正确完成。然后它捕获一个 RuntimeException 消息 start failed: -19。有一个类似的question ,但这并不能解决我的问题。

是否有任何其他原因导致出现此类错误?

最佳答案

刚刚在这一行中发现了错误:

mediaRecorder.setVideoSize(sView.getWidth(), sView.getHeight());

注释掉这一行后,代码完美运行!

关于Android 媒体记录器 - "start failed: -19",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10496969/

相关文章:

android - 升级到 Gradle 5 和 Android Plugin 3.3 后,我的构建失败并显示 "Metaspace"

android - SurfaceView 的截屏

android - 我可以在 WebView 中打开相机吗?

Android:使用 ParcelFileDescriptor 通过套接字使用 Mediarecorder 进行视频流传输

尽管在纵向 View 中录制,但使用 mediaRecorder 和表面 View 录制的 Android 视频无法在横向 View 中播放

android - 任何人都有 MediaRecorder 使用 ParcelFileDescriptor 和 createPipe()?

android - 使用Intent打开系统应用程序

android - 如何将联系人(vcard 格式)写入 NdefMessage?

android - 尝试播放声音 OnItemClick 时出错

android - 锁定屏幕并返回时相机不工作