【问题标题】:MediaRecorder not getting initialized properly "start failed -19 which means "NO_INIT"" and "E/MediaRecorder: stop called in an invalid state: 0"MediaRecorder 未正确初始化“启动失败 -19,表示“NO_INIT””和“E/MediaRecorder:在无效状态下调用停止:0”
【发布时间】:2016-06-06 07:36:27
【问题描述】:

我想从这个应用程序录制视频(带音频)

但只要我按下开始录制,它就会给出“E/MediaRecorder:启动失败:-19”

我参考了这个链接 ---> Android MediaRecorder - "start failed: -19" 并根据他们设置了支持的 videoSize 但我又失败了

并且我已经根据 ---> 上给出的状态图设置了方法调用 “developer.android.com/reference/android/media/MediaRecorder.html”网站

并且我已经按照 ---> "developer.android.com/guide/appendix/media-formats.html" 网站

上的方式设置了音频和视频参数

但似乎没有任何效果:(

我正在我的运行 MIUI 的手机 Mi Redmi 2

上对此进行测试

这就是 UI 的样子 ---> Cam UI

这是我下面的代码:-

/*to Start recording*/
  public void startRecording() {
    Log.e(tag, "Begin StartRecording");
    if (mRecorder != null) {
        mRecorder.stop();
        mRecorder.release();
    }
    mRecorder = new MediaRecorder();
    mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
    mRecorder.setAudioChannels(1);
    mRecorder.setAudioSamplingRate(24);
    mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
    mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
    mRecorder.setAudioEncodingBitRate(24);
    mRecorder.setVideoEncodingBitRate(56);
    final List<Camera.Size> mSupportedVideoSizes = getSupportedVideoSizes(camera);
    for (Camera.Size str : mSupportedVideoSizes)
        Log.e(tag, "mSupportedVideoSizes "+str.width + ":" + str.height + " ... "
                + ((float) str.width / str.height));

    File dir = Environment.getExternalStorageDirectory();
    try {
        audiofile = File.createTempFile("sound", ".mp4", dir);
    } catch (IOException e) {
        Log.e(tag, "external storage access error");
        return;
    }
    mRecorder.setOutputFile(audiofile.getAbsolutePath());
    mRecorder.setVideoSize(176, 144);
    mRecorder.setVideoFrameRate(12);
    mRecorder.setMaxDuration(20000);
    mRecorder.setPreviewDisplay(surfaceHolder.getSurface());

    try {
        mRecorder.prepare();
    } catch (IllegalStateException | IOException e) {
        e.printStackTrace();
        Log.w(tag, e);
    }
    try {
        mRecorder.start();
        Toast.makeText(this, "Recording....", Toast.LENGTH_SHORT).show();

    } catch (Throwable t) {
        t.printStackTrace();
        Log.w(tag, t);

    }

}


 /*To stop recording*/
public void stopRecording() {
    Log.e("", "Begin StopChange");
    if (mRecorder != null)
        try {
            mRecorder.stop();
            Toast.makeText(this, "Recording STOPPED .. ", Toast.LENGTH_SHORT).show();
        } catch (RuntimeException e) {
            e.printStackTrace();
        } finally {
            mRecorder.reset();
            mRecorder.release();

            mRecorder = null;
        }
}

这里是 Android Manifest 权限:---

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.RECORD_VIDEO" />
<uses-permission android:name="android.permission.STORAGE" />

Logcat :--->

E/MediaRecorder: start failed: -19
02-24 13:40:32.070 14892-14892/pkg.android.chintan.khetiya.cp W/System.err: java.lang.RuntimeException: start failed.
02-24 13:40:32.070 14892-14892/pkg.android.chintan.khetiya.cp W/System.err:     at android.media.MediaRecorder.start(Native Method)
02-24 13:40:32.070 14892-14892/pkg.android.chintan.khetiya.cp W/System.err:     

02-25 16:40:28.952 10315-10315/pkg.android.chintan.khetiya.cp I/Choreographer: Skipped 37 frames!  The application may be doing too much work on its main thread.

首先我按下 1) 开始预览按钮 然后 2) 开始录制按钮 然后在制作 vid 3) 停止录制 最后4) 停止预览

请告诉我我哪里错了... 任何帮助将不胜感激提前感谢!

【问题讨论】:

  • 在看到文件大小之前是否停止录制?
  • 是的...我这里有 4 个按钮 1) 开始预览 2) 停止预览 3) 开始录制 4) 停止录制
  • 我应该也发布 xml 代码吗?
  • 您是否允许写入外部存储(清单)?
  • 是的,我也发布了清单文件

标签: android


【解决方案1】:

在设置 MediaRecorder 之前,您必须调用
camera?.unlock()

【讨论】:

    【解决方案2】:

    尝试在mRecorder.setVideoSize(320, 240);之前设置mRecorder.setVideoFrameRate(30);

    希望这会有所帮助。

    【讨论】:

    • 我仍然在 logcat 中遇到该错误....
    • 我应该怎么做才能获得更多的支持和帮助?
    猜你喜欢
    • 1970-01-01
    • 2016-12-30
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    相关资源
    最近更新 更多