Ale*_*lex 28 android video-capture mediarecorder android-mediarecorder
我正在使用MediaRecorder录制视频.我的代码在2.3.3上工作正常但在4.0.3上失败.
问题如下:代码mediaRecorder.stop()抛出RuntimeExeption
java.lang.RuntimeException: stop failed.
at android.media.MediaRecorder.stop(Native Method)
Run Code Online (Sandbox Code Playgroud)
使用LogCat消息
04-05 15:10:51.815: E/MediaRecorder(15709): stop failed: -1007
Run Code Online (Sandbox Code Playgroud)
UPDATE
我发现,MediaPlayer几乎在启动后立即报告错误(通过MediaPlayer.OnErrorListener).错误代码为100(媒体服务器死机),额外-1007.
更新2准备MediaRecorder的代码
c = Camera.open();
...
// Step 1: Unlock and set camera to MediaRecorder
camera.unlock();
mediaRecorder.setCamera(camera);
// Step 2: Set sources
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
// Step 3: Set a CamcorderProfile (requires API Level 8 or higher)
CamcorderProfile profile = CamcorderProfile
.get(CamcorderProfile.QUALITY_HIGH);
// manual set up!
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setVideoEncodingBitRate(profile.videoBitRate);
mediaRecorder.setVideoFrameRate(profile.videoFrameRate);
mediaRecorder.setVideoSize(profile.videoFrameWidth,
profile.videoFrameHeight);
mediaRecorder.setAudioChannels(profile.audioChannels);
mediaRecorder.setAudioEncodingBitRate(profile.audioBitRate);
mediaRecorder.setAudioSamplingRate(profile.audioSampleRate);
mediaRecorder.setAudioEncoder(profile.audioCodec);
//mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
mediaRecorder.setVideoEncoder(profile.videoCodec);
// mediaRecorder.setProfile(profile);
// Step 4: Set output file
mediaRecorder.setOutputFile("somefile.mp4");
// Step 5: Set the preview output
mediaRecorder.setPreviewDisplay(preview.getHolder().getSurface());
// Step 6: Prepare configured MediaRecorder
try {
mediaRecorder.prepare();
} catch ...
{ release mediaRecorder}
Run Code Online (Sandbox Code Playgroud)
然后我简单地调用mediaRecorder.start()请注意,我需要将视频编码为mp4格式.此代码适用于Samsng Galaxy GIO(android 2.3.3),并且在Acer E305(android 4.0.2)中描述失败
有任何想法吗?谢谢.
Ale*_*lex 22
终于解决了.问题是在设置相机的实际预览之前设置预览大小.预览大小必须等于所选的视频大小.
CamcorderProfile profile = [get required profile];
Camera.Parameters parameters = mCamera.getParameters();
parameters.setPreviewSize(profile.videoFrameWidth,profile.videoFrameHeight);
mCamera.setParameters(parameters);
mCamera.setPreviewDisplay([surface holder]);
mCamera.startPreview();
...
//configure MediaRecorder and call MediaRecorder.start()
Run Code Online (Sandbox Code Playgroud)
Jos*_*gia 15
在4.0.3中引用MediaRecorder.java中的"stop"方法的文档:
停止录制.在start()之后调用它.录制停止后,您必须再次对其进行配置,就像刚刚构建完一样.请注意,如果在调用stop()时未收到有效的音频/视频数据,则会故意将RuntimeException抛出到应用程序.如果在start()之后立即调用stop(),则会发生这种情况.失败让应用程序相应地采取操作来清理输出文件(例如删除输出文件),因为在发生这种情况时输出文件没有正确构造.
MediaPlayer报告这个"媒体服务器死亡"的事实也是由于同样的原因.您是否可以发布其余代码以查看是否存在可能导致此问题的误解?
| 归档时间: |
|
| 查看次数: |
23421 次 |
| 最近记录: |