2011-11-28 97 views
1

我有一个应用程序可以在Android中录制视频,而不会在大多数手机和API级别出现问题。至创纪录的代码如下:录制视频的问题

recorder.setCamera(cam); 
recorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); 
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
if(Integer.valueOf(android.os.Build.VERSION.SDK) > 7){ 
    CamcorderProfile mProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_LOW); 
    recorder.setProfile(mProfile); 
}else{ 
    recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); 
    recorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT); 
} 
recorder.setOutputFile(path); 
recorder.setPreviewDisplay(holder.getSurface()); 
recorder.prepare(); 
recorder.start(); 

对于一个未知的原因,当这个代码执行的摩托罗拉型号MB632运行的是Android 2.3.5,我得到的logcat的以下错误:

OMXCodec  : Buffer count/size less than minimum required 
OMXCodec  : Allocate Buffer failed - error = -2147483648 
Media Recorder: start failed: -12 
Camera  : Error 100 
Application : frameworks/base/media/libstagefright/MPEG4Writer.cpp:2966 mCodecSpecificData 

而且返回一个异常。我尝试过所有类型的组合,并且缓冲区大小似乎不是您可以从API函数更改的东西。

+0

这可能帮助:http://stackoverflow.com/questions/6532554/trouble-trying-to-get-mediarecorder-to-work-correctly,看到评论 – Caner

+0

我读了,不过没有帮助许多。似乎有些相机不遵循正常的编程。我甚至已经通过API级别将其分解了,正如你所看到的,但没有运气。 –

回答

1

我意识到这是一个老问题,但我遇到了一个非常类似的问题上运行2.3.5的HTC Evo(PC36100)。我注意到SpyCamera(https://bitbucket.org/jimmod/spy-camera-os)在这个设备上工作。在审查代码后,我注意到我没有设置预览大小,预览格式和对焦模式,而SpyCamera是。我添加了代码来设置这些值,并且当我开始记录时,我停止了错误100。

Camera.Parameters params = camera.getParameters();   

params.setPreviewSize(640, 480); 
params.setPreviewFormat(ImageFormat.NV21); 
if (params.getSupportedFocusModes().contains(Camera.Parameters.FOCUS_MODE_AUTO)) { 
    params.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); 
} 
camera.setParameters(params);