我的代码:
mediaRecorder = new MediaRecorder();
mediaRecorder.setCamera(camera);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
CamcorderProfile profile = CamcorderProfile.get(QUALITY_LOW);
mediaRecorder.setProfile(profile);
有效。 但我只需要录制视频。
如果我不使用mediaRecorder.setAudioSource(),则mediaRecorder.setProfile()会因IllegalStateException而失败。
有什么想法吗?
答案 0 :(得分:5)
public void setProfile(CamcorderProfile profile)
自:API级别8使用设置 来自CamcorderProfile对象 记录。这个方法应该是 在视频和音频之后调用 来源设置,之前 setOutputFile()。
来自Android - CamcorderProfile docs
每个配置文件指定以下内容 一组参数:
- 文件输出格式
- 视频编解码器格式
- 视频比特率,以每秒位数为单位
- 以每秒帧数为单位的视频帧速率
- 视频帧宽度和高度,
- 音频编解码器格式音频比特率,以每秒位数为单位
- 音频采样率
- 录制的音频通道数。
我说你可以从所需的CamcorderProfile中读取相关的视频相关设置,并自己明确设置。
答案 1 :(得分:4)
MediaRecorder的方法setProfile()
我们可以看到,如果:
profile.quality >= CamcorderProfile.QUALITY_TIME_LAPSE_LOW //1002
&&
profile.quality <= CamcorderProfile.QUALITY_TIME_LAPSE_QVGA //1007
不会有setAudio *()
因此,在您的代码中,您可以在profile.quality=[any int from 1002 to 1007]
之前手动设置setProfile()
。
它会起作用,我试过了。
我找到了正确的答案:
if (getIsMuteShooting()) { // with out audio
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mRecorder.setVideoFrameRate(profile.videoFrameRate);
mRecorder.setVideoSize(profile.videoFrameWidth, profile.videoFrameHeight);
mRecorder.setVideoEncodingBitRate(profile.videoBitRate);
mRecorder.setVideoEncoder(profile.videoCodec);
} else {
mRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mRecorder.setVideoFrameRate(profile.videoFrameRate);
mRecorder.setVideoSize(profile.videoFrameWidth, profile.videoFrameHeight);
mRecorder.setVideoEncodingBitRate(profile.videoBitRate);
mRecorder.setAudioEncodingBitRate(profile.audioBitRate);
mRecorder.setAudioChannels(profile.audioChannels);
mRecorder.setAudioSamplingRate(profile.audioSampleRate);
mRecorder.setVideoEncoder(profile.videoCodec);
mRecorder.setAudioEncoder(profile.audioCodec);
}
答案 2 :(得分:0)
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_480P);
mediaRecorder.setOutputFormat(profile.fileFormat);
mediaRecorder.setVideoFrameRate(profile.videoFrameRate);
mediaRecorder.setVideoSize(profile.videoFrameWidth, profile.videoFrameHeight);
mediaRecorder.setVideoEncodingBitRate(profile.videoBitRate);
mediaRecorder.setVideoEncoder(profile.videoCodec);