我们正在构建一个使用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日志:
当元素上的库存摄像机应用记录视频时,这是ADB日志:
所以我可以从中收集到的是,当我们调用.start()时,我们得到一个ERROR(0x80001009,0)并且OMX IL处于状态3。 我不确定“17级”与“19级”的含义是什么,但这是两个日志之间的另一个区别。
非常感谢任何帮助,谢谢!
答案 0 :(得分:1)
我认为配置文件/级别是指H.264配置文件和级别(虽然不是它们通常编码的方式:常见的H.264级别为3.2,4.1,通常编码为32,41;然后17是??) 。如果为true,那么它会受到您给mediarecorder的其他设置的影响,特别是分辨率,比特率和fps。
mMediaRecorder.setVideoFrameRate(mFPS);
mMediaRecorder.setVideoEncodingBitRate(mBitrate);
mMediaRecorder.setVideoSize(mWidth, mHeight);
我还注意到你从未设置输出格式。试试这个:
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
P.S。您也可以尝试省略对mRecorder.setProfile()
的调用,看看日志中的个人资料是否发生变化,以及是否有效。