Android MediaRecorder启动失败-19

Android MediaRecorder启动失败-19,android,runtimeexception,mediarecorder,Android,Runtimeexception,Mediarecorder,我正在使用Live555开发一个Android流媒体应用程序。因此,我决定分开录制音频和视频来处理流。但不幸的是,我在尝试开始录制时遇到了一个RuntimeException private void startRecording() throws IOException { if (videoRecorder == null) { videoRecorder = new MediaRecorder(); videoRecorder.setPreviewD

我正在使用Live555开发一个Android流媒体应用程序。因此,我决定分开录制音频和视频来处理流。但不幸的是,我在尝试开始录制时遇到了一个RuntimeException

private void startRecording() throws IOException {
    if (videoRecorder == null) {
        videoRecorder = new MediaRecorder();
        videoRecorder.setPreviewDisplay(preview.getHolder().getSurface());
        videoRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
        videoRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        videoRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
        videoRecorder.setVideoSize(320,24);
        videoRecorder.setVideoFrameRate(25);
        videoRecorder.setOutputFile(video.getFD());
    }

    if (audioRecorder == null) {
        audioRecorder = new MediaRecorder();
        audioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        audioRecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);
        audioRecorder.setOutputFile(audio.getFD());
    }

    if (!isStreaming) {
        videoRecorder.prepare();
        videoRecorder.start(); // RuntimeException
        audioRecorder.prepare();
        audioRecorder.start();
        isStreaming = true;

    } else {
        stopRecording();
        isStreaming = false;
    }

    Thread t = new Thread(new LiveStreamer(this, video, audio));
    t.setPriority(Thread.MAX_PRIORITY);
    t.start();
}
我在互联网上搜索了一段时间,但没有一个成功的解决方案对我有效。下面是日志:

    01-02 16:17:09.355: E/MediaRecorder(11256): start failed: -19
01-02 16:17:09.355: D/AndroidRuntime(11256): Shutting down VM
01-02 16:17:09.355: W/dalvikvm(11256): threadid=1: thread exiting with uncaught exception (group=0x41884da0)
01-02 16:17:09.355: E/AndroidRuntime(11256): FATAL EXCEPTION: main
01-02 16:17:09.355: E/AndroidRuntime(11256): Process: de.douglasmedia.LiveCam, PID: 11256
01-02 16:17:09.355: E/AndroidRuntime(11256): java.lang.RuntimeException: start failed.
01-02 16:17:09.355: E/AndroidRuntime(11256):    at android.media.MediaRecorder.start(Native Method)
01-02 16:17:09.355: E/AndroidRuntime(11256):    at de.douglasmedia.LiveCam.MainActivity.startRecording(MainActivity.java:139)
01-02 16:17:09.355: E/AndroidRuntime(11256):    at de.douglasmedia.LiveCam.MainActivity.access$0(MainActivity.java:116)
01-02 16:17:09.355: E/AndroidRuntime(11256):    at de.douglasmedia.LiveCam.MainActivity$1.onClick(MainActivity.java:66)
01-02 16:17:09.355: E/AndroidRuntime(11256):    at android.view.View.performClick(View.java:4637)
01-02 16:17:09.355: E/AndroidRuntime(11256):    at android.view.View$PerformClick.run(View.java:19422)
01-02 16:17:09.355: E/AndroidRuntime(11256):    at android.os.Handler.handleCallback(Handler.java:733)
01-02 16:17:09.355: E/AndroidRuntime(11256):    at android.os.Handler.dispatchMessage(Handler.java:95)
01-02 16:17:09.355: E/AndroidRuntime(11256):    at android.os.Looper.loop(Looper.java:136)
01-02 16:17:09.355: E/AndroidRuntime(11256):    at android.app.ActivityThread.main(ActivityThread.java:5586)
01-02 16:17:09.355: E/AndroidRuntime(11256):    at java.lang.reflect.Method.invokeNative(Native Method)
01-02 16:17:09.355: E/AndroidRuntime(11256):    at java.lang.reflect.Method.invoke(Method.java:515)
01-02 16:17:09.355: E/AndroidRuntime(11256):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
01-02 16:17:09.355: E/AndroidRuntime(11256):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
01-02 16:17:09.355: E/AndroidRuntime(11256):    at dalvik.system.NativeStart.main(Native Method)
以下是我的AndroidManifest的权限部分:

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

<uses-feature android:name="android.hardware.camra" />

在某个地方,我读到问题在于视频大小。因此,我尝试了允许的视频大小,但得到了相同的错误。有人知道如何解决这个问题吗?谢谢你的帮助

  • 您的视频大小不正确,应该是320x240而不是320x24。打字错误
  • 音频编码器未设置,您需要添加以下行

    录音机.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB); 录音机.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB)

  • 使用两台MediaRecorder的目的是什么?对于音频和视频,最好使用一台MediaRecorder

  • 下面的代码部分对我来说在MotoG设备上运行良好:

    private void startRecording() throws IOException {
        String storage = Environment.getExternalStorageDirectory().getAbsolutePath();
        if (mVideoRecorder == null) {
            mVideoRecorder = new MediaRecorder();
            mVideoRecorder.setPreviewDisplay(mSurfaceView.getHolder().getSurface());
            mVideoRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
            mVideoRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
            mVideoRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
            mVideoRecorder.setVideoSize(320,240);
            mVideoRecorder.setVideoFrameRate(30);
            FileOutputStream fileOutputStream = new FileOutputStream(new File(
                    storage + "/video.mp4"));
            FileDescriptor fd = fileOutputStream.getFD();
    
            mVideoRecorder.setOutputFile(fd);
        }
    
        if (mAudioRecorder == null) {
            mAudioRecorder = new MediaRecorder();
            mAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            mAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);
            mAudioRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
            FileOutputStream fileOutputStream = new FileOutputStream(new File(
                    storage + "/audio.mp4"));
            FileDescriptor fd = fileOutputStream.getFD();
            mAudioRecorder.setOutputFile(fd);
        }
    
        mVideoRecorder.prepare();
        mVideoRecorder.start(); // RuntimeException
        mAudioRecorder.prepare();
        mAudioRecorder.start();
    }
    

    谢谢你的回复!我删除了音频部分,只将相机中的图片记录到文件中(对于测试目的来说已经足够了)。但不幸的是,我也犯了同样的错误-(只需尝试上面粘贴的代码部分,它对我在MotoG设备上运行良好。我尝试了这个,但仍然得到相同的错误;-(我在我的三星Galaxy S5(Android 4.4.2)上测试了它)您在清单(camra)中犯了错误: