2

我们正在构建一个使用 MediaRecorder 在 Android 上录制视频的应用程序,它可以在大多数硬件平台上完美运行。然而,Pantech 的 Element 平板电脑已被证明是一个挑战。当平板电脑在 Android 2.3.1 上时,应用程序在 MediaRecorder.start() 上崩溃。所以我们将平板电脑升级到 4.0.4,它停止了崩溃。

但是,现在它创建了文件,但创建的文件无法通过平板电脑或 PC 打开。我很确定存在编解码器问题,但我发现在 Android 上指定编解码器是一种令人抓狂的体验。

这是我们的 MediaRecorder 代码:

mRecorder = new MediaRecorder();

mCamera = Camera.open();

mCamera.unlock();

mRecorder.setCamera(mCamera); mRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); mRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIG H)); mRecorder.setOutputFile(fileToSave); mRecorder.setPreviewDisplay(mPreview.getHolder().getSurface()); mRecorder.prepare(); mRecorder.start(); //这调用很好,但一秒钟后崩溃

这是我们的应用程序录制视频时的 ADB 日志: 在此处输入图像描述

这是 Element 上的摄像机应用程序录制视频时的 ADB 日志: 在此处输入图像描述

所以我可以从中收集到的是,当我们调用 .start() 时,我们得到一个 ERROR(0x80001009, 0) 并且 OMX IL 处于状态 3。
我不确定“17 级”与“19 级”是什么意思,但这是两个日志之间的另一个区别。

非常感谢任何帮助,谢谢!

4

1 回答 1

1

我认为配置文件/级别是指 H.264 配置文件和级别(尽管不是它们通常的编码方式:常见的 H.264 级别是 3.2、4.1,通常编码为 32、41;那么 17 是??)。如果为真,那么它将受到您为 mediarecorder 提供的其他设置的影响,尤其是分辨率、比特率和 fps。

mMediaRecorder.setVideoFrameRate(mFPS);
mMediaRecorder.setVideoEncodingBitRate(mBitrate);
mMediaRecorder.setVideoSize(mWidth, mHeight);

我还注意到您从未设置输出格式。尝试这个:

mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);

PS您也可以尝试省略对mRecorder.setProfile()too的调用,看看日志中的配置文件是否更改,以及它是否有效。

于 2013-01-16T07:21:01.440 回答