【问题标题】:Android MediaRecorder: start failed: -2147483648Android MediaRecorder:启动失败:-2147483648
【发布时间】:2016-07-12 21:31:58
【问题描述】:

我已经使用 android 相机视频流传输了一段时间。我首先尝试了 libstreaming 包,但遇到了 this 问题。所以我按照谷歌相机示例code 编写了我自己的类。但是在我将ParcelFileDescriptor 传递给mMediaRecorder.setOutputFile 之后,我得到了这个错误:

E/MediaRecorder: start failed: -2147483648
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: sharedcameraandroid, PID: 14868
java.lang.RuntimeException: start failed.
at android.media.MediaRecorder.start(Native Method)
at MainActivity.startRecordingVideo(MainActivity.java:268)
at MainActivity.setUpMediaRecorder(MainActivity.java:257)

于是我上网查了一下,发现this(将输出格式改为3GPP),this改为add Thread.sleepthis。但他们都没有工作。所以我来问是否有人知道如何解决这个问题。

这是我的代码:

private void setUpMediaRecorder() throws IOException {
    final Activity activity = mActivity;
    if (null == activity) {
        return;
    }

    ParcelFileDescriptor[] parcelFileDescriptors = ParcelFileDescriptor.createPipe();
    mParcelRead = new ParcelFileDescriptor(parcelFileDescriptors[0]);
    mParcelWrite  = new ParcelFileDescriptor(parcelFileDescriptors[1]);

    mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
    mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
//        mMediaRecorder.setOutputFile((new File(mActivity.getExternalFilesDir(null), "video.mp4")).getAbsolutePath());
//        Log.d(TAG, (new File(mActivity.getExternalFilesDir(null), "video.mp4")).getAbsolutePath());
    mMediaRecorder.setOutputFile(mParcelWrite.getFileDescriptor());
    mMediaRecorder.setVideoEncodingBitRate(10000000);
    mMediaRecorder.setVideoFrameRate(30);
    // mMediaRecorder.setVideoSize(mVideoSize.getWidth(), mVideoSize.getHeight());
    mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
    mMediaRecorder.prepare();
    startRecordingVideo();
    // https://stackoverflow.com/questions/14598299/how-to-record-video-on-android-into-stream

    InputStream is = new ParcelFileDescriptor.AutoCloseInputStream(mParcelRead);
    RtspClient client = new RtspClient(is, releaseSampleFile());
    client.startStream();
}

如果我用注释行更改mMediaRecorder.setOutputFile(mParcelWrite.getFileDescriptor());,一切都很好。

感谢您的帮助!

【问题讨论】:

  • 你能得到解决方案吗..我也面临同样的问题。
  • 很遗憾,没有...我使用了另一个流媒体包
  • 你能告诉我们其他流媒体包吗?我们能够将 libstreaming 库与 MEDIA CODEC API 2 一起使用,但视频质量较低

标签: android video-streaming


【解决方案1】:

最近我在我的项目中遇到了这个问题。所以尝试改变一些参数。幸运的是,当我将 OutputFormat 更改为 MPEG_2_TS 时,它起作用了。

所以我的意思是将输出格式更改为 MPEG_2_TS。它对我有用。所以希望它对你有用。

【讨论】:

    猜你喜欢
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多