MediaRecorder不会录制仅录制视频的视频

时间:2012-03-20 07:56:33

标签: android audio video

我的录像机应用程序不录制视频,它只记录文件扩展名为.mp4的音频。在logcat中没有返回错误。所以,我无法弄清楚我的代码是什么问题。

有谁知道这个问题?或者有关录制视频的内容的任何建议。

这是我的代码:

public class VideoHolderCallback implements SurfaceHolder.Callback{
    MediaRecorder recorder;
    ...
    public void configureRecorder(){
        recorder = new MediaRecorder();
        recorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
        recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
        recorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
        recorder.setOutputFile(filePath);
        recorder.setPreviewDisplay(holder.getSurface());
        recorder.prepare();
        recorder.start();
    }
    ...

}

3 个答案:

答案 0 :(得分:3)

“使用Android框架进行视频捕获需要仔细管理Camera对象并与MediaRecorder类协调”

“与使用设备相机拍摄照片不同,捕捉视频需要非常特别的通话顺序。您必须按照特定的执行顺序成功准备并使用您的应用程序捕获视频,详情如下。”

请查看此处提供的说明和代码段(也请确保您有)http://developer.android.com/guide/topics/media/camera.html#capture-video

还要确保您拥有所需的清单声明 http://developer.android.com/guide/topics/media/camera.html#manifest

答案 1 :(得分:2)

您应该按以下顺序尝试:

public class VideoHolderCallback implements SurfaceHolder.Callback{
MediaRecorder recorder;
...
public void configureRecorder(){

    if(camera == null) {
        camera = Camera.open();
        camera.unlock();
    }
    recorder.setCamera(camera);
    recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
    recorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
    recorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
    recorder.setOutputFile(filePath);
    recorder.setPreviewDisplay(holder.getSurface());
    recorder.prepare();
}

这段代码应该对你有用。您可以随意将AudioEncoder更改为AAC以外的其他设备,尽管它对于低kbps是最有效的。

答案 2 :(得分:0)

//尝试使用你的麦克风

 recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
 recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

refer here: